`

slf4j-logback

阅读更多
上一篇文章讲了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
1
0
分享到:
评论

相关推荐

    slf4j-api.jar和slf4j-nop.jar打包下载

    SLF4J(Simple Logging Facade for Java)是Java中一个重要的日志抽象层,它为各种日志框架,如Log4j、java.util.logging、Logback等提供了一个统一的接口。通过SLF4J,开发者可以在不修改代码的情况下更换底层的...

    slf4j-api-1.6.1-slf4j-nop-1.6.1.rar

    2. **选择绑定**: 开发者可以通过在类路径中包含特定的日志实现JAR来选择使用哪个日志系统,例如logback-classic.jar会选择logback作为SLF4J的实现。 总之,SLF4J提供了一种灵活的日志抽象层,允许开发者在不影响...

    slf4j-api-1.7.12.jar slf4j-log4j12-1.7.12.jar

    SLF4J(Simple Logging Facade for Java)是Java中的一种日志抽象层,它为各种日志框架,如Log4j、Logback等提供一个简单的接口,使得开发者能够在不改变代码的情况下更换日志实现。这个接口使得应用程序的代码与...

    slf4j-log4j12-1.7.12.jar、slf4j-api-1.7.12.jar

    SLF4J的主要目的是为各种日志框架,如log4j、logback等,提供一个统一的接口,使得应用程序可以独立于具体的日志实现进行开发,提高了代码的可移植性和灵活性。 标题中的"slf4j-log4j12-1.7.12.jar"是SLF4J的一个...

    slf4j-api-1.7.7,slf4j-log4j12-1.7.7

    SLF4J(Simple Logging Facade for Java)是Java中一个重要的日志接口框架,它为各种日志实现提供了一个抽象层,使得开发者能够在运行时动态地选择具体使用的日志实现,例如Log4j、Java Util Logging (JUL)、Logback...

    log4j-1.2.16.jar、slf4j-api-1.6.1.jar、slf4j-log4j12-1.6.1.jar资源包

    `SLF4J`的设计目标是提供一个简单、统一的接口,允许用户在运行时插入所需的日志框架,如`log4j`、`Logback`等。`1.6.1`同样是版本号,表示该API的稳定版本。`SLF4J`通过接口而不是具体的实现来工作,这使得在项目中...

    slf4j-api-1.7.30.jar

    SLF4J的出现是为了统一各种日志框架,如Log4j、java.util.logging、Logback等,使得在不同的项目中可以方便地更换日志系统,而无需修改代码。 标题中的"slf4j-api-1.7.30.jar"指的是SLF4J API的1.7.30版本的jar包。...

    slf4j-api-1.7.26.zip

    SLF4J(Simple Logging Facade for Java)是Java中的一种日志抽象层,它为各种日志框架,如Log4j、Logback等提供了一个统一的接口。SLF4J的设计目标是允许最终用户在部署其应用程序时插入所需的日志库。这样,开发者...

    slf4j-api-1.7.25

    SLF4J(Simple Logging Facade for Java)是Java日志记录的一个接口层,它为各种日志框架,如Log4j、Java Util Logging、Logback等,提供了一个抽象层。`slf4j-api-1.7.25`是SLF4J API的一个版本,其中`1.7.25`代表...

    slf4j-log4j12-1.7.7.jar下载

    SLF4J提供了一个抽象层,允许开发人员在不修改代码的情况下切换不同的日志框架,如Log4j、Logback等。而Log4j12则是Apache Log4j的第二个主要版本,它提供了丰富的日志记录功能和性能优化。 SLF4J的核心思想是引入...

    slf4j-api-1.7.7.jar下载

    SLF4J(Simple Logging Facade for Java)是Java日志记录的一个接口层,它为各种日志框架,如Log4j、Logback等提供一个简单的抽象层,使得最终用户能够在部署时插入所需的日志实现。`slf4j-api-1.7.7.jar`是SLF4J ...

    slf4j-simple-1.7.25.rar

    如果你的项目中已经有了其他日志实现,例如logback,那么应该使用对应的绑定包,如slf4j-logback1.x.jar,而不是slf4j-simple。 在压缩包文件名称列表中仅提到"slf4j",这可能意味着压缩包中包含了SLF4J API和其他...

    slf4j-log4j12-1.5.5.jar、slf4j-log4j12-1.5.6.jar、slf4j-api-1.5.6.jar

    在实际开发中,SLF4J通常与具体的日志实现一起使用,比如Log4j、Logback等。通过SLF4J,开发者可以在不修改代码的情况下,切换不同的日志实现,这对于多模块项目尤其有用,因为每个模块都可以依赖SLF4J,而项目的...

    slf4j-api-1.7.28.jar

    SLF4J的出现旨在解决Java日志库的混乱状况,为各种日志框架(如Log4j、Logback、Java Util Logging等)提供一个抽象层,使得应用程序可以在不修改代码的情况下切换日志实现。 "slf4j-api-1.7.28.jar"是SLF4J API的...

    slf4j-api.jar + slf4j-nop-1.5.0.jar

    SLF4J(Simple Logging Facade for Java)是Java中一个简单日志门面的接口,它为各种日志框架提供了统一的API,比如Log4j、Java Util Logging、Logback等。`slf4j-api.jar`是SLF4J的核心API,包含了各种日志记录方法...

    slf4j-log4j12-1.5.6.jar

    SLF4J (Simple Logging Facade for Java) 是一个用于各种日志框架的简单抽象,例如java.util.logging、Logback 和 Log4j。它的主要目的是为应用程序提供一个可插入的日志接口,允许最终用户在部署时插入所需的日志库...

    slf4j-nop-1.6.rar_slf4j-nop_slf4j-nop-_slf4j-nop-1.6_slf4j-nop-1

    SLF4J(Simple Logging Facade for Java)是一个用于各种日志框架的简单抽象,例如java.util.logging、Logback和Apache Log4j。它为所有这些日志库提供了一个统一的API,允许最终用户在部署时插入所需的日志库。SLF4...

    slf4j-api-1.5.6等jar包

    SLF4J(Simple Logging Facade for Java)是Java日志记录的一个接口层,它为各种日志框架,如Log4j、Java Util Logging、Logback等,提供了一个统一的API。SLF4J的主要目的是使得应用程序可以在部署时选择任意的日志...

    slf4j-api-1.6.1.jar + slf4j-nop-1.6.1.jar

    SLF4J(Simple Logging Facade for Java)是Java日志记录的一个接口层,它为各种日志框架,如Log4j、Logback等提供了一个统一的API,使得开发者可以在项目开发过程中方便地更换日志实现。这个标题提到的是两个SLF4J...

Global site tag (gtag.js) - Google Analytics