`

slf4j-log4j

阅读更多
在几乎所有的业务系统中,日志是必不可少的组建,尤其是复杂的业务系统。
java业界有多种优秀log工具可供选择,log4j 和 logback 更是其中翘楚,本文要讲解的是log4j,即使logback更优秀,但是很多老的生产环境的系统,依然在使用log4j~

日志的目标:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹,作为日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。
注意:即使有再好的log工具,也未必能真正的利用好,这更要看使用者对业务场景的熟悉,以记录有效的数据,曾看到在一些项目中,log随意打印了很多无效的数据,或者数据打印不是业务分析的全部数据,这样log打印几乎是没用。

简单说明:通常我们都提供一个名为 log4j.properties的文件,在第一次调用到Log4J时,Log4J会在类路径(../web-inf/class/当然也可以放到其它任何目录,只要该目录被包含到类路径中即可)中定位这个文件,并读入这个文件完成的配置。这个配置文件告诉Log4J以什么样的格式、把什么样的信息、输出到什么地方。

Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。

Log4J的几个基本核心概念

1、LEVEL日志输出级别:
FATAL       0 
ERROR      3 
WARN       4 
INFO         6 
DEBUG      7

2、Appender
Appender 为日志输出目的地,Log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender(控制台),
    Threshold=WARN:指定日志消息的输出最低层次。
    ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
    Target=System.err:默认情况下是:System.out,指定输出控制台

org.apache.log4j.FileAppender(文件)
    Threshold=WARN:指定日志消息的输出最低层次。
    ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
    File=mylog.txt:指定消息输出到mylog.txt文件。
    Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。

org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
    Threshold=WARN:指定日志消息的输出最低层次。
    ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
    File=mylog.txt:指定消息输出到mylog.txt文件。
    Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
    DatePattern='.'yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下:
    1)'.'yyyy-MM: 每月
    2)'.'yyyy-ww: 每周
    3)'.'yyyy-MM-dd: 每天
    4)'.'yyyy-MM-dd-a: 每天两次
    5)'.'yyyy-MM-dd-HH: 每小时
    6)'.'yyyy-MM-dd-HH-mm: 每分钟
   
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
    Threshold=WARN:指定日志消息的输出最低层次。
    ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
    File=mylog.txt:指定消息输出到mylog.txt文件。
    Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
    MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
    MaxBackupIndex=2:指定可以产生的滚动文件的最大数。

org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

3、Layout
日志输出格式,Log4j提供的layout有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)


4、ConversionPattern
         -X号: X信息输出时左对齐;
    %p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
    %d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
    %r: 输出自应用启动到输出该log信息耗费的毫秒数
    %c: 输出日志信息所属的类目,通常就是所在类的全名
    %t: 输出产生该日志事件的线程名
    %l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
    %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
    %%: 输出一个"%"字符
    %F: 输出日志消息产生时所在的文件名称
    %L: 输出代码中的行号
    %m: 输出代码中指定的消息,产生的日志具体信息
    %n: 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"输出日志信息换行
eg:log4j.appender.infoFile.layout.ConversionPattern = %d{MM-dd HH\:mm\:ss.SSS} %-5p [%F\:%L]%x %m%n

5、配置根rootLogger
其语法为:log4j.rootLogger = [ level ] , appenderName, appenderName, …
eg: log4j.rootLogger = INFO,debugFile,infoFile,errorFile,stdout
注意:INFO 此处的配置 为INFO ,即使其他 appender的Threshold的级别为DEBUG,也不会输出。

6、Threshold 自定义输出的日志级别
  此处配置的输出级别,一定要高于 根Logger 的配置的日志级别,否则无意义。当让除非你使用第七条规定,重新设定了log的输出级别

7、设置 特定包的级别和目的地
设置com.qunar.log4j包的级别为ERROR级别
log4j.logger.com.qunar.log4j=ERROR
特别注意:此处包级别的设置会覆盖rootLogger的级别设置
设置com.qunar.logback包的输出 到logback Appender
log4j.logger.com.qunar.logback=DEBUG,logback

8、MDC 和 NDC
NDC和MDC是log4j用于存储应用程序的上下文信息(context infomation),从而便于在log中使用这些上下文信息。
NDC采用了一个类似栈的机制来push存储上下文信息,每一个线程都独立地储存上下文信息。比如说一个servlet就可以针对每一个request创建对应的NDC,储存客户端地址等等信息。相关的信息使用NDC.push(message);
在log的时候将信息输出。在相应的PatternLayout中使用”%x”来输出存储的上下文信息

MDC:
MDC内部使用了类似map的机制来存储信息,相对应的方法,MDC.put(key,value);在配置PatternLayout的时候使用:%X{key}来输出对应的value
MDC.put("domain", "www.qunar.com");
LogDependencyApi.printLog("xinchun.wang login in~");

log4j.appender.logApi.layout.ConversionPattern = %d{MM-dd HH\:mm\:ss.SSS} %-5p [%F\:%L][%X{domain}]%x %m%n

输出:
07-20 12:00:19.270 ERROR [LogDependencyApi.java:17][www.qunar.com]ndc info 1 ndc info 3 hello xinchun.wang login in~


案例:
log4j.rootLogger = INFO,debugFile,infoFile,errorFile,stdout
#注意:INFO 此处的配置 为INFO ,即使其他 appender的Threshold的级别为DEBUG,也不会输出。
#rootLogger 拥有第一优先级

#此处包级别的设置会覆盖rootLogger的级别设置
#log4j.logger.com.qunar.log4j=DEBUG

#此处的配置,一般适用于引用的jar包,或者特定功能的逻辑,输出到某一个文件内
#log4j.logger.com.qunar.logback=DEBUG,logback

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %c:%L %p - %m%n

log4j.appender.debugFile          = org.apache.log4j.DailyRollingFileAppender
log4j.appender.debugFile.Threshold= DEBUG
log4j.appender.debugFile.Append   = true
log4j.appender.debugFile.File     =${catalina.base}/logs/debugFile.log
log4j.appender.debugFile.encoding = UTF-8
log4j.appender.debugFile.layout   = org.apache.log4j.PatternLayout
log4j.appender.debugFile.layout.ConversionPattern = %d{MM-dd HH\:mm\:ss.SSS} %-5p [%F\:%L]%x %m%n


log4j.appender.infoFile          = org.apache.log4j.DailyRollingFileAppender
log4j.appender.infoFile.Threshold= INFO
log4j.appender.infoFile.Append   = true
log4j.appender.infoFile.File     =${catalina.base}/logs/infoFile.log
log4j.appender.infoFile.encoding = UTF-8
log4j.appender.infoFile.layout   = org.apache.log4j.PatternLayout
log4j.appender.infoFile.layout.ConversionPattern = %d{MM-dd HH\:mm\:ss.SSS} %-5p [%F\:%L]%x %m%n



log4j.appender.errorFile          = org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorFile.Threshold= ERROR
log4j.appender.errorFile.Append   = true
log4j.appender.errorFile.File     =${catalina.base}/logs/errorFile.log
log4j.appender.errorFile.encoding = UTF-8
log4j.appender.errorFile.layout   = org.apache.log4j.PatternLayout
log4j.appender.errorFile.layout.ConversionPattern = %d{MM-dd HH\:mm\:ss.SSS} %-5p [%F\:%L]%x %m%n

log4j.appender.logback          = org.apache.log4j.DailyRollingFileAppender
log4j.appender.logback.Threshold= DEBUG
log4j.appender.logback.Append   = true
log4j.appender.logback.File     =${catalina.base}/logs/logback.log
log4j.appender.logback.encoding = UTF-8
log4j.appender.logback.layout   = org.apache.log4j.PatternLayout
log4j.appender.logback.layout.ConversionPattern = %d{MM-dd HH\:mm\:ss.SSS} %-5p [%F\:%L]%x %m%n


8、maven 配置:
<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.6.4</version>
		</dependency>

		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.6.4</version>
		</dependency>

		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>
0
0
分享到:
评论

相关推荐

    slf4j-log4j12-1.7.25-API文档-中文版.zip

    赠送jar包:slf4j-log4j12-1.7.25.jar; 赠送原API文档:slf4j-log4j12-1.7.25-javadoc.jar; 赠送源代码:slf4j-log4j12-1.7.25-sources.jar; 赠送Maven依赖信息文件:slf4j-log4j12-1.7.25.pom; 包含翻译后的API...

    log4j + slf4j-api + slf4j-log4j12

    slf4j-log4j12-1.7.x版本是SLF4J针对Log4j 1.2版本的绑定器,它使得应用可以使用SLF4J接口,但实际的日志输出通过Log4j进行。这个桥接器让项目能利用SLF4J的灵活性,同时使用Log4j的成熟实现。 在提供的文件名列表...

    slf4j-log4j12-1.6.1-API文档-中文版.zip

    赠送jar包:slf4j-log4j12-1.6.1.jar; 赠送原API文档:slf4j-log4j12-1.6.1-javadoc.jar; 赠送源代码:slf4j-log4j12-1.6.1-sources.jar; 赠送Maven依赖信息文件:slf4j-log4j12-1.6.1.pom; 包含翻译后的API文档...

    slf4j-log4j12-1.7.21-API文档-中文版.zip

    赠送jar包:slf4j-log4j12-1.7.21.jar; 赠送原API文档:slf4j-log4j12-1.7.21-javadoc.jar; 赠送源代码:slf4j-log4j12-1.7.21-sources.jar; 赠送Maven依赖信息文件:slf4j-log4j12-1.7.21.pom; 包含翻译后的API...

    slf4j-log4j12-1.0.jar

    slf4j-log4j12-1.0.jarslf4j-log4j12-1.0.jarslf4j-log4j12-1.0.jarslf4j-log4j12-1.0.jarslf4j-log4j12-1.0.jarslf4j-log4j12-1.0.jarslf4j-log4j12-1.0.jarslf4j-log4j12-1.0.jarslf4j-log4j12-1.0.jarslf4j-log4...

    slf4j-log4j12-1.7.7.jar下载

    在使用SLF4J和Log4j12时,你需要注意的一点是,由于Log4j1.2相比Log4j2在某些方面可能较旧,例如性能和功能更新,因此在新项目中,你可能会考虑使用更新的SLF4J绑定器,如slf4j-log4j2,以便利用Log4j2的改进特性。...

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

    标题中的"slf4j-log4j12-1.7.12.jar"是SLF4J的一个绑定包,它的作用是将SLF4J API与log4j日志框架连接起来。具体来说,这个版本(1.7.12)的绑定包实现了SLF4J的API,并将其桥接到log4j的实现上,使得开发者可以通过...

    slf4j-log4j12-1.5.6.jar

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

    slf4j-log4j12-1.6.1.jar和slf4j-api-1.6.1.jar

    SLF4J-api-1.6.1.jar包含了SLF4J的API,而slf4j-log4j12-1.6.1.jar是SLF4J的一个绑定实现,它桥接了SLF4J API和Log4j的具体实现。 首先,我们来深入了解一下SLF4J。SLF4J的核心是一个接口层,它定义了一套标准的...

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

    SLF4J-log4j12桥接库则是连接SLF4J接口与Log4j实现的桥梁,使得开发者可以使用SLF4J的API,同时利用Log4j进行日志记录。 SLF4J-api-1.5.6.jar是SLF4J API的实现,它包含了一系列的日志记录接口,如`Logger`, `Level...

    slf4j-log4j12-1.6.6.jar

    SLF4J(Simple Logging Facade for Java)与Log4j12的集成包`slf4j-log4j12-1.6.6.jar`是Java开发中常用的日志处理工具,它允许开发者使用SLF4J的API,同时实现在运行时绑定到Log4j 1.2框架。这个版本的jar包包含了`...

    slf4j-log4j12-1.6.1.jar slf4j-log4j

    slf4j-log4j12-1.6.1.jar slf4j-log4j

    slf4j-log4j12 等jar包.rar

    这个"slf4j-log4j12.jar"文件就是SLF4J与Log4j 1.2桥接器的实现,它使得SLF4J调用能够被Log4j 1.2的日志系统捕获并处理。 1. **SLF4J**:SLF4J的设计目标是为各种日志API提供一个简单统一的接口,这样应用程序就...

    最新slf4j-1.7.21.zip源码和jar包

    5、log4j-over-slf4j-1.7.21.jar 6、log4j-over-slf4j-1.7.21-sources.jar 7、osgi-over-slf4j-1.7.21.jar 8、osgi-over-slf4j-1.7.21-sources.jar 9、slf4j-android-1.7.21.jar 10、slf4j-android-1.7.21-...

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

    最后,`slf4j-log4j12-1.6.1.jar`是`SLF4J`到`log4j`的具体适配器,它允许`SLF4J`API调用被映射到`log4j`的实现上。这样,即使你的代码使用了`SLF4J`API,实际上也可以无缝地与`log4j`日志系统协同工作。`slf4j-log4...

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

    SLF4J(Simple Logging Facade for...`slf4j-api-1.7.12.jar`和`slf4j-log4j12-1.7.12.jar`分别是SLF4J API和SLF4J到Log4j的绑定,它们共同工作,使开发者能够利用Log4j的强大功能,同时保持代码与具体日志系统的分离。

    slf4j-api-1.6.1和slf4j-log4j12-1.6.1和log4j-1.2.16包

    SLF4J作为接口层,允许代码独立于具体日志框架,slf4j-log4j12作为桥接器将SLF4J调用转换为Log4j操作,而Log4j则负责实际的日志记录和管理。这种设计模式使得日志管理更加标准化,同时提高了项目的可维护性和可移植...

    slf4j-log4j12-1.7.33.jar

    slf4j-log4j12-1.7.33.jar

    slf4j-log4j12-1.7.16-API文档-中文版.zip

    赠送jar包:slf4j-log4j12-1.7.16.jar; 赠送原API文档:slf4j-log4j12-1.7.16-javadoc.jar; 赠送源代码:slf4j-log4j12-1.7.16-sources.jar; 赠送Maven依赖信息文件:slf4j-log4j12-1.7.16.pom; 包含翻译后的API...

    slf4j-log4j12-1.7.2.jar 亲测可用

    `slf4j-log4j12-1.7.2.jar` 是SLF4J的一个绑定包,它的作用是将SLF4J接口与Log4j 1.2实现进行绑定。这个版本号`1.7.2`表示这是SLF4J的一个稳定版本,发布于2012年,包含了对Log4j 1.2的支持和一些错误修复。 在Java...

Global site tag (gtag.js) - Google Analytics