并非任何操作都要写日志,我会用日志记录登录、登出、银行交易、多平台数据交互等操作,因功能而定。
log4j的配置分三类(我知道的),1:属性文件log4j.properties;2:xml文件log4j.xml;3:类配置。
这里只介绍属性文件的使用。在此之前,先了解一下日志的输出方式和优先级:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生新文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
优先级:OFF > FATAL > ERROR > WARN > INFO > DEBUG,详细配置会后续给出,下面只是基础配置:
log4j.rootLogger=info, myOut
### log message###
log4j.appender.myOut=org.apache.log4j.ConsoleAppender
log4j.appender.myOut.Target=System.out
log4j.appender.myOut.layout=org.apache.log4j.PatternLayout
log4j.appender.myOut.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
有了这些,日志就可以使用了,rootLogger定义,比info级别低的日志内容不会被输出,也就是debug级别的不会被输出;日志将根据myOut进行输出。
log4j.appender定义myOut(这个名字可以自定义,一一对应即可)的输出方式、输出样式。这里是控制台输出;对于样式,可以去网上搜,找到一个合适的就用着吧,不要花哨。
如何使用:
import org.apache.log4j.Logger;
Logger log = Logger.getLogger(XX.Class);// 根据CLASS输出
Logger log = Logger.getLogger(this.getClass());// 当前实例的CLASS,本质同上
Logger log = Logger.getLogger("属性文件中自定义");// 后续文章有讲解
log.debug("debug");//不会输出,因为属性文件的级别是info
log.info("info");//根据样式,输出16:14:39,843 INFO LogTest:14 - info
log.error("error");//优先级高于info的会输出,输出16:15:40,078 ERROR LogTest:15 - error
针对包或类的日志输出,属性文件中追加一下配置
log4j.logger.java.util.ArrayList=DEBUG
log4j.logger.com.log.test=DEBUG
以上,com.log.test是自定义包,ArrayList不用多说了吧,测试如下:
Logger logA = Logger.getLogger(ArrayList.Class);
log.info("log_info");//16:14:39,843 INFO LogTest:14 - log_info
log.debug("debug");//无输出
logA.debug("array_debug");// 16:15:40,078 DEBUG ArrayList:16 - array_debug
可以看到,虽然全局级别为info,但是针对ArrayList配置后,ArrayList的debug是可以显示的。
基本配置和使用先到这,后续文章会讨论其他问题,如日志写入到文件、自定义配置。