log4j配置使用教程

      本文演示了如果使用LOG4J的记录日志,实现同一个类对不同的文件写日志。使用的是log4j1.2.17版本

       Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件等。我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。


一、下载apache-log4j-extras-1.2.17-bin.tar.gz
从官网下载
http://logging.apache.org/log4j/1.2/download.html


二、将下载的文件加压,将得到的JAR包加入到工程项目的第三方包里面,工程项目的结构如下:


log4j配置使用教程_第1张图片


三、编辑log4j.properties文件
log4j.properties 配置文件说明
Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局)。

1.配置根Logger
log4j.rootLogger = [ level ] , appenderName, appenderName, …
level 是日志记录的优先级,从高到低排序:OFF FATAL ERROR WARN INFO DEBUG ALL。控制日志输出级别开关。


2.配置日志信息输出目的地Appender
Appender种类:
org.apache.log4j.ConsoleAppender(控制台),  
org.apache.log4j.FileAppender(文件),  
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),  
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),  
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)


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


ConversionPattern布局模式:
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL  
%r 输出自应用启动到输出该log信息耗费的毫秒数  
%c 输出所属的类目,通常就是所在类的全名  
%t 输出产生该日志事件的线程名
%M:输出产生日志信息的方法名。
%F:输出日志消息产生时所在的文件名称。
%L:输出代码中的行号。
%m 输出代码中指定的具体日志信息。
%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”  
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921  
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
%x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%:输出一个"%"字符。
另外,还可以在%与格式字符之间加上修饰符来控制其最小长度、最大长度、和文本的对齐方式。如:
1) c:指定输出category的名称,最小的长度是20,如果category的名称长度小于20的话,默认的情况下右对齐。
2)%-20c:"-"号表示左对齐。
3)%.30c:指定输出category的名称,最大的长度是30,如果category的名称长度大于30的话,就会将左边多出的字符截掉,但小于30的话也不会补空格。

 
3、其他说明
additivity:
默认为TRUE,表示子logger的输入会传送到根logger。这里设置为false,只写子logger的文件。通常用于将不同的LOG分开文件写。


本例的配置文件如下,:

log4j.rootLogger = info,stdout,all

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

log4j.appender.all = org.apache.log4j.DailyRollingFileAppender
log4j.appender.all.File = ../logs/all.log 
log4j.appender.all.Append = true 
log4j.appender.all.Threshold = error 
log4j.appender.all.layout = org.apache.log4j.PatternLayout
log4j.appender.all.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ] [%c] [%l] %m%n

log4j.logger.subDebugLogger=debug, file1appender
log4j.appender.file1appender = org.apache.log4j.DailyRollingFileAppender
log4j.appender.file1appender.File =../logs/debug.log 
log4j.appender.file1appender.Append = true
log4j.appender.file1appender.Threshold = debug 
log4j.appender.file1appender.layout = org.apache.log4j.PatternLayout
log4j.appender.file1appender.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ] [%c] [%l] %m%n
log4j.additivity.subDebugLogger=false  

log4j.logger.subInfoLogger=info, file2appender
log4j.appender.file2appender = org.apache.log4j.DailyRollingFileAppender
log4j.appender.file2appender.File =../logs/info.log 
log4j.appender.file2appender.Append = true
log4j.appender.file2appender.Threshold = info 
log4j.appender.file2appender.layout = org.apache.log4j.PatternLayout
log4j.appender.file2appender.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss,SSS}  [ %t:%r ] - [ %p ] [%c] [%l] %m%n
log4j.additivity.subInfoLogger=false

log4j.logger.subErrorLogger=error, file3appender
log4j.appender.file3appender = org.apache.log4j.DailyRollingFileAppender
log4j.appender.file3appender.File =../logs/error.log 
log4j.appender.file3appender.Append = true
log4j.appender.file3appender.Threshold = error 
log4j.appender.file3appender.layout = org.apache.log4j.PatternLayout
log4j.appender.file3appender.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss,SSS}  [ %t:%r ] - [ %p ] [%c] [%l] %m%n
log4j.additivity.subErrorLogger=false




四、JAVA代码调用


package log4jtest;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

public class test2 {

	public static void main(String[] args) {

		// Logger logger = Logger.getLogger ( test2.class.getName() );
		// 读取配置文件,配置Log4j环境
		PropertyConfigurator.configure(Thread.currentThread().getContextClassLoader().getResource("./conf/log4j.properties"));

		Logger.getRootLogger().debug("DDD");
		Logger.getRootLogger().info("EEE");
		Logger.getRootLogger().error("FFF");
		Logger.getLogger("subDebugLogger").debug("GGG");
		Logger.getLogger("subDebugLogger").info("HHH");
		Logger.getLogger("subDebugLogger").error("III");
		Logger.getLogger("subInfoLogger").debug("JJJ");
		Logger.getLogger("subInfoLogger").info("KKK");
		Logger.getLogger("subInfoLogger").error("LLL");
		Logger.getLogger("subErrorLogger").debug("MMM");
		Logger.getLogger("subErrorLogger").info("NNN");
		Logger.getLogger("subErrorLogger").error("OOO");
	}

}


五、运行调试,运行结果如下,以下是标准输出,当然还有几个文件输出,这里不截图了。

[ INFO] 2017-07-14 16:15:55,417 method:log4jtest.test2.main(test2.java:15)
EEE
[ERROR] 2017-07-14 16:15:55,425 method:log4jtest.test2.main(test2.java:16)
FFF


log4J参考

http://www.cnblogs.com/ITtangtang/p/3926665.html

http://www.codeceo.com/article/log4j-usage.html


你可能感兴趣的:(JAVA)