log4j的使用

最近写个短信自动任务项目,需要用到log4j来记录系统日志,经过查找log4j的相关知识,参考各种资料总结如下:在资源包中有我的相关信息,点击下载附件http://download.csdn.net/source/2947747)。

1 Log4j是什么?

Log4j可以帮助调试(有时候debug是发挥不了作 用的)和分析,要下载和了解更详细的内容,还是访问其官方网站吧:http://jakarta.apache.org/log4j 。(见附件)

2Log4j的概念

   Log4j中有三个主要的组件,它们分别是 LoggerAppenderLayoutLog4j 允许开发人员定义多个Logger,每个Logger拥有自己的名字,Logger之间通过名字来表明隶属关系。有一个Logger称为Root,它永远存在,且不能通过名字检索或引用,可以通过Logger.getRootLogger()方法获得,其它Logger通过 Logger.getLogger(String name)方法。

   Appender则是用来指明将所有的log信息存放到什么地方,Log4j中支持多种appender,如 consolefilesGUI componentsNT Event Loggers等,一个Logger可以拥有多个Appender,也就是你既可以将Log信息输出到屏幕,同时存储到一个文件中。

   Layout的作用是控制Log信息的输出方式,也就是格式化输出的信息。

   Log4j中将要输出的Log信息定义了5种级别,依次为DEBUGINFOWARNERRORFATAL,当输出时,只有级别高过配置中规定的级别的信息才能真正的输出,这样就很方便的来配置不同情况下要输出的内容,而不需要更改代码,这点实在是方便啊。

3Log4j的配置文件

在实际编程时,要使Log4j真正在系统中运行事先还要对配置文件进行定义。定义步骤就是对LoggerAppenderLayout的分别使用。Log4j支持两种配置文件格式,一种是XML格式的文件,一种是java propertieskey=value)【Java特性文件(键=值)】。(这里只说明properties文件)

1)配置根Logger

      其语法为:
      log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
      level :
是日志记录的优先级,分为OFFFATALERRORWARNINFODEBUGALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERRORWARNINFODEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。appenderName:就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
    
例如:log4j.rootLoggerinfo,A1,B2,C3

2)配置日志信息输出目的地

      其语法为:
      log4j.appender.appenderName = fully.qualified.name.of.appender.class

//"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
(将日志信息以流格式发送到任意指定的地方)

1.ConsoleAppender选项
         Threshold=WARN:
指定日志消息的输出最低层次。
         ImmediateFlush=true:
默认值是true,意谓着所有的消息都会被立即输出。
         Target=System.err
:默认情况下是:System.out,指定输出控制台
       2.FileAppender
选项
           Threshold=WARN:
指定日志消息的输出最低层次。
           ImmediateFlush=true:
默认值是true,意谓着所有的消息都会被立即输出。
          File=mylog.txt:
指定消息输出到mylog.txt文件。
         Append=false:
默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
      3.DailyRollingFileAppender
选项
         Threshold=WARN:
指定日志消息的输出最低层次。
         ImmediateFlush=true:
默认值是true,意谓着所有的消息都会被立即输出。
         File=mylog.txt:
指定消息输出到mylog.txt文件。
         Append=false:
默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
        DatePattern=''.''yyyy-ww:
每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下:
                    1)''.''yyyy-MM:
每月
                    2)''.''yyyy-ww:
每周
                    3)''.''yyyy-MM-dd:
每天
                    4)''.''yyyy-MM-dd-a:
每天两次
                    5)''.''yyyy-MM-dd-HH:
每小时
                    6)''.''yyyy-MM-dd-HH-mm:
每分钟
    4.RollingFileAppender
选项
         Threshold=WARN:
指定日志消息的输出最低层次。
         ImmediateFlush=true:
默认值是true,意谓着所有的消息都会被立即输出。
         File=mylog.txt:
指定消息输出到mylog.txt文件。
         Append=false:
默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
         MaxFileSize=100KB:
后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
         MaxBackupIndex=2:
指定可以产生的滚动文件的最大数。

3)配置日志信息的格式

       其语法为:
  1. log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
              "fully.qualified.name.of.layout.class"
