`
左博涯
  • 浏览: 59194 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Log4J 基本使用方法

阅读更多

 

先看一个log4j.properies配置文件:

#定义输出级别和输出平台

log4j.rootLogger=INFO,stdout,fileout

#设定stdout输出平台

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}][%l]:%m%n

#每天一个日志文件

log4j.appender.fileout=org.apache.log4j.DailyRollingFileAppender

log4j.appender.fileout.File=test.log

log4j.appender.fileout.layout=org.apache.log4j.PatternLayout

log4j.appender.fileout.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}][%l]:%m%n

#对不同的package定义不同的输出级别

log4j.logger.com.daniel.test=DEBUG

 

该配置文件的一个输出结果如下:

[[INFO][2007-04-11 23:21:19][com.daniel.test.AspectJTest.showMessage(AspectJTest.java:17)]:AspectJTest$showMessage@Before:BigNumTest.statisticPrime

[INFO ][2007-04-11 23:21:20][com.daniel.test.BigNumTest.main(BigNumTest.java:25)]:[1][225000]一共有[20020]个素数.

[INFO ][2007-04-11 23:21:20][com.daniel.test.BigNumTest.main(BigNumTest.java:27)]:一共用了[391]毫秒!

 

另外一个输出在文件test.log

 

分析:log4j.properies定义一般分3部分:

log4j.rootLogger(必须)、log4j.appender(必须)、log4j.logger(不必须)

 

1log4j.rootLogger

 

这个配置是必须的,它的定义格式:

 

log4j.rootLogger = level , appenderName, appenderName, …

 

lelve 是定义的输出级别,低于该级别的将不会输出,主要级别有OFFALLFATALERRORWARNINFODEBUG或自定义级别,其中 OFF设定的话将不输出任何信息,ALL设定的话将输出所有信息;另外5个的级别 FATAL>ERROR>WARN>INFO>DEBUG,如果你的lenel设定为INFO,那么不能输出DEBUG信息;

 

appenderName是指定日志信息输出到哪个地方,控制台,文件等等,可同时指定多个输出目的地。

 

2log4j.appender

 

这个也是必须配置的,它是负责控制日志记录操作的输出。它的定义格式如下:

 

log4j.appender.appenderName=someAppender(选择一种输出平台)

[log4j.appender.appenderName.File=文件名](文件输出定义路径)

log4j.appender.appenderName.layout=输出布局

log4j.appender.appenderName.layout.ConversionPattern=输出格式

 

log4j.appender.appenderName指定输出appenderLog4J提供了一下几种appender

 

a),org.apache.log4j.ConsoleAppender(控制台)

b),org.apache.log4j.FileAppender(文件)

c),org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)

d),org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件,可通过log4j.appender.R.MaxFileSize=100KB设置文件大小,还可通过 log4j.appender.R.MaxBackupIndex=1设置为保存一个备份文件)。

e),org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

 

log4j.appender.appenderName.layout指定日志信息的格式(布局)Layout,它负责格式化Appender的输出。Log4j提供的layout有以下几种:

 

org.apache.log4j.HTMLLayout(以HTML表格形式布局)

org.apache.log4j.PatternLayout(可以灵活地指定布局模式)

org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)

org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)。

 

log4j.appender.appenderName.layout.ConversionPattern格式化日志信息,Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:

 

%m 输出代码中指定的消息

%p 输出优先级,即DEBUGINFOWARNERRORFATAL

%r 输出自应用启动到输出该log信息耗费的毫秒数

%c 输出所属的类目,通常就是所在类的全名

%t 输出产生该日志事件的线程名

%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n

%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},输出类似:20021018 221028921

%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

 

3log4j.logger

 

这个不是必需的,如果不配置这个,则采用log4j.rootLoggerlevel级别。它主要是具体到packageClass级别的info,它的定义格式如下:

 

log4j.logger.packageName[.ClassName]=level[,appender]

 

它也可以输出到指定的appender,也可以不指定输出到默认appender

 

4log4j的使用

 

a)、从www.apache.org下载commongs-logging包;

 

b)、在你的class里面定义protected final Log logger = LogFactory.getLog(this.getClass());

c)、在需要日志输出的地方logger.info(...),logger.error(...),logger.debug(...),....注意,在使用时前最好做个判断if (logger.isDebugEnabled()){logger.debug("...");}其他类似。

 

自己的配置文件

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 %p [%c] - %m%n

 

log4j.appender.logfile=org.apache.log4j.RollingFileAppender

log4j.appender.logfile.File=${pjmqle.root}/WEB-INF/log/s2.log

log4j.appender.logfile.MaxFileSize=512KB

# Keep three backup files.

log4j.appender.logfile.MaxBackupIndex=5

# Pattern to output: date priority [category] - message

log4j.appender.logfile.layout=org.apache.log4j.PatternLayout

log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

 

log4j.logger.java.sql=INFO

log4j.logger.org.hibernate=INFO

 

如果只是在Spring环境下用,那么web.xml 部分配置如下,

若是整合在Struts2中则不用配置web.xml 把此log4j.properties文件放到classpath中即可  

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<context-param>
        <param-name>webAppRootKey</param-name>
        <param-value>pjmqle.root</param-value>
</context-param>
    
<context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/log4j.properties</param-value>
</context-param>

 

 

利用log4j代替System.out.println()输入信息:

 

1、在入口类(main方法所在的类)的静态区初始化log4j

    static {

       PropertyConfigurator.configure(

       YesFTPClientFrame.class.getResource("log4j.properties"));

    }

 

2、在每一个需要log的地方都初始化一个私有静态的变量(xx为所在的类名)

  private static Logger logger = Logger.getLogger(xx.class);

  或者去掉static private改成protected,把logger这个静态变量写在父类中,让继承它的子类也能用,

  protected  Logger logger = Logger.getLogger(this.getClass());

注意:要写成this.getClass(),这样才能把字类打印出来,方便错误的查找,否则打印出来的都是父类。

 

 

3、使用log4j提供的方法打印信息(也可以是.error()等方法)

  logger.info(hello);

 

4、用log4j输出异常的堆栈信息(try,catch块中使用,代替e.printStackTrace();)

logger.error("oops, got an exception: ", e);

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics