如题,Logger 自己定义的
Logger = log.New(wrt, "[INFO]", flag)
用 io.MultiWriter 把日志重定向到文件中去了,
但是发现一些第三方的库的日志还是在控制台来打印的,这些日志是如何能控制呢
比如下面这种日志
[mysql] 2019/07/11 17:15:00 packets.go:36: read tcp 1.1.1.1:13089-> 2.2.2.2:3306: read: connection reset by peer
有种方法是运行的时候就重定向到文件中去 , 比如 ./*** >> out.log
但是感觉这样不太优雅,有没有办法在代码里面就能控制所有日志输出的路径的?
1
rrfeng 2019-07-11 17:40:24 +08:00
各种类库一般都支持设置 logger 的,如果它真的不支持,那就没办法了。
|
2
Buffer2Disk OP @rrfeng 上面的日志是 go-sql-driver/mysql v1.4.1 打出来的,定义如下
var errLog = Logger(log.New(os.Stderr, "[mysql] ", log.Ldate|log.Ltime|log.Lshortfile)) 我都服了,感觉 go 的日志系统有点乱七八糟的。。。每个库自己搞一套。。。。 |
3
dabaibai 2019-07-11 18:01:34 +08:00
没法统一,,,,不同的程序猿有自己的想法
|
4
TypeErrorNone 2019-07-11 18:03:13 +08:00
https://github.com/kangkang66/pkg
zap 日志,可以输出到多端 |
5
HarrisonZ 2019-07-11 18:25:26 +08:00
klog
|
6
skiy 2019-07-11 18:33:02 +08:00 via Android
beego 的 log 可以。就是有点大
|
7
katsusan 2019-07-11 19:12:59 +08:00
第三方库的日志也是输出到 stdout,stderr 的,把 os.Stdout, os.Stderr 也重定向到你的日志流试试看,本质上都差不多啦
|
8
Buffer2Disk OP @TypeErrorNone 这个看起来还不错,还有自动切割日志的轮子
我看了下 demo,是只能重定向 error 级别的日志嘛? |
9
Buffer2Disk OP |
10
gamexg 2019-07-11 21:49:17 +08:00
你看下他用的什么日志库,如果是标准库的日志库那么去修改配置就行。
如果不好解决,那么只能考虑用代码重定向标准输出了。 |
11
rrfeng 2019-07-11 22:04:07 +08:00 via Android
我的意思是这些库都提供了 logger 接口,你把自定义的 logger 提供给他他就往你指定的地方输出了。
当然没提供的也有,高质量库都会有的。 |
12
Buffer2Disk OP @katsusan 是的,那只有捕获一下 Stderr 的日志,重定向到日志了。但是估计要区分 Linux,和 windows 平台的差别了
|
13
eslizn 2019-07-11 22:15:54 +08:00
原罪是官方只提供了 struct Logger 而不是一个 interface,并且这个 logger 极其难用和定制
|
14
eslizn 2019-07-11 22:16:19 +08:00
可以试试 zlog
|
15
xfriday 2019-07-11 22:32:23 +08:00
日志又不是协议,干嘛要统一?是不是管的太多了?
|
16
Buffer2Disk OP @katsusan 试了下重定向确实成功了,
但是 windows(本地开发环境)上重定向的代码和 Linux(线上环境)上的是不同的(不兼容), 然后 windows 机器上调试代码的话,Linux 那一段重定向的代码直接被编译器标红了,编译都不能通过 = = , 只能先注释掉 Linux 才能本地调试。。。。也是有点醉 |
17
jinliming2 2019-07-12 08:08:06 +08:00 via iPhone
@Buffer2Disk 可以写成两个文件,一个针对 linux,一个针对 windows,分别在文件开头写 //+build 语句来告诉编译器根据不同平台编译不同文件。
可以参考标准库的实现。 |
18
hellodudu86 2019-07-12 13:34:29 +08:00
logrus
|
19
hellodudu86 2019-07-12 13:35:47 +08:00
试试 1w star 的 logrus
https://github.com/sirupsen/logrus |
20
layxy 2019-07-23 09:10:12 +08:00
不可能统一吧,因为 go 不像 java,有着 log4j 这样统治级的日志框架,目前 go 的框架多,每一个领域都有很多相似品,比如 web 框架,gin,beego,echo,iris,日志框架 logrus,zap,glog,seelog 等,就像你选择 web 框架一样,很多组件开发者也会选择自己喜欢或者觉得比较好的日志框架,所以目前开发 web,你会发现控制台会有各种形式的日志,虽然很多组件可以设置日志的格式,但是太麻烦了
|