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 的日志文件
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] 测试文件日志
- 2 回答
- 0 关注
- 311 浏览
添加回答
举报