上一篇文章讲了log4j的使用,作为log4j的新一代产品logback 无疑在将来有着更大的市场和应用。
log4j:
http://wangxinchun.iteye.com/blog/2094046
Logback简介:是由log4j创始人设计的又一个开源日记组件。logback当前分成三个模块:logback- core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日记系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日记的功能。
logback的优势:
1、功能更强大,更全面,更灵活。(这是迁移到logback的根本原因)
2、较好的性能。(据说了,没有测试过)
Logback默认的读取步骤:
(1). 尝试在 classpath 下查找文件 logback-test.xml;
(2). 如果文件不存在,则查找文件 logback.xml;
(3). 如果两个文件都不存在,logback 用 Bas icConfigurator 自动对自己进行配置,这会导致记录输出到控制台。
logback 是基于xml 配置的,没有官方的schema。
最外层的标签是:configuration 其,但是其默认对应的xml schema 图如下:
如上图所示,configuration 最重要的配置标签有:appender,logger,root
logger :代表一个日志记录的规则。它指定哪些名字(有继承规则)的log,输出哪些level的日志,以及输出的最终appender。
name: 是必须的属性,一般是包名,类名通过.连接组成的一个字符串。
level :可选的属性,如果没有设置自然继承父包的level属性,以此类推到root的level。
additivity:可选的属性,默认设置为true,如果设置为false,那么log仅仅输出到logger的appender-ref,不再输出的父logger的appender-ref,当然root的appender-ref也不会输出的。
logger 和 level的 继承关系如下:
logger 和 additivity 的关系如下:
eg:
logger.debug("hello {} ", "world");
logger.info("hello {} ", "world");
logger.warn("hello {} ", "world");
logger.error("hello {} ", "world");
<logger name="com.qunar.logback.LogbackTest" additivity="false" level="ERROR">
<appender-ref ref="FILE" />
</logger>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
输出:
1、additivity = false : 只有FILE输出了ERROR级别的日志。STDOUT没有输出。
2、additivity = true:FILE 和STDOUT 都有ERROR日志的输出。
另外注意:com.qunar.logback.LogbackTest对应的logger的 level 设置为debug,而root对应的level为INFO,但是文件输出中有debug。那么说明
logger的level覆盖了root 的level设置。
root:代表一个root logger,它的含义本质依然是一个logger,只是比较特殊所以单独设置一个root标签,这样root logger 也就不需要普通logger所需要的name属性,root有且仅有一个level属性,默认是debug,它不支持其他的任何属性。不过root 可以拥有0或在n个<appender-ref> 元素。
appender:含义为输出的媒介,比如命令行,文件或在数据库等等。英文为:an output destination is called an appender appenders exist for the console, files, remote socket servers, to MySQL, PostgreSQL, Oracle and other databases, JMS, and remote UNIX Syslog daemons.
规则1、一个logger请求(debug,info,error),会输出到logger关联的所有的appender,当然logger的父logger也会输出。
eg:
import org.slf4j.LoggerFactory;
public class LogbackTest2 {
public static final Logger x = LoggerFactory.getLogger("a.x");
public static final Logger y = LoggerFactory.getLogger("a.y");
@Test
public void testLogback() {
x.info("hello {} ", "world");
y.info("hello {} ", "world");
}
}
logback.xml
<logger name="a" additivity="false" level="info">
<appender-ref ref="FILE" />
</logger>
输出:
2014-07-22 21:00:19,835 INFO [main] a.x [LogbackTest2.java:14] hello world
2014-07-22 21:00:19,842 INFO [main] a.y [LogbackTest2.java:15] hello world
上面这个例子说明了:x 和 y 是 a 的子log。所以x 和 y的请求都在 a对应的appender 中输出了。
规则2:
appender的配置相对复杂,相应的配置也是重点和难点。
appender对于的schema 如下:
maven 引入 logback 和slf4j
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.13</version>
</dependency>
案例:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
<contextName>myAppName</contextName>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder
by default -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>myApp.log</file>
<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n
</pattern>
</encoder>
</appender>
<logger name="com.qunar.logback.LogbackTest" level="DEBUG" />
<logger name="com.qunar.logback.LogbackTest2" additivity="false">
<appender-ref ref="FILE" />
</logger>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
其他:
1、设置全局属性。其他地方可以直接使用%name
<contextName>myAppName</contextName>
eg:
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
2、timestamp 标签时间戳。
<timestamp key="byHH" datePattern="yyyy-MM-dd-HH"/>
比如要根据每个小时生成一个日志文件的需求:
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>log-${byHH}.log</file>
<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n
</pattern>
</encoder>
</appender>
- 大小: 2.9 KB
- 大小: 4.4 KB
- 大小: 308.9 KB
- 大小: 69.7 KB
分享到:
相关推荐
https://github.com/tomcat-slf4j-logback/tomcat-slf4j-logback上的jar与源码,网络不好,下载不易,特此分享。包括: logback-1.2.3.zip Tomcat7.0.82\tomcat-juli-7.0.82-slf4j-1.7.25-logback-1.2.3.zip Tomcat...
janino-2.3.17.jar jcl-over-slf4j-1.6.1.jar log4j-1.2.8.jar logback-access-0.9.24.jar logback-classic-0.9.24.jar logback-core-0.9.24.jar ... slf4j-1.6.1+logback-0.9.24.rar slf4j-api-1.6.1.jar
log4j-slf4j+logback1.3.0 共六个jar包
commons-logging-1.2.jar、log4j-1.2.17.jar、logback-classic-1.1.2.jar、logback-core-1.1.2.jar、slf4j-api-1.7.12.jar、slf4j-jcl-1.7.12.jar、slf4j-simple-1.7.12.jar
java.util.logging, logback, log4j) allowing the end user to plug in the desired logging framework at deployment time. Note that SLF4J-enabling your library implies the addition of only a single ...
slf4j-logback4jpos jPos 的 lf4j-logback appender 实现。 本实现工作的灵感来自 Victor 对核心模块的初步工作,这是参考实现。 这种变体处理 jPos 本机 Loggeable 对象,以某种方式取消它们通过 logback 的格式化...
Tomcat SLF4J Logback是tomcat的替代产品,它允许所有内部日志记录全部使用我们喜欢的slf4j / logback库。 注意 从logback 1.1.7开始,不再需要在server.xml中包含${catalina.home}来进行logback访问。 我们还重新...
包含log4j-over-slf4j-1.7.7、logback-classic-1.1.3、logback-core-1.1.3、Flink使用logback须知、自己目前使用的一份logback.xml
slf4j-1.7.25jar包+logback-1.2.3jar包 slf4j-1.7.25jar包+logback-1.2.3jar包
slf4j-1.6.1+logback-0.9.24
slf4j,logback.xml
Slf4j+logback实现logback测试,Slf4j+logback实现logback测试
hibernate的错误SLF4J: ...的解决方法是:下载slf4j-nop.jar、slf4f-simple.jar、slf4j-log4j12.jar、slf4j-jdk14.jar或logback-classic.jar中某一个而且只能是某一个,添加到项目的Referenced Libraries中就可以了。
slf4j+logback需要的jar和配置文件,下载之后可以直接使用
slf4j-logback-mdc-玩具tldr; 您的日志应为JSON。 不要使用Splunk解析日志行。 使用SLF4J,Logback和MDC的示例应用程序。 这是一个玩具。跑我./gradlew run
NULL 博文链接:https://xiayingjie.iteye.com/blog/828498
logbackーslf4j-配置文件实例,比较难得的资料,希望对大家有帮助.
slf4j-api-1.7.32.jar,logback
最新的slf4j-1.7.6+logback-1.1.1,压缩包里面全套的源码和class都有的jar
spring mvc 所需日志jar logback slf4j