可以指定下面4个格式中的一个:
               1.org.apache.log4j.HTMLLayout
(以HTML表格形式布局),
         2.org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
         3.org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
         4.org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
                   1.HTMLLayout
选项
                      LocationInfo=true:
默认值是false,输出java文件名称和行号
                      Title=my app file:
默认值是 Log4J Log Messages.
                   2.PatternLayout
选项
                      ConversionPattern=%m%n :
指定怎样格式化指定的消息。
                   3.XMLLayout
选项
                      LocationInfo=true:
默认值是false,输出java文件和行号
        2. log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
          
这里需要说明的就是日志信息格式中几个符号所代表的含义:
           X: X信息输出时左对齐;
                   %p:
输出日志信息优先级,即DEBUGINFOWARNERRORFATAL,
                   %d:
输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:20021018 221028921
                   %r:
输出自应用启动到输出该log信息耗费的毫秒数
                   %c:
输出日志信息所属的类目,通常就是所在类的全名
                   %t:
输出产生该日志事件的线程名
                   %l:
输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
                   %x:
输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
                   %%:
输出一个"%"字符
                   %F:
输出日志消息产生时所在的文件名称
                   %L:
输出代码中的行号
                   %m:
输出代码中指定的消息,产生的日志具体信息
                   %n:
输出一个回车换行符,Windows平台为"rn"Unix平台为"n"输出日志信息换行
           
可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
                     1)%20c
:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
                     2)%-20c:
指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。
                     3)%.30c:
指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。
                     4)%20.30c:
如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边交远销出的字符截掉。

 

4Log4j在程序中的使用

要在自己的程序中使用Log4j,首先需要将commons-logging.jarlogging-log4j-1.2.9.jar导入到构建路径中。然后再将log4j.properties放到根目录下conf文件夹中,并且在程序的入口类中初始化log4j,代码为PropertyConfigurator.configure("./conf/log.properties");,可以把这段代码放到无参构造函数中s。这样就可以在程序中使用log4j了。在类中使用log4j, 首先声明一个静态变量 Logger logger=Logger.getLog("classname");现在就可以使用了,用法如下:logger.debug("debug message")或者logger.info("info message")。 

5java:log -- log4j配置文件基本含义说明
# Set root logger level to DEBUG and its only appender to A1
# log4j
中有五级logger
# FATAL 0
# ERROR 3
# WARN 4
# INFO 6
# DEBUG 7

配置根Logger,其语法为:
# log4j.rootLogger = [ level ] , appenderName, appenderName, …
log4j.rootLogger=INFO, A1 ,R
#
这一句设置以为着所有的log都输出
#
如果为log4j.rootLogger=WARN, 则意味着只有WARN,ERROR,FATAL被输出,DEBUG,INFO将被屏蔽掉.
# A1
设置为 ConsoleAppender.
# log4j
Appender有几层如控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等
# ConsoleAppender
输出到控制台
log4j.appender.A1=org.apache.log4j.ConsoleAppender
# A1
使用的输出布局,其中log4j提供4种布局.
# org.apache.log4j.HTMLLayout
(以HTML表格形式布局)
# org.apache.log4j.PatternLayout
(可以灵活地指定布局模式),
# org.apache.log4j.SimpleLayout
(包含日志信息的级别和信息字符串),
# org.apache.log4j.TTCCLayout
(包含日志产生的时间、线程、类别等等信息)

log4j.appender.A1.layout=org.apache.log4j.PatternLayout
#
灵活定义输出格式 具体查看log4j javadoc org.apache.log4j.PatternLayout
# d
时间 ....
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
# R
输出到文件 RollingFileAppender的扩展,可以提供一种日志的备份功能。
log4j.appender.R=org.apache.log4j.RollingFileAppender
#
日志文件的名称
log4j.appender.R.File=log4j.log
#
日志文件的大小
log4j.appender.R.MaxFileSize=100KB
#
保存一个备份文件
log4j.appender.R.MaxBackupIndex=1 log4j.appender.R.layout=org.apache.log4j.TTCCLayout
# log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值