log4j的使用

来源:互联网 发布:欢乐百世淘宝 编辑:程序博客网 时间:2024/05/16 14:24

log4j简介

     log4j 最重要的特点就可以配置文件灵活的设置日志信息的优先级、日志信息的输出目的地以及日志信息的输出格式。


1. 定义配置文件

Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件log4j.properties(键=值)。

下面将介绍使用log4j.properties文件作为配置文件的方法:

配置根Logger,其语法为:


log4j.rootLogger = [ level ] , appenderName, appenderName, …

其中,level 是日志记录的优先级,分为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。

Log4j建议只使用四个级别,优先级从高到低分别是:ERROR、WARN、INFO、DEBUG

比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。 

appenderName就是指定日志信息输出到哪个地方。可同时指定多个输出目的地。


配置日志信息输出目的地Appender,其语法为:

log4j.appender.appenderName = fully.qualified.name.of.appender.class log4j.appender.appenderName.option1 = value1 … log4j.appender.appenderName.option = valueN


其中,Log4j提供的appender有以下几种:  

org.apache.log4j.ConsoleAppender(控制台), org.apache.log4j.FileAppender(文件), org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件), org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)




配置日志信息的格式(布局),其语法为:


log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class log4j.appender.appenderName.layout.option1 = value1 … log4j.appender.appenderName.layout.option = valueN


其中,Log4j提供的layout有以下几种:  

org.apache.log4j.HTMLLayout(以HTML表格形式布局), org.apache.log4j.PatternLayout(可以灵活地指定布局模式), org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串), org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)


2. 在代码中使用Log4j

得到记录器

     使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。其语法为:

public static Logger getLogger( String name)

  通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:

static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )


读取配置文件

  当获得了日志记录器之后,第二步将配置Log4j环境,其语法为:

<span style="font-size:18px;">BasicConfigurator.configure (): 自动快速地使用缺省Log4j环境。PropertyConfigurator.configure ( String configFilename) :读取使用Java的特性文件编写的配置文件。</span>

<span style="font-size:18px;">例:PropertyConfigurator.configure(".\\src\\log4j.properties")DOMConfigurator.configure ( String filename ) :读取XML形式的配置文件。</span>

插入记录信息(格式化日志信息)

  当上两个必要步骤执行完毕,就可轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,其语法如下:

<span style="font-size:18px;">Logger.debug ( Object message ) ;Logger.info ( Object message ) ;Logger.warn ( Object message ) ;Logger.error ( Object message ) ;</span>



3. 具体实例

log4j.properties:

<span style="font-size:18px;">log4j.rootLogger=INFO, R, A2log4j.appender.R=org.apache.log4j.RollingFileAppenderlog4j.appender.R.File=d:/log.txtlog4j.appender.R.MaxFileSize=100KBlog4j.appender.R.MaxBackupIndex=1log4j.appender.R.layout=org.apache.log4j.PatternLayoutlog4j.appender.R.layout.ConversionPattern=%d [%-5p][%t] - %m%nlog4j.appender.R.Threshold = WARN  log4j.appender.A2=org.apache.log4j.ConsoleAppenderlog4j.appender.A2.layout=org.apache.log4j.PatternLayoutlog4j.appender.A2.layout.ConversionPattern=%d [%-5p][%t] - %m%n</span>


测试代码

<span style="font-size:18px;">public class TestLog4j {          static Logger logger = Logger.getLogger(TestLog4j.class.getName());          public static void main(String[] args) {          PropertyConfigurator.configure ( ".\\src\\log4j.properties");          logger.debug("Debug ...");          logger.info("Info ...");              logger.warn("Warn ...");              logger.error("Error ...");         }}</span>


测试结果

控制台:

<span style="font-size:18px;">2016-09-07 15:31:56,694 [INFO ][main] - Info ...2016-09-07 15:31:56,696 [WARN ][main] - Warn ...2016-09-07 15:31:56,704 [ERROR][main] - Error ...</span>


文件log.txt:

<span style="font-size:18px;">2016-09-07 15:31:56,696 [WARN ][main] - Warn ...2016-09-07 15:31:56,704 [ERROR][main] - Error ...</span>



四、补充

log4j日志分级别输出到不同文件

<span style="font-size:18px;">#log4j.rootLogger=info,stdoutdebug,error   log4j.appender.stdout=org.apache.log4j.ConsoleAppender   log4j.appender.stdout.layout=org.apache.log4j.PatternLayout   log4j.appender.stdout.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n     log4j.logger.info=info   log4j.appender.info=org.apache.log4j.DailyRollingFileAppender   log4j.appender.info.layout=org.apache.log4j.PatternLayout   log4j.appender.info.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n   log4j.appender.info.datePattern='.'yyyy-MM-dd   log4j.appender.info.Threshold = INFO   log4j.appender.info.append=true   log4j.appender.info.File=${catalina.home}/logs/log4j/info.log     log4j.logger.debug=debug   log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender   log4j.appender.debug.layout=org.apache.log4j.PatternLayout   log4j.appender.debug.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n   log4j.appender.debug.datePattern='.'yyyy-MM-dd   log4j.appender.debug.Threshold = DEBUG   log4j.appender.debug.append=true   log4j.appender.debug.File=${catalina.home}/logs/log4j/debug.log     log4j.logger.warn=warn   log4j.appender.warn=org.apache.log4j.DailyRollingFileAppender   log4j.appender.warn.layout=org.apache.log4j.PatternLayout   log4j.appender.warn.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n   log4j.appender.warn.datePattern='.'yyyy-MM-dd   log4j.appender.warn.Threshold = WARN  log4j.appender.warn.append=true   log4j.appender.warn.File=${catalina.home}/logs/log4j/warn.log     log4j.logger.error=error   log4j.appender.error=org.apache.log4j.DailyRollingFileAppender   log4j.appender.error.layout=org.apache.log4j.PatternLayout   log4j.appender.error.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n   log4j.appender.error.datePattern='.'yyyy-MM-dd   log4j.appender.error.Threshold = ERROR   log4j.appender.error.append=true   log4j.appender.error.File=$${catalina.home}/logs/log4j/error.log</span>




  






1 0