我想生成四个用于警告,调试,错误和信息的日志文件。 我想控制在运行时应打印哪个文件
问题描述:
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")