一、log4j的简介
1. Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
2.Log4j由三个重要的组成构成:日志记录器(Loggers),输出端(Appenders)和日志格式化器(Layout)。
3.日志的级别
日志的级别有:TRACE、DEBUG、INFO、ERROR、WARN、FATAL或者我们自己定义的级别,级别由低到高如下:
TRACE:等级最低,用于将这些等级的日志都写入到日志中。
DEBUG:一般用于细粒度级别上,对调试应用程序非常有帮助。
INFO: 一般和在粗粒度级别上,强调应用程序的运行全程。
ERROR: 指出虽然发生错误事件,但仍然不影响系统的继续运行。
WARN: 表明会出现潜在的错误情形。
FATAL:指出每个严重的错误事件将会导致应用程序的退出。
2.配置日志信息输出目的地
log4j.appender.appenderName = fully.qualified.name.of.appender.class
(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(将日志信息以流格式发送到任意指定的地方)
3.配置日志信息的格式
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
(1)org.apache.log4j.HTMLLayout(以HTML表格形式布局),
(2)org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
(3)org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
(4)org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
配置具体的日志信息格式
如果使用pattern布局就要指定的打印信息的具体格式ConversionPattern,打印参数如下:
%m 输出代码中指定的消息;
%M 输出打印该条日志的方法名;
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL;
%r 输出自应用启动到输出该log信息耗费的毫秒数;
%c 输出所属的类目,通常就是所在类的全名;
%t 输出产生该日志事件的线程名;
%n 输出一个回车换行符,Windows平台为"rn”,Unix平台为"n”;
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS}, 输出类似:2002-10-18 22:10:28,921;
%l 输出日志事件的发生位置,及在代码中的行数;
[QC]是log信息的开头,可以为任意字符,一般为项目简称。
如:log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
则会打印出:[framework] 2018-11-15 11:10:49,068 - org.apache.jsp.Log4jTest_jsp -2 [http-nio-8080-exec-2] DEBUG org.apache.jsp.Log4jTest_jsp - this is debug
二、使用示例
1.目录结构
2.首先导如log4j的包
3.配置log4j的配置文件,如下:
log4j.rootLogger=DEBUG,CONSOLE,FILE,LF5_APPENDER
#DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE
log4j.addivity.org.apache=true
###################
# Console Appender
###################
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d{yyyy-MM-dd HH:mm:ss} - %c -%-4r [%t] %-10p %c %x - %m%n
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n
#####################
# File Appender
#####################
log4j.appender.FILE=org.apache.log4j.FileAppender
#用绝对路径
#log4j.appender.FILE.File=D:/test.log
#用相对路径,apppath已在contextlistener中设置过了
log4j.appender.FILE.File=${apppath}/log/file.log
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# Use this layout for LogFactor 5 analysis
########################
# Rolling File
########################
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.MaxFileSize=10KB
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
####################
# Socket Appender
####################
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
log4j.appender.SOCKET.RemoteHost=localhost
log4j.appender.SOCKET.Port=5001
log4j.appender.SOCKET.LocationInfo=true
# Set up for Log Facter 5
log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%
t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n
########################
# Log Factor 5 Appender
########################
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000
########################
# SMTP Appender
#######################
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=chenyl@hollycrm.com
log4j.appender.MAIL.SMTPHost=mail.hollycrm.com
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.To=chenyl@hollycrm.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
########################
# JDBC Appender
#######################
#log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
#log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
#log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
#log4j.appender.DATABASE.user=root
#log4j.appender.DATABASE.password=
#log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r
#[%t] %-5p %c %x - %m%n')
#log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
#log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout
3.LogUtils
package com.testlog4j.util;
import org.apache.log4j.Logger;
public class LogUtil {
private static Logger logger;
private static LogUtil util;
static {
logger = Logger.getLogger(LogUtil.class);
}
public Logger getLogger() {
return logger;
}
public static LogUtil getInstance() {
if(util==null) {
util = new LogUtil();
}
return util;
}
}
4.测试
<body>
<%
LogUtil.getInstance().getLogger().debug("this is debug");
LogUtil.getInstance().getLogger().info("this is info");
LogUtil.getInstance().getLogger().warn("this is warn");
LogUtil.getInstance().getLogger().error("this is error");
//第一个getLogger()是自己在LogUtil类中写的,第二个是log4j自带的,传入本类名,以便在打印时看到是这个类打印出来的
LogUtil.getInstance().getLogger().getLogger(this.getClass()).debug("this is debug");
%>
</body>
输出到控制台的日志信息
输出到文件的日志信息
输出到Log Factor 5 Appender