为了账号安全,请及时绑定邮箱和手机立即绑定

在 golang 中将日志内容写入自定义文件

在 golang 中将日志内容写入自定义文件

Go
慕的地6264312 2022-01-04 09:56:59
我运行一个服务器,将日志内容重定向到一个文件,说“current.log”用于调试目的,我无法向用户显示。但是我遇到了一个场景,我需要向用户显示一组特定的日志,以便他们可以跟进后端正在进行的过程。因此,我尝试为每个用户(每个用户一个日志文件)编写另一组日志(在自定义文件中),我需要向用户显示不包含任何安全数据的日志。
查看完整描述

2 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

您可以使用lumberjack.v2,通过它您可以为每个用户定义一个自定义日志文件。


在以下代码段中,我使用一个简单的布尔值来确定是否应将每个用户的日志内容添加到日志文件中。


package main


import (

    "gopkg.in/natefinch/lumberjack.v2"

    "io/ioutil"

    "log"

    "strconv"

)


type user struct {

    id     int

    logger *log.Logger

}


func createUser(id int, logWanted bool) user {

    var l *log.Logger


    if logWanted {

        // Here the log content will be added in the user log file

        userFIle := &lumberjack.Logger{

            Filename:   "user_log_" + strconv.Itoa(id) + ".log",

            MaxSize:    250, // mb

            MaxBackups: 5,

            MaxAge:     10, // in days

        }

        l = log.New(userFIle, "User: ", log.Ldate|log.Ltime|log.Lshortfile)

    } else {

        // Here the log content will go nowhere

        l = log.New(ioutil.Discard, "User: ", log.Ldate|log.Ltime|log.Lshortfile)

    }

    return user{id, l}

}


func doSomething(u user) {

    u.logger.Printf("Log content: user id %v \n", u.id)

}


func main() {

    user1 := createUser(1, true)

    user2 := createUser(2, false)

    user3 := createUser(3, true)

    doSomething(user1)

    doSomething(user2)

    doSomething(user3)

}

这将创建一个新的组滚动日志文件与原来的日志中的每个用户上。

  • user1 的“user_log_1.log”

  • user3 的“user_log_3.log”

  • 并且没有用户 2 的日志文件


查看完整回答
反对 回复 2022-01-04
?
波斯汪

TA贡献1811条经验 获得超4个赞

解决此问题的一种方法是使用记录器机制,您可以在其中为记录器创建一个对象(具有特定文件位置),然后使用该对象写入日志。这样,使用特定对象写入的日志将被重定向到该特定文件。


我使用的记录器包是“github.com/sadlil/gologger”


示例代码:


package main

import (

     "github.com/sadlil/gologger"

)


func main() {

    logger := gologger.GetLogger(gologger.FILE, "/home/user/path/user.log")

    logger.Log("Test file log")

}

注意:文件将在对象创建时自动创建


因此您可以为每个用户动态创建一个记录器对象(每个用户获得不同的日志文件),并且日志将被重定向到该文件。日志格式将是


[LOG] [2016-04-07 11:31:28] [main::test.go::main] [8] 测试文件日志


查看完整回答
反对 回复 2022-01-04
  • 2 回答
  • 0 关注
  • 311 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信