2016-04-07 91 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
沒有日誌文件