我想用 zap 来记录日志,我现在设计的是,每一种类型的日志分别用一个 logger 来记录,如下
type Logger struct {
DebugLogger *zap.Logger
InfoLogger *zap.Logger
WarnLogger *zap.Logger
ErrorLogger *zap.Logger
PanicLogger *zap.Logger
DPanicLogger *zap.Logger
FatalLogger *zap.Logger
}
这样我就可以用多个文件分别存放不同类型的日志了。但是我疑惑这样 performance 会不会变差。或者有没有什么方法能用一个 logger,然后根据不同的类型写入不同文件。
1
Trim21 2021-04-18 05:13:23 +08:00 via Android
可以自己写一个输出方式的(我忘了 zap 管这个叫啥了),根据不同类型的 record 输出到不同的文件。我之前写过一个输出到 Redis 的宫女,输出到不同文件应该也可以做到
|
2
pangtianyu OP @Trim21 #1 对 我就想知道这个叫啥,关键字是啥……
|
3
jinqzzz 2021-04-18 09:05:04 +08:00 via Android
@pangtianyu 没用过 zap,不过这种一般会搜 golang zap loglevel?
|
4
pangtianyu OP @jinqzzz #3
我搜过 zap log different levels to separate files 之类的,但没有找到我想要的…… |
5
warlock 2021-04-18 10:21:43 +08:00 1
可以试试 通过 zapcore.NewTee 包含多个 core 每个 core 使用不同的 LevelEnabler
|
6
ysicing 2021-04-18 11:18:50 +08:00 1
多个 core,根据不同的 Priority,使用不同的 core 和 WriteSyncer
``` debugCore := zapcore.NewCore(filecoder, zapcore.NewMultiWriteSyncer(c.logfilesyncer("debug")), debugPriority) customCore := zapcore.NewCore(filecoder, zapcore.NewMultiWriteSyncer(c.logfilesyncer("custom")), customPriority) errCore := zapcore.NewCore(filecoder, zapcore.NewMultiWriteSyncer(c.logfilesyncer("err")), errPriority) ``` |
7
Aresrun 2021-04-18 11:19:17 +08:00 1
我现在也是 new 了一个 core 的 slice,然后 NewTee 把这个 slice 加进去
|
8
pangtianyu OP |
9
warlock 2021-04-18 15:55:49 +08:00 1
@pangtianyu 我现在没有测试环境,你试试每个 file,分别实现一下 LevelEnabler 接口,只有你想输出的那个 level 才返回 true
|
10
ZSeptember 2021-04-18 15:58:07 +08:00 1
自定义一个 Core,可以设置 level 就可以了
|
11
maocat 2021-04-18 16:34:21 +08:00 1
|
13
maocat 2021-04-18 16:40:37 +08:00
@Sparkli 去 gist.github.com 把代码写进去,把链接贴过来就行了
|
14
pangtianyu OP |
15
kuoruan 2021-04-20 17:58:05 +08:00
|