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

问题描述:

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()
}
 包Loggers 
 
import(
“ io” 
“ os” 
“ log  “ 
)
 
var logCloser io.Closer 
func MyLogger(){
 logFile,err:= os.OpenFile(” C:/Git/goclassec/src/gclassec/Logs/log.txt“,操作系统。  O_CREATE | os.O_APPEND | os.O_RDWR,0666)
,如果错误!= nil {
 panic(err)
} 
 logCloser = logFile 
 log.SetOutput(logFile)
} 
func CloseMyLogger()  {
 logCloser.Close()
} 
  code>  pre> 
  div>

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")