返回信息流折腾了半天,只能请教大家了(禁止jar的Log输出)
我用log4j.properties文件,最后的文件输出像这样:
```
[DEBUG] 2016-9-26 20:46:32 io.netty.util.internal.logging.Slf4JLogger:debug:76 main - -Dio.netty.eventLoopThreads: 8
[DEBUG] 2016-9-26 20:46:32 io.netty.util.internal.logging.Slf4JLogger:debug:71 main - java.nio.Buffer.address: available
[DEBUG] 2016-9-26 20:46:32 io.netty.util.internal.logging.Slf4JLogger:debug:71 main - sun.misc.Unsafe.theUnsafe: available
[DEBUG] 2016-9-26 20:46:32 io.netty.util.internal.logging.Slf4JLogger:debug:71 main - sun.misc.Unsafe.copyMemory: available
[DEBUG] 2016-9-26 20:46:32 io.netty.util.internal.logging.Slf4JLogger:debug:71 main - direct buffer constructor: available
[DEBUG] 2016-9-26 20:46:32 io.netty.util.internal.logging.Slf4JLogger:debug:76 main - java.nio.Bits.unaligned: available, true
[DEBUG] 2016-9-26 20:46:32 io.netty.util.internal.logging.Slf4JLogger:debug:76 main - java.nio.DirectByteBuffer.<init>(long, int): available
[DEBUG] 2016-9-26 20:46:32 io.netty.util.internal.logging.Slf4JLogger:debug:76 main - java.nio.ByteBuffer.cleaner(): available
[DEBUG] 2016-9-26 20:46:32 io.netty.util.internal.logging.Slf4JLogger:debug:71 main - Platform: Windows
[DEBUG] 2016-9-26 20:46:32 io.netty.util.internal.logging.Slf4JLogger:debug:76 main - Java version: 7
[DEBUG] 2016-9-26 20:46:32 io.netty.util.internal.logging.Slf4JLogger:debug:76 main - -Dio.netty.noUnsafe: false
[DEBUG] 2016-9-26 20:46:32 io.netty.util.internal.logging.Slf4JLogger:debug:76 main - sun.misc.Unsafe: available
[DEBUG] 2016-9-26 20:46:32 io.netty.util.internal.logging.Slf4JLogger:debug:76 main - -Dio.netty.noJavassist: false
[DEBUG] 2016-9-26 20:46:32 io.netty.util.internal.logging.Slf4JLogger:debug:71 main - Javassist: unavailable
[DEBUG] 2016-9-26 20:46:32 io.netty.util.internal.logging.Slf4JLogger:debug:71 main - You don't have Javassist in your class path or you don't have enough permission to load dynamically generated classes. Please check the configuration for better performance.
[DEBUG] 2016-9-26 20:46:32 io.netty.util.internal.logging.Slf4JLogger:debug:76 main - -Dio.netty.tmpdir: C:\Users\shichen\AppData\Local\Temp (java.io.tmpdir)
```
我不想要netty的log输出,也包括很多引入的jar的log输出,那该怎么在写配置呢?
我就写了这一句,log4j.logger.io.netty.util.internal.logging=OFF,不奏效啊。。
这是一条镜像帖。来源:北邮人论坛 / java / #53257同步于 2016/9/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
折腾了半天,只能请教大家了(禁止jar的Log输出)
BaiWfg2
2016/9/26镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
一点背景:
Ceki Gülcü最早开发了log4j,后来JDK本身有了自己的java.util.logging(简称JUL)。后来,Jakarta Commons开发了Commons Logging库(简称JCL),JCL试图提供一个接口:开发人员只依赖接口,而运行的时候选择具体实现。但由于机制有点问题,Ceki又开发了更简单的SLF4j,SLF4j和JCL一样,只是前端;Ceki还开发了比Log4j更高效的Logback后端。故事到这里可以结束了。总的来说,log4j, slf4j, logback都是同一个人开发的。现在推荐使用slf4j做前端,logback做后端。
slf4j工作原理:
0. 一个运行的系统中,有slf4j-api包(接口),唯一的一个后端,以及若干个前端(桥)。
1. 接口:slf4j-api只是一个接口(编程接口)。很多包都依赖slf4j,意思是他们会在代码里调用slf4j的接口来输出日志(指定log的信息以及等级,但并不指定如何记录)。
2. 后端:最终用户(就是要运行整个程序的人)必须选择一个后端。所有调用slf4j的库输出的日志,都会被转发到这个后端上,真的记录日志(可以是打印到屏幕上,记录到文件,记录到网络,什么都行)。这个实现可以是:
- slf4j-simple 最简单的后端,只是打印出来
- logback-classic 使用logback做后端。很强大,建议选用这个。
- slf4j-log4j 这个后端将日志信息转发给log4j
- slf4j-jdk14 这个后端将日志信息转发给java.util.logging
- slf4j-jcl 这个后端将日志信息转发给Commons Logging,Commons logging自己再选择它的后端。
- slf4j-nop 空后端,完全不记录日志
这几个后端只能选择一个!如果运行时的classpath包括了多个后端,会出错。
3. 前端:为了兼容那些使用了别的框架的其他库(遗留代码),slf4j还提供了“桥”,即:把自己伪装成相应的库,把请求转发给slf4j。这些桥包括:
- log4j-over-slf4j 把自己伪装成log4j,把所有log4j的请求转发给slf4j
- jul-over-slf4j 把自己伪装成java.util.logging,把所有java.util.logging的请求转发给slf4j
- jcl-over-slf4j 把自己伪装成Commons Logging,把所有Commons Logging的请求转发给slf4j
如果你使用了别的库,那些库依赖上述日志框架(比如Spring Framework坚持使用Commons Logging),那么你就需要相应的桥(如jcl-over-slf4j)。
注意:桥和它本身的后端不能同时存在。即,如果选定用log4j作为后端(不推荐,建议用logback),就不要再用log4j-over-slf4j了,而是让log4j用它本身直接记录日志。
然后就是配置了。配置只和后端有关。所以,具体怎么配置日志记录,要看你选用了哪个后端。
所以,楼主究竟是用哪个日志框架作为slf4j的后端的呢?