doutiaoku4495 2017-02-10 07:47
浏览 38
已采纳

我想生成四个用于警告,调试,错误和信息的日志文件。 我想控制在运行时应打印哪个文件

package Loggers

import (
    "io"
    "os"
    "log"
)

var logCloser io.Closer
func MyLogger() {
    logFile, err := os.OpenFile("C:/Git/goclassec/src/gclassec/Logs/log.txt", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666)
    if err != nil {
        panic(err)
    }
    logCloser = logFile
    log.SetOutput(logFile)
}
func CloseMyLogger() {
    logCloser.Close()
}
  • 写回答

1条回答 默认 最新

  • dou5454954610 2017-02-10 07:57
    关注

    You can use log.New to create different loggers and wrap it inside your MyLogger

    This is the New format

     New(out io.Writer, prefix string, flag int)
    

    Here is a sample implementation

    Code

    package loggers
    
    import (
        "log"
        "os"
    )
    
    //MyLogger custom logger
    type MyLogger struct {
        ErrorL *log.Logger
        InfoL  *log.Logger
        DebugL *log.Logger
    }
    
    //New returns logger
    //TODO : deal with error
    func New() *MyLogger {
        ml := new(MyLogger)
        if logFile, err := os.OpenFile("C:/Git/goclassec/src/gclassec/Logs/log_error.txt", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666); err == nil {
            ml.ErrorL = log.New(logFile, "ERROR", log.LUTC)
        }
        if logFile, err := os.OpenFile("C:/Git/goclassec/src/gclassec/Logs/log_info.txt", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666); err == nil {
            ml.InfoL = log.New(logFile, "INFO", log.LUTC)
        }
        if logFile, err := os.OpenFile("C:/Git/goclassec/src/gclassec/Logs/log_debug.txt", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666); err == nil {
            ml.DebugL = log.New(logFile, "DEBUG", log.LUTC)
        }
        return ml
    }
    
    func (ml MyLogger) Error(data ...interface{}) {
        ml.ErrorL.Println(data...)
    }
    
    func (ml MyLogger) Info(data ...interface{}) {
        ml.InfoL.Println(data...)
    }
    
    func (ml MyLogger) Debug(data ...interface{}) {
        ml.DebugL.Println(data...)
    }
    

    Usage

    logger := loggers.New()
    logger.Error("Error occured",err)
    logger.Info("Doing","something","again","blah")
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥50 power BI 从Mysql服务器导入数据,但连接进去后显示表无数据
  • ¥15 (关键词-阻抗匹配,HFSS,RFID标签)
  • ¥50 sft下载大文阻塞卡死
  • ¥15 机器人轨迹规划相关问题
  • ¥15 word样式右侧翻页键消失
  • ¥15 springboot+vue 集成keycloak sso到阿里云