⑴ Slf4j + Logback 怎么过滤掉第三方包中的日志显示
其实这跟 Slf4J 通用日志框架没什么关系,单单是 Logback 的事,把 Slf4J 扯进来只因它们是对黄金组合。
我们在 log4j 中想要不显示第三方包的非常冗余的日志输出时,只要在 log4j.properties 中写上:
1
log4j.logger.org.hibernate=ERROR
这样在 hibernate 里的日志级别在 ERROR 以下的 TRACE、DEBUG、WARN 和 INFO 将不被输出,控制台会比较的干净。
Logback 的配置文件是 logback.xml,曾经在里面给 <appender> 加的 <pattern> 是:
1
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
logger 名显示 35 字符,类名优先显示全,类全限名超过总长度则取前面若干包名的首字母连接起来,于是产生了像下面那样的日志输出:
7937 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton
7781 [main] DEBUG o.h.loader.entity.EntityLoader - Static select for entity
这在 Log4J 中是未曾见过的。当时还以为日志名就是 o.s.b.f 这样的东西,于是在 logback.xml 中用
1
2
<logger name="o.s.b" level="WARN"/>
<logger name="o.h" level="WARN"/>
这样的代码来进行封锁,根本就无济于事,大量的 spring、hibernate 的 DEBUG、INFO 等日志照样输出。这时惦记起 Logback 的 filter 功能来了,配置上:
01
02
03
04
05
06
07
08
09
10
11
<filter>
<evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator -->
<expression><![CDATA[
event.getThreadName().contains("Catalina")
|| event.getLoggerName().contains("o.s.b.f")
|| event.getLoggerName().contains("o.h.")
]]></expression>
</evaluator>
<OnMismatch>NEUTRAL</OnMismatch>
<OnMatch>DENY</OnMatch>
</filter>
也是没有效果的。想来 Logback 与 Log4J 相比不会这么差劲的,再怎么也是出自一人之手,想来思路应是一致的,还是该回到 <logger> 的配置上来。
还是 Google 威武,找到答案了:logback per-logger configuration is not working。原来像 "o.s.b.f" 和 "o.h." 这样的东西只是神马浮云,假象而已,它们实际所代表的 logger 名并未变,分别是:
org.springframework.beans.factory.support.DefaultListableBeanFactory
org.hibernate.loader.entity.EntityLoader
所以呢,在 logback.xml 中像 Log4J 一样写上
1
2
<logger name="org.hibernate" level="WARN"/>
<logger name="org.springframework" level="WARN"/>
就把 Spring 和 Hibernate 的日志输出稍加过滤了,都是 %logger{35} 中的那个 {35} 惹的祸,不过也靠它多了解了一点东西。如果只写成 %logger 话那时候当然可以很快的解决问题的。
⑵ logback如何设置打印的日志信息的最大字段长度
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 当发生滚动时 TimeBasedRollingPolicy滚动策略 根据时间来制定滚动策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按天回滚 daily -->
<!-- local
<fileNamePattern>/Users/liyixiang/Documents/logs/xxx-xxx-${appPort}-%d{-MM-dd}.log</fileNamePattern>
-->
<!-- log.dir 在maven profile里配置 -->
<fileNamePattern>/logs/xxx-xxx-${appPort}-%d{-MM-dd}.log</fileNamePattern>
<!-- 控制保留的归档文件的最大数量 日志最大的历史 5天 -->
<maxHistory>5</maxHistory>
</rollingPolicy>
<!-- 日志格式化 -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - [%msg]%n</pattern>
</encoder>
<p>
</appender>
</p>
<p>
<br>
</p>
<p>
</p><pre class="brush:xml; toolbar: true; auto-links: false;">具体的pattern可以查询logback pattern like this --> </pre>
<p></p>
⑶ slf4j怎么屏蔽info和debug级别的日志
SLF4J是一套简单的日志外观模式的Java API,帮助在项目部署时对接各种日志实现。
LogBack在运行时使用JMX帮助修改日志配置,在生产状态下无需重启应用程序。
SLF4J
SLF4J是简单的日志外观模式框架,抽象了各种日志框架例如Logback、Log4j、Commons-logging和JDK自带的logging实现接口。它使得用户可以在部署时使用自己想要的日志框架。SLF4J是轻量级的,在性能方面几乎是零消耗的。
SLF4J没有替代任何日志框架,它仅仅是标准日志框架的外观模式。如果在类路径下除了SLF4J再没有任何日志框架,那么默认状态是在控制台输出日志。
Logback
Logback是Log4j的改进版本,而且原生支持SLF4J(因为是同一作者开发的),因此从其它日志框架如Log4j或JDK的logging迁移到Logback是完全可行的。
由于Logback原生支持SLF4J,因此Logback+SLF4J的组合是日志框架的最佳选择,比SLF4J+其它日志框架的组合要快一些。而且Logback的配置可以是XML或Groovy代码。
注意一个重要的特性,Logback通过JMX修改日志配置(比如日志级别从Debug调整到INFO),可以从JMX控制台直接操作,无需重启应用程序。
此外,Logback的异常堆栈跟踪的信息,有助于调试。
[java] view plain print?
java.lang.NullPointerException: null
at com.fimt.poc.LoggingSample.<init>(LoggingSample.java:16) [classes/:na]
at com.fimt.poc.LoggingSample.main(LoggingSample.java:23) [fimt-logging-poc-1.0.jar/:1.0]
SLF4J API用法
1. 从org.slf4j包导入Logger和LoggerFactory
[java] view plain print?
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
2. 声明日志类
[java] view plain print?
private final Logger logger = LoggerFactory.getLogger(LoggingSample.class);
3. 使用debug、warn、info、error方法并跟踪适合的参数。
所有的方法默认都使用字符串作为输入。
[java] view plain print?
logger.info("This is sample info statement");
SLF4J结合Logback
在pom.xml包含下面的依赖:它会自动包含所有的依赖包logback-core、slf4j-api……
[html] view plain print?
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.7</version>
</dependency>
SLF4J能用于现有的日志框架如Log4j、Commons-logging、java.util.logging(JUL)。
SLF4J结合Log4j
在pom.xml包含下面的依赖
[html] view plain print?
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.2</version>
</dependency>
SLF4J结合JUL (java.util.logging)
在pom.xml包含下面的依赖
[html] view plain print?
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>1.7.2</version>
</dependency>
⑷ logback的日志在java的textarea显示中文乱码
logback的日志在java的textarea显示中文乱码可能是出现了程序上的问题,需要检查一遍
⑸ logback.xml怎么设置字符集
http://zan77552011.blog.51cto.com/5106659/1664290
解决不了,再追问
⑹ 为什么要用SLF4J+Logback 替换commons-logging+log4j
SLF4J是编译时绑定到具体的日志框架,性能优于采用运行时搜寻的方式的commons-logging。
SLF4J提供了更好的日志记录方式,带来下这几方面的好处:
1、更好的可读性;
2、不需要使用logger.isDebugEnabled()来解决日志因为字符拼接产生的性能问题。
先参考2,logback支持了更方便的自定义日志,便于后期的日志分析,
可以将日志格式化保存到各种存储引擎中,
这里是推崇用 Logback 替代 Log4J 的十几个理由,
大至是更快;
好测试;
与 SLF4J 关系紧;
文档丰富;
能自动加载配置文件;
多个 JVM 写一个日志文件,或其他 I/O 错误时不影响程序执行;
配置文件中加入条件控制;
强大的日志过滤;
更强的日志切分功能;
自动压缩、删除日志文件;
异常栈中更多的数据信息。
⑺ IDEA下使用logback控制台打印日志中文字符为乱码怎么破
打开File Encodings,方法:
windows:进入设置页。File-->Settings (快捷键:Ctrl+Alt+S),快速搜索输入encoding
mac:Intellij IDEA-->Preferences,快速搜索输入encoding
如下图所示。
2. 红框内,IDE Encoding 选择UTF-8,Project Encoding选择 GB2312(这个选项跟源码中的字符编码相关)
3. 在靠下的红框内,对于源码,在Default Encoding一栏选择GB2312,并保证该源码目录下的所有文件没有选择其他编码方式(即都使用默认的GB2312)
4.点击OK结束。
⑻ Slf4j + Logback 怎么过滤掉第三方包中的日志显示
1.自动清除法抄开放数据袭库选项 Trunc Log on Chkpt,使数据库系统每隔一段时间自动清除Log。此方法的优点是无须人工干预,由SQLServer自动执行,并且一般不会出现Log溢满的情况;缺点是只清除Log而不做备份。2.手动清除法执行命令“mp transaction”来清除Log。以下两条命令都可以清除日志:mp transaction with truncate_only mp transaction with no_log
⑼ Slf4j + Logback 怎么过滤掉第三方包中的日志显示
SLF4J是一套简单的日志外观模式的Java API,帮助在项目部署时对接各种日志实现。专 LogBack在运行时使用JMX帮助修改日志配属置,在生产状态下无需重启应用程序。 SLF4J SLF4J是简单的日志外观模式框架,抽象了各种日志框架例如Logback、Log4j、Commo...
⑽ logback.xml 怎么设置info信息显示控制台,而debug信息写日志
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
ThresholdFilter is shown below. 级别过滤,临界回点判断答