Log4j 的使用
1、为什么要用日志?
一个程序代码没有日志说明实现是不方便定位问题和理解代码。而使用System.out.println()功能太弱,而且不易控制。如果暂时不想输出了?如果想输出到文件?目前最常使用的就是commons-logging 和 log4j ,commons-logging的目的是为“所有的Java日志实现”提供一个统一的接口,log4j的功能非常强大,目前日志使用的首选。它们有助于代码调试和分析。
Log4j的组成:
Log4j由三个重要的组成构成:日志记录器(Loggers),输出端(Appenders)和日志格式化器(Layout)。
Logger:控制要启用或禁用哪些日志记录语句,并对日志信息进行级别限制:Appenders指定了日志将打印到控制台还是文件中;而Layout则控制日志信息的显示格式。
其配置文件log4j.properties 就是用来配置相关参数,让我们将不同级别的日志信息以哪一种格式输出到我们想要的位置,比如控制台,文件中
级别(Level)
debug() 输出“调试”级别的日志信息;
info() 输出“信息”级别的日志信息;
warn() 输出“警告”级别的日志信息;
error() 输出“错误”级别的日志信息;
fatal() 输出“致命错误”级别的日志信息;
根据不同的性质,日志信息通常被分成不同的级别,从低到高依次是:“调试(DEBUG)”“信息(INFO)”“警告(WARN)”“错误(ERROR)”“致命错误(FATAL)”。将日志分成不同的级别可以让我们更好的控制它,比如,对开发人员来说需要定位错误之类的,可能需要看到更多的详细信息,级别可以设为“debug”,而对于用户来说,只需要“警告”级别的以上的信息。
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(包含日志产生的时间、线程、类别等等信息)
Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:
%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程
%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似: 2002年10月18日 22:10:28,92l
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
Logger对象的获得或创建:
常用的方法有两种:
private static Log log = LogFactory.getLog(TestLog.class); //commons-logging
static Logger logger = Logger.getLogger(TestLog4j.class); //log4j
其中调用Logger.getLogger(Class clazz)是目前ogger对象最理想的方法。
以一个 log4j.properties 为例来说明
#控制日志的相关级别,以及输出的位置,第一个参数是级别,后面的都是日志输出的目的地
log4j.rootLogger=INFO, stdout, logfile
#配置输出的目的地,这里是输出到控制台
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]-[%p] %m%n
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=${webapp.root}/logs/webapp.log
log4j.appender.logfile.MaxFileSize=512KB
# Keep three backup files.
log4j.appender.logfile.MaxBackupIndex=3
# Pattern to output: date priority [category] - message
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%c]-[%p] %m%n
将其使用到一个web项目中的方法
将 commons-logging.*.jar 和 log4j*.jar 导入到classpath, 将log4j.properties 放入到src 下面,在web.xml 中加入如下配置
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
<servlet>
<servlet-name>log4jConfigListener</servlet-name>
<servlet-class>org.springframework.web.util.Log4jConfigServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
在*.java中可以使用
static Logger logger = Logger.getLogger(TestLog4j.class);
Logger.info(“message”);来调用