log4j properties 配置

来源:互联网 发布:皇室战争卡牌数据 编辑:程序博客网 时间:2024/06/06 00:44

配置步骤:
首先需要jar包 log4j-1.2.17.jar。
然后在classpath根目录下创建配置文件 log4j.properties。
编写完配置文件之后,项目中的日志就会自动输出了。

Log4j的配置主要包括三个部分:Logger(记录器),Appender(输出源)和Layout(布局)

1. Logger

rootLogger,对整个项目的日志输出进行配置,格式:

log4j.rootLogger = [level],appender1,appender2...

模块Logger,对指定模块日志输出进行配置,格式:

log4j.logger.com.user.login = [level] appender5...

level日志级别有5个:DEBUG < INFO < WARN < ERROR < FATAL。一般使用前4个,分别表示日志的重要程度,如果Loggers级别设定为INFO,则INFO、WARN、ERROR和FATAL级别的日志信息都会输出,而级别比INFO低的DEBUG则不会输出。

2. Appender

定义appender名称,同时需要指定输出源,格式:

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

常用的输出源有:
   1.org.apache.log4j.ConsoleAppender (控制台),
   2.org.apache.log4j.FileAppender (文件),
   3.org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件),
   4.org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个 新的文件)
   5.org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)

名称定义之后,在名称后面可以配置appender的具体属性。
共同选项:
Threshold=DEBUG #日志级别,可以理解为是对Logger的第二次过滤。
ImmediateFlush=true #默认值是true,意谓着所有的消息都会被立即输出。
ConsoleAppender属性:
Target=System.err #默认情况下是:System.out,指定输出控制台
FileAppender 选项
File=D:/logs/mylog.txt #指定文件路径。
Append=false #默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
RollingFileAppender 选项
MaxFileSize=2MB #KB, MB 或者是 GB. 到一定大小时,会重新开始,并将之前一个日志文件改名mylog.log.1。
MaxBackupIndex=5 #指定可以产生的滚动文件的最大数。
DailyRollingFileAppender属性:
DatePattern=’.’yyyy-MM #每月滚动一次日志文件,前一个月的日志文件名会改名为mylog.log.yyyy-MM。
另外,也可以指定按周、天、时、分等来滚动日志文件,对应的格式如下:
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:每分钟

3. Layout

配置布局方式和文本格式:

log4j.appender.stdout.layout.=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=[%d{yyy-MM-dd HH:mm:ss.SSS}] [%p] [%t] [%c] [%l] - [%m]%n

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

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

下面是一个比较全面的配置示例:

