Log4j使用

 
log4j概述:

log4j包含三类重要抽象:Logger(日志写出器),Appender(日志目的地),Layout(日志格式化器)。

log4j还有一个Configurator(配置器)

log4j可以在程序中进行配置,但是更常见的方式是通过配置文件来配置,这样更加具有灵活性。

log4j通常是在一个servlet中进行配置和加载,随应用程序启动。而使用时,一般封装成静态方法,在程序中直接调用对应的静态方法。

Logger:

命名规则:

      Logger由一个String类的名字识别,logger的名字是大小写敏感的,且名字之间具有继承的关系,子名有父名作为前缀,用点号.分隔。如:x.y是x.y.z的父亲。

 Level:

      每个logger都被分配了一个日志级别 (log level),用来控制日志信息的输出。

      未被分配level的logger将继承它最近的父logger的level。

      每条输出到logger的日志请求(logging request)也都有一个level,如果该request的level大于等于该logger的level,则该request将被处理(称为enabled)否则该request将被忽略。

      Level类中预定义了五个level,它们的大小关系如下:

      ALL <DEBUG < INFO < WARN < ERROR < FATAL < OFF

root logger:

      所有logger的祖先,它具有如下属性:

      1) 它总是存在的

      2) 它不可以通过名字获得

取得Logger:

      调用public static Logger Logger.getRootLogger()获得root logger

      调用public static Logger Logger.getLogger(String name)获得一个named logger

      调用public static Logger Logger.getLogger(Class clazz)获得一个named logger

Appender:

每个logger都可以拥有一个或者多个appender,每个appender表示一个日志的输出目的地

root logger拥有目标为system.out的consoleAppender,故默认情况下,所有的logger都将继承该appender。

默认情况下,logger的additive标志被设置为true,表示子logger将继承父logger的所有appenders。该选项可以被重新设置,表示子logger将不再继承父logger的appenders

常见Appender:

      ConsoleAppender - 目的地为控制台的Appender
      FileAppender - 目的地为文件的Appender
      RollingFileAppender - 目的地为大小受限的文件的Appender 
      DailyRollingFileAppender 目的为每天一个日志文件的Appender
      SMTPAppender目的为邮件的Appender
      JDBCAppender目的为数据库的Appender

Layout:

常见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,921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)

%和字母之间的数字表达一共占几个字符,之间的负号表示左对齐。

Configurator:

常见Configurator:

xml配置文件需要org.apache.log4j.DOMConfigurator.configure(String file)来读入

property文件需要org.apache.log4j.xml.PropertyConfigurator.configure(String file)来读入

BasicConfigurator:

BasicConfigurator.configure()方法使用最简的方法配置log4j环境。

BasicConfigurator.configure()完成的任务是:

用默认pattern创建PatternLayout对象p:
PatternLayout p = new PatternLayout("%-4r[%t]%-5p%c%x - %m%n");
用p创建ConsoleAppender对象a,目标是system.out,标准输出设备:
ConsoleAppender a = new ConsoleAppender(p,ConsoleAppender.SYSTEM_OUT);
为root logger增加一个ConsoleAppender p:
rootLogger.addAppender(p);
把root logger的log level设置为DEBUG级别:
rootLogger.setLevel(Level.DEBUG);

XML配置文件:

常用部分的树状结构

xml declaration and dtd
            |
          log4j:configuration
            |
            +-- appender (name, class)
            |     |
            |     +-- param (name, value)
            |     +-- layout (class)
            |           |
            |           +-- param (name, value)
            +-- logger (name, additivity)
            |     |
            |     +-- level (class, value)
            |     |     |
            |     |     +-- param (name, value)
            |     +-- appender-ref (ref)
            +-- root
                  |
                  +-- param (name, class)
                  +-- level
                  |     |
                  |     +-- param (name, value)
                  +-- appender-ref (ref) 

示例:

<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

<appender name="jwolf.all" class="org.apache.log4j.ConsoleAppender">
   <layout class="org.apache.log4j.PatternLayout">
       <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />
   </layout>
</appender>

<appender name="jwolf.error" class="org.apache.log4j.RollingFileAppender">
   <param name="File" value="log/error.log" />
   <param name="Append" value="true" />
   <param name="MaxFileSize" value="10240" />
   <param name="MaxBackupIndex" value="10" />
   <layout class="org.apache.log4j.PatternLayout">
       <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />
   </layout>
</appender>

<appender name="jwolf.security" class="org.apache.log4j.RollingFileAppender">
   <param name="File" value="log/security.log" />
   <param name="Append" value="true" />
   <param name="MaxFileSize" value="10240" />
   <param name="MaxBackupIndex" value="10" />
   <layout class="org.apache.log4j.PatternLayout">
       <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />
   </layout>
</appender>

<logger name="jwolf.error.log">
   <level value="debug" />
   <appender-ref ref="jwolf.error" />
</logger>
<logger name="jwolf.security.log">
   <level value="debug" />
   <appender-ref ref="jwolf.security" />
</logger>

<root> <!-- 设置接收所有输出的通道 -->
   <appender-ref ref="jwolf.all" />
</root>

</log4j:configuration>

property配置文件:

# 应用于控制台

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 - %c -%-4r [%t] %-5p %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


#应用于文件
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=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

# 应用于文件回滚
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

# 发送日志给邮件
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=web@www.wuset.com
log4j.appender.MAIL.SMTPHost=www.wusetu.com
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.To=web@www.wusetu.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

# 用于数据库
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

从网络搜集供学习和交流用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值