2016-04-07 49 views
0

我运行一个服务器,将日志内容重定向到一个文件中,称为“current.log”,用于调试目的,这是我无法显示给用户的。但是我得到了一个场景,我需要向用户展示特定日志集,以便他们可以跟进后端进程。所以我试图为每个用户(每个用户一个日志文件)写另一组日志(在一个自定义文件中),我需要向用户显示不包含任何安全数据的日志。要解决这个将日志内容写入golang中的自定义文件

回答

2

一种方法是使用记录机制在那里你可以为您记录器对象(具有特定文件位置),然后使用objec吨写日志。因此,使用特定对象编写的日志将被重定向到该特定文件

,我使用的记录程序包是 “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年4月7日11时31分28秒] [主:: test.go ::主] [8]测试文件日志

2

您可以使用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) 
} 

这将创建一组新的滚动日志文件与记录每个用户在打开

  • “user_log_1.log” 为USER1
  • “user_log_3.log” 为用户3
  • 并为用户2
没有日志文件