log4j使用说明java
在使用Log4j时若提示以下信息:
log4j:WARN No appenders could be found for logger
则,解决办法为:在项目的src下面新建file名为log4j.properties文件,内容以下:web
# Configure logging for testing: optionally with log file
#能够设置级别:debug>info>error
#debug:能够显式debug,info,error
#info:能够显式info,error
#error:能够显式errorspring
log4j.rootLogger=debug,appender1
#log4j.rootLogger=info,appender1
#log4j.rootLogger=error,appender1sql
#输出到控制台
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
#样式为TTCCLayout
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayoutapache
而后,存盘退出。再次运行程序就会显示Log信息了。mybatis
经过配置文件可知,咱们须要配置3个方面的内容:
一、根目录(级别和目的地);
二、目的地(控制台、文件等等);
三、输出样式。多线程
是什么信息。。。。
log4j.appender.R=org.apache.log4j.DailyRollingFileAppendermvc
System.setProperty("org.apache.commons.logging.Log","org.apache.commons.logging.impl.NoOpLog");app
log4j.rootLogger=INFO,logfile
# DailyRollingFileAppender:天天产生一个日志文件框架
# Threshold=WARN:指定日志消息的输出最低层次。
# ImmediateFlush=true:默认值是true,意谓着全部的消息都会被当即输出。
# File=mylog.txt:指定消息输出到mylog.txt文件。
# Append=false:默认值是true,即将消息增长到指定文件中,false指将消息覆盖指定的文件内容。
# DatePattern='.'yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。固然也能够指定按月、周、天、时和分
# %p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,。若是是调用debug()输出的,则为DEBUG,依此类推
# %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: 输出代码中指定的消息,产生的日志具体信息,如log(message)中的message
# %n: 输出一个回车换行符,Windows平台为"/r/n",Unix平台为"/n"输出日志信息换行
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=/WEB-INF/logs/log4j.log
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.logfile.ImmediateFlush=true
log4j.appender.logfile.Append=true
log4j.appender.logfile.Threshold=DEBUG
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c]- %m%n
log4j.rootLogger=DEBUG, stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=log/test.log
log4j.appender.logfile.MaxFileSize=128MB
log4j.appender.logfile.MaxBackupIndex=3
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
private static Log logger1 = LogFactory.getLog("mylogger1");
private static Log logger2 = LogFactory.getLog("mylogger2");
log4j.logger.mylogger1=DEBUG,test1
log4j.appender.test1=org.apache.log4j.FileAppender
log4j.appender.test1.File=log/test1.log
log4j.appender.test1.layout=org.apache.log4j.PatternLayout
log4j.appender.test1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
log4j.logger.mylogger2=DEBUG,test2
log4j.appender.test2=org.apache.log4j.FileAppender
log4j.appender.test2.File=log/test2.log
log4j.appender.test2.layout=org.apache.log4j.PatternLayout
log4j.appender.test2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
#log4j.appender.test1.Encoding=utf8
#log4j.appender.stdout.Target=System.out
还有一个问题,就是这些自定义的日志默认是同时输出到log4j.rootLogger所配置的日志中的,如何能只让它们输出到本身指定的日志中呢?别急,这里有个开关:
log4j.additivity. mylogger1 = false
它用来设置是否同时输出到log4j.rootLogger所配置的日志中,设为false就不会输出到其它地方了。
可是这种方式有个小缺陷,那就是打印的日志中类名只能是mylogger或者mylogger2。
如下配置屏蔽SSH框架的日志输出:
log4j.logger.org.springframework=OFF
log4j.logger.org.apache.struts2=OFF
log4j.logger.com.opensymphony.xwork2=OFF
log4j.logger.com.ibatis=OFF
log4j.logger.org.hibernate=OFF
log4j.logger.org.springframework.web.servlet.mvc.method.annotation=WARN
log4j.logger.org.springframework=INFO
log4j.logger.org.mybatis=INFO
log4j.logger.org.apache=INFO
log4j.logger.com.yoyosys.console=DEBUG
log4j.logger.org.apache.ibatis=debug,stdout
log4j.logger.java.sql=debug,stdout
1.2 配置根Logger
根logger主要定义log4j支持的日志级别及输出目的地,其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
其中,level 是日志记录的优先级,分为OFF、FATAL、 ERROR、WARN、INFO、DEBUG、 ALL或者自定义的级别。
建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。
appenderName指定日志信息输出到哪一个地方,可同时指定多个输出目的地。
Log4j提供的appender有如下几种:
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(天天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
**********************************************************************
其中,Log4j提供的layout有如下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(能够灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
1.5 设置package输出级别
能够设置不一样package的日志输出级别,语法为:
log4j.logger.packageName=level
其中,packageName为实际的包名,level为日志级别,例如:
参考资料
**********************************************************************
http://blog.csdn.net/hbcui1984/article/details/5007197
http://liuzhijun.iteye.com/blog/1746571
http://blog.csdn.net/zhoulenihao/article/details/24995397 **********************************************************************