Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 在标准输出中隐藏时间戳/日志级别,但在日志文件中显示它们_Go_Logging - Fatal编程技术网

Go 在标准输出中隐藏时间戳/日志级别,但在日志文件中显示它们

Go 在标准输出中隐藏时间戳/日志级别,但在日志文件中显示它们,go,logging,Go,Logging,所以我有一个CLI,它有时会输出到调试文件。调试文件需要显示时间戳、日志级别等,但我希望标准输出日志不显示这些信息,这样我就可以让用户觉得它很漂亮 有人知道我如何过滤日志级别,并根据日志文件是否是标准输出,为日志程序设置不同的标志吗? 我想我需要两个不同的log.logger实例 例如,我可能希望在日志文件中看到类似的内容 2021/05/24 05:14:19 [DEBUG] Fetching current time... 2021/05/24 05:14:19 [INFO] Hello W

所以我有一个CLI,它有时会输出到调试文件。调试文件需要显示时间戳、日志级别等,但我希望标准输出日志不显示这些信息,这样我就可以让用户觉得它很漂亮

有人知道我如何过滤日志级别,并根据日志文件是否是标准输出,为日志程序设置不同的标志吗? 我想我需要两个不同的log.logger实例

例如,我可能希望在日志文件中看到类似的内容

2021/05/24 05:14:19 [DEBUG] Fetching current time...
2021/05/24 05:14:19 [INFO] Hello World, it is 5:14am today.
但是在控制台(stdout)中,我只想看到

Hello World, it is 5:14am today.
现在我已经对日志级别进行了筛选,但是我仍然需要隐藏显示日志级别的文本,以及日志库设置的前缀(时间戳)。在它击中stdout之前

当我记录事情时,我是这样做的:

log.Println("[DEBUG] Fetching current time...")

// time fetching code...

log.Println("[INFO] Hello World, it is 5:14am today.")
下面是我目前如何设置记录器的

我试着用管道和扫描仪制作两个不同的记录器,但我找不到真正有意义的东西。我基本上只需要通过一个带有
log.LstdFlags
的记录器发送此信息,然后在另一个记录器中过滤掉loglevel前缀,并将该信息发送到另一个带有
log.LstdFlags>的记录器。我不确定如何对代码的其余部分异步执行此操作

minLogLevel:=logutils.LogLevel(“信息”)
如果c.安静{
minLogLevel=logutils.LogLevel(“错误”)
}
colorableWriter:=colorable.newColorableSterr()
过滤器:=&logutils.LevelFilter{
级别:[]logutils.LogLevel{“调试”、“信息”、“警告”、“错误”},
MinLevel:minLogLevel,
作家:彩色作家,
}
如果c.调试{
filter.MinLevel=logutils.LogLevel(“调试”)
c、 DebugFile=fmt.Sprintf(“调试-%s.log”,time.Now().Format(“2006-01-02-15-04-05Z0700”))
logFilePath:=filepath.Join(c.DebugFile)
logFile,err:=os.OpenFile(logFilePath,os.O_-CREATE | os.O_-APPEND | os.O_-RDWR,0666)
如果出错!=零{
恐慌(错误)
}
fmt.Fprintf(日志文件,“版本:%s\n”,commands.VersionCmd{}.String()
fmt.Fprintf(日志文件,“命令:%s\n”,cmd.Args)
fmt.Fprintf(日志文件,“PrefixURI:%s\n”,api.PrefixURI)
fmt.Fprintf(日志文件,“超时:%s\n”,api.Timeout)
fmt.Printf(“将调试日志写入:%s\n”,logFilePath)
mw:=io.MultiWriter(日志文件,彩色writer)
filter.Writer=mw
}
}
log.SetOutput(过滤器)

我对围棋没有经验。但是在日志记录中,我们有
格式化程序
,它定义了您想要存储日志的方式,您可以指定您想要存储日志的格式。另一个是
handler
,它表示要将日志存储在哪里。可以将多个处理程序与记录器关联。因此,您可以创建与单个记录器关联的处理程序(流、文件)。为两个记录器指定不同的格式,它应该可以工作。我不确定
go
中使用的术语。我使用的术语来自python。但go的实现几乎相同。