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")
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥15 python爬取bilibili校园招聘网站
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件
  • ¥15 不同系统编译兼容问题
  • ¥100 三相直流充电模块对数字电源芯片在物理上它必须具备哪些功能和性能?
  • ¥30 数字电源对DSP芯片的具体要求
  • ¥20 antv g6 折线边如何变为钝角
  • ¥30 如何在Matlab或Python中 设置饼图的高度
  • ¥15 nginx中的CORS策略应该如何配置