Log4j相关

Log4j是Jakarta下的一个开源代码的子项目,通过Log4j,可以使用定制的格式把调试信息和日志信息输出到一个或多个需要的地方。

Log4j的组成
Log4j包括3个很重要的组件:公共类Logger、公共接口Appender和公共抽象类Layout。
1、公共类Logger
日志记录器(Logger)是日志处理的核心组件,负责日志信息的生成。根据配置的日志级别对生成的日志进行输出或截屏。

级别 描述
OFF 关闭所有日志记录的输出
FATAL 输出将会导致应用程序退出的严重错误事件信息
ERROR 输出不影响系统继续运行的错误事件信息
WARN 输出会出现的潜在错误事件信息
INFO 输出应用系统的运行过程信息
DEBUG 输出应用程序的调试信息
ALL 打开所有日志记录的输出

2、公共接口Appender
Appender负责控制日志记录操作的输出,用以指定日志信息的输出目的地(如控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等)。

Appender名称 描述
ConsoleAppender 输出到控制台
FileAppender 输出到指定文件
RollingFileAppender 输出到文件,当文件大小到达指定尺寸的时候产生一个新文件
DailyRollingFileAppender 输出到文件,每天产生一个新文件
WriterAppender 将日志信息以流格式发送到任意指定的地方
JDBCAppender 输出到指定的数据库
SMTPAppender 以邮件形式发送日志信息

3、公共抽象类Layout
Layout负责格式化Appender输出
Log4j提供的layout格式有:

Layout名称 描述
SimpleLayout 包含日志信息的级别和信息字符串
PatternLayout 根据指定的转换模式格式化日志输出
HTMLLayout 以HTML表格形式输出
TTCCLayout 包含日志产生的时间、线程、类别等信息

Log4j提供的输出函数
参数名称 描述
%m 输出代码中指定的消息内容
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类别,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符
%d 输出日志时间点的日期或时间
%l 输出日志事件的发生位置,包括类名称,发生的线程,以及在代码中的行数


Log4j的配置文件
Log4j支持两种配置文件格式,一种是XML格式的文件,另一种是Java属性文件(键=值)

log4j.properties的示例

log4j.rootLogger=DEBUG,A1,A2,A3,A4,A5,A6

# 应用于控制台
log4j.appender.A1=org.apache.log4j.ConsoleAppender 
log4j.appender.A1.layout=org.apache.log4j.PatternLayout 
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} [INFO] %m%n

# 应用于文件
log4j.appender.A2=org.apache.log4j.FileAppender 
log4j.appender.A2.File=${catalina.home}/webapps/testLog/logging.log 
log4j.appender.A2.Append=true 
log4j.appender.A2.layout=org.apache.log4j.PatternLayout 
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} [INFO] %m%n


# 应用于文件回滚
log4j.appender.A3=org.apache.log4j.RollingFileAppender
log4j.appender.A3.File=${catalina.home}/webapps/testLog/logging.log 
log4j.appender.A3.Append=true 
log4j.appender.A3.MaxFileSize=1000KB
log4j.appender.A3.MaxBackupIndex=1
log4j.appender.A3.layout=org.apache.log4j.PatternLayout 
log4j.appender.A3.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} [INFO] %m%n


# 发送日志给邮件
log4j.appender.A4=org.apache.log4j.net.SMTPAppender
log4j.appender.A4.BufferSize=10
log4j.appender.A4.From=发件箱地址
log4j.appender.A4.SMTPHost=SMTP服务器
log4j.appender.A4.Subject=邮件标题
log4j.appender.A4.To=收件箱地址
log4j.appender.A4.layout=org.apache.log4j.PatternLayout 
log4j.appender.A4.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} [INFO] %m%n



# 用于数据库
log4j.appender.A5=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.A5.URL=jdbc:mysql://localhost:3306/test
log4j.appender.A5.driver=com.mysql.jdbc.Driver
log4j.appender.A5.user=root
log4j.appender.A5.password=root
log4j.appender.A5.sql=INSERT INTO LOG4J (Message) VALUES ('%d{yyyy-MM-dd HH\:mm\:ss} [INFO] %m%n')
log4j.appender.A5.layout=org.apache.log4j.PatternLayout 
log4j.appender.A5.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} [INFO] %m%n

# 应用每日生成一个日志文件
log4j.appender.A6=org.apache.log4j.DaliyRollingFileAppender
log4j.appender.A6.File=${catalina.home}/webapps/testLog/logging.log 
log4j.appender.A6.DatePattern=yyyyMMdd-HH'.log' 
log4j.appender.A3.layout=org.apache.log4j.PatternLayout 
log4j.appender.A3.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} [INFO] %m%n

Log4j使用方法
一般log4j遵循以下3步
(1)载入配置文件
PropertyConfigurator.configure(getServletContext().getRealpath("WEB-INF/log4j.properties"));
(2)获得日志记录器
//取得日志记录器Logger,名字为本类的名字。
Logger logger = Logger.getLogger(this.getClass());
(3)利用日志记录器生成日志信息,当以上2个必要步骤执行完毕后,便可以轻松地使用不同优先级的日志记录语句插入想要记录日志的任何地方了。
logger.fatal("这是一条从TestServlet产生的fatal信息!");
logger.error("这是一条从TestServlet产生的error信息!");
logger.warn("这是一条从TestServlet产生的warn信息!");
logger.debug("这是一条从TestServlet产生的debug信息!");
logger.info("这是一条从TestServlet产生的info信息!");

在web.xml中配置使用
<servlet>
<servlet-name>InitLog4j</servlet-name>
<servlet-class>InitLog4j</servlet-class>
<init-param>
<param-name>log4j</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

在InitLog4j.java中载入
PropertyConfigurator.configure("");

在各处需要的地方调用
Logger logger = Logger.getLogger(this.getClass());
logger.info("这是一条从TestServlet产生的info信息!");

猜你喜欢

转载自guanzhenxing.iteye.com/blog/1557930