###############################log4j.properties#################################### Global Log Level(OFF,FATAL,ERROR,WARN,INFO,DEBUG,ALL) #############log4j.rootLogger=DEBUG,STDOUT,DB###### STDOUT Logger ###############log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender#输出目的Appender的日志级别,Appender的级别设置要优先于logger的#级别设置,即先使用Appender的,而不管logger的日志级别是怎样设置的log4j.appender.STDOUT.Threshold=DEBUGlog4j.appender.STDOUT.layout=org.apache.log4j.PatternLayoutlog4j.appender.STDOUT.layout.ConversionPattern=[%p] [%l] %10.10c - %m%n###### File Logger ################开发时,使用DEBUG,发布时最好修改成INFO,如果未设置级别,则使用#父日志记录器的,设置了就使用logger的,不管父日志怎样设置log4j.logger.com.mypakge=DEBUG,FILELOGER#开发时设为true,表示需要屏幕输出,发布时这里最好设置为false,表示不继承父日志记录器的Appenderlog4j.additivity.com.mypakge=truelog4j.appender.FILELOGER=org.apache.log4j.RollingFileAppender#设置日志输出编码方式为UTF-8,如果不指定,会以当前运行操作系统的编码方式记录,这样在有的Linux上会出面乱码log4j.appender.FILELOGER.encoding=UTF-8#${LOGS_PATH}为JVM环境变量,我们可以在运行里给JVM加上该参数 -DLOGS_PATH=e:/tmp/loglog4j.appender.FILELOGER.File=${LOGS_PATH}/system.loglog4j.appender.FILELOGER.MaxFileSize=1024KBlog4j.appender.FILELOGER.MaxBackupIndex=10#文件采用追加方式log4j.appender.FILELOGER.Append=truelog4j.appender.FILELOGER.layout=org.apache.log4j.PatternLayoutlog4j.appender.FILELOGER.layout.ConversionPattern=[%d{yyy-MM-dd HH:mm:ss.SSS}] [%p] [%t] [%c] [%l] - [%m]%n###### THREAD Logger ################线程日志一般记入到另一个文件,线程日志与主线程日志基本上没有什么逻辑关系log4j.logger.threadlogger=DEBUG,THREADLOGERlog4j.additivity.threadlogger=truelog4j.appender.THREADLOGER=org.apache.log4j.RollingFileAppenderlog4j.appender.THREADLOGER.encoding=UTF-8log4j.appender.THREADLOGER.File=${LOGS_PATH}/threadLog.loglog4j.appender.THREADLOGER.MaxFileSize=2000KBlog4j.appender.THREADLOGER.MaxBackupIndex=10log4j.appender.THREADLOGER.layout=org.apache.log4j.PatternLayoutlog4j.appender.THREADLOGER.layout.ConversionPattern=[%d{yyy-MM-dd HH:mm:ss.SSS}] [%p] [%t] [%c] [%l] - [%m]%n###### SOCKET Logger ###############log4j.addivity.org.apache=true log4j.appender.SOCKET=org.apache.log4j.net.SocketAppender#注,SocketAppender没有encoding属性,而接收日志的服务器端类org.apache.log4j.net.Socke#tServer也不能设置编码方式,这里在考虑他们在通信时是不是传递的对象,而不是传递的字符串呢?#log4j.appender.SOCKET.encoding=UTF-8log4j.appender.SOCKET.RemoteHost=localhostlog4j.appender.SOCKET.Port=8089log4j.appender.SOCKET.LocationInfo=truelog4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout#这里的格式配置不是很中要,好像不是要所这里的格式要输出那些消息,这里还是这个疑问就是在通信时是否是#传递的是序列化后的对象?因为服务器接收到消息后能以任何格式输出,可见传递的信息是完整的。~@!@#!哈#刚跟了一下org.apache.log4j.net.SocketAppender源码,在获取输出流的时候使用的是对象流,如下:#oos = new ObjectOutputStream(socket.getOutputStream());,这样就进一步证了我的想法,在#通信时时传递的是对象,所以就不存在字符编码的问题与客户端日志格式输出问题。log4j.appender.SOCKET.layout.ConversionPattern=%m###### MAIL Logger ###############log4j.appender.MAIL=org.apache.log4j.net.SMTPAppenderlog4j.appender.MAIL.Threshold=ERRORlog4j.appender.MAIL.BufferSize=10log4j.appender.MAIL.From=junJZ_2008@126.comlog4j.appender.MAIL.SMTPHost=smtp.126.com#如果含有中文,则需使用native2asii log4j.properties log4jxx.properties 进行转换,否则乱码log4j.appender.MAIL.Subject=Log4J\u63D0\u9192\u60A8\uFF1A\u7CFB\u7EDF\u53D1\u751F\u4E86\u4E25\u91CD\u9519\u8BEFlog4j.appender.MAIL.To=junJZ_2008@163.comlog4j.appender.MAIL.SMTPUsername=junJZ_2008@126.comlog4j.appender.MAIL.SMTPPassword=XXXlog4j.appender.MAIL.layout=org.apache.log4j.PatternLayoutlog4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n###### DB Logger ###############log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppenderlog4j.appender.DB.driver=com.mysql.jdbc.Driverlog4j.appender.DB.URL=jdbc:mysql://127.0.0.1/testlog4j.appender.DB.bufferSize=1log4j.appender.DB.user=rootlog4j.appender.DB.password=111111log4j.appender.DB.sql=insert into oplog (UserName,opttype,createTime,LogLevel,methodinfo,MSG) values ('%X{UserName}','%X{opttype}','%d{yyyy-MM-dd HH:mm:ss.SSS}','%p','%l','%m')    log4j.appender.DB.layout=org.apache.log4j.PatternLayout  
0 0
原创粉丝点击