【发布时间】:2019-02-25 10:43:14
【问题描述】:
我一直在尝试在 golang 中使用 log4go。但是我找不到一个合适的例子,其中使用 log4go 配置属性(如旋转、maxSize 等)来创建记录器。有人可以提供一个例子吗?我参考了很多网站。
【问题讨论】:
我一直在尝试在 golang 中使用 log4go。但是我找不到一个合适的例子,其中使用 log4go 配置属性(如旋转、maxSize 等)来创建记录器。有人可以提供一个例子吗?我参考了很多网站。
【问题讨论】:
log4go 没有很好的文档记录,我在original repository 找到了一些文档。
如果可以的话,我会使用不同的库,例如 logrus,它有更好的文档、示例并且正在积极开发中。
【讨论】:
简单的方法是使用logConfig xml,例如:
<code>
<logging>
<filter enabled="true">
<tag>stdout</tag>
<type>console</type>
<!-- level is (:?FINEST|FINE|DEBUG|TRACE|INFO|WARNING|ERROR) -->
<level>INFO</level>
</filter>
<filter enabled="true">
<tag>file</tag>
<type>file</type>
<level>INFO</level>
<property name="filename"><log file Path></property>
<!--
%T - Time (15:04:05 MST)
%t - Time (15:04)
%D - Date (2006/01/02)
%d - Date (01/02/06)
%L - Level (FNST, FINE, DEBG, TRAC, WARN, EROR, CRIT)
%S - Source
%M - Message
It ignores unknown format strings (and removes them)
Recommended: "[%D %T] [%L] (%S) %M"
-->
<property name="format">[%D %T] [%L] (%S) %M</property>
<property name="rotate">true</property> <!-- true enables log rotation, otherwise append -->
<property name="maxsize">10M</property> <!-- \d+[KMG]? Suffixes are in terms of 2**10 -->
<property name="maxlines">0K</property> <!-- \d+[KMG]? Suffixes are in terms of thousands -->
<property name="daily">true</property> <!-- Automatically rotates when a log message is written after midnight -->
<property name="maxbackup">10</property> <!-- Max backup for logs rotation -->
</filter>
</logging>
就个人而言,我更喜欢 zarolog :https://github.com/rs/zerolog
【讨论】:
这是一个可以有两个日志的示例:
{
"console": {
"enable": true,
"level": "ERROR"
},
"files": [{
"enable": true,
"level": "DEBUG",
"filename":"./log/sys.log",
"category": "syslog",
"pattern": "[%D %T] [%L] (%S) %M",
"rotate": true,
"maxsize": "5M",
"maxlines": "10K",
"daily": true
},
{
"enable": true,
"level": "INFO",
"filename":"./log/market.log",
"category": "marketlog",
"pattern": "[%D %T] [%L] (%S) %M",
"rotate": false,
"maxsize": "10M",
"maxlines": "20K",
"daily": false
}
]
}
代码中的用法:
log4go.LOGGER("syslog").Info("...")
log4go.LOGGER("marketlog").Debug("...")
在这种情况下不会编写关于 marketlog 的调试调用,因为“INFO”级别会自动将其过滤掉。
【讨论】: