猿问

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

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


慕的地6264312
浏览 312回答 2
2回答

绝地无双

您可以使用lumberjack.v2,通过它您可以为每个用户定义一个自定义日志文件。在以下代码段中,我使用一个简单的布尔值来确定是否应将每个用户的日志内容添加到日志文件中。package mainimport (    "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 的日志文件

波斯汪

解决此问题的一种方法是使用记录器机制,您可以在其中为记录器创建一个对象(具有特定文件位置),然后使用该对象写入日志。这样,使用特定对象写入的日志将被重定向到该特定文件。我使用的记录器包是“github.com/sadlil/gologger”示例代码:package mainimport (     "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] 测试文件日志
随时随地看视频慕课网APP

相关分类

Go
我要回答