Log4j初级应用篇

为什么使用日志就不想介绍了,这里献给所有想使用高效率日志的Log4j人门者,希望对大家有帮助。
 
Log4j是Apache组织下Logging Sub Project 的一个子项,可以在http://logging.apache.org下到对应版本的Logging .(不要念Log 四 J,是Log for J)她以高灵活的外部配置方式和不输于System.out的速度成为日志记录库里的佼佼者,著名的开源ORM框架hibernate默认就是采取的Log4j,相当多框架中都提供了Log4j的支持。(以下为log4j-1.2.12)
 
Log4j使用很简单,下面对应用中需要了解的几个知识点进行一番介绍:
 
一个最简单的Log4j应用是由3个因素组成的:Application+log4j-1.2.12.jar+log4j.properties
 
首先我们来看看应用代码中如何使用Log4j,即Coding:
 
package edu.yclc.log4j;
 
import org.apache.log4j.Logger;
 
public class SimpleApp {
 
    /**
     * 创建日志输出对象 @log
     * @log a instance of Logger in Log4j
     */
    public static final Logger log = Logger.getLogger(SimpleApp.class);
   
    /**
     * @param args
     */
    public static void main(String[] args) {
           /**
            * 输出字符串 @str
            * @str Hello World
            */
           log.info("Hello World");      
    }
 
}
    是不是很简单?当然,这个时候你运行是得不到正常结果的,他会出现如下的提示:
 
log4j:WARN No appenders could be found for logger(edu.yclc.log4j.SimpleApp).
log4j:WARN Please initialize the log4j system properly.
 
那么这是个什么问题呢?前面我们已经提到一个简单的Log4j应用是由3个部分组成的,第一个就是应用代码,第二个呢就是你的库(即log4j-version.jar),第三个呢,就是一个存在于classpath根目录下的一个叫log4j.properties的文本文件,采取Properties的键值对存储数据。这个文件存放了log4j的所有配置信息。这个也是Log4j的核心。
 
那么我们首先来看一看一个最简单的log4j.properties:
log4j.rootLogger = INFO,sample
 
log4j.appender.sample=org.apache.log4j.ConsoleAppender
log4j.appender.sample.layout=org.apache.log4j.PatternLayout
log4j.appender.sample.layout.ConversionPattern=%-5p[%t]%37c /n/u4fe1/u606f:-%m%n
 
那么现在我们再看看看看输出结果:
INFO [main]              edu.yclc.log4j.SimpleApp    
信息:-Hello World
 
这里我用空行把整个文件分成了两个部分,上半部分是一句话,大家可以通过字面上猜到他的意思,log4j的根日志者(乱翻译一把^v^), 在这里这个属性代表的意义是什么呢?他的值描叙的是日志输出的级别(稍后对级别有很详细的介绍)以及所有的输出目的地(即日志产生后输出到那)。这里设定的是INFO级别,只有一个日志输出器,叫做sample
那么下面的三句话呢,这里就是每个日志输出器的一个描叙,指定日志输出的类型,方式。
 
下面我们就对以上的两部分进行详细讲解:
 
首先,什么叫做输出级别?有那些输出级别?所谓级别,就是可以控制程序中相应信息日志的开关的,如果设置一个比较高的级别,那么在应用中,很多低级别的输出就无法显示。例如:DEBUG级别小于INFO级别,那么如果配置文件中按上面设置,那么在程序中,所有的debug(内容)都不会被记录下来或打印出来。也就说所有低于当前设置级别的所有信息都不会显示。这样有个很大的好处,在开发时,我们往往希望通过大量的调试信息来调试程序,但一旦发布,这些信息又显得多余,单独删除所有的代码而重构又是一个很繁琐的事情,有了log4j后这个问题被很好的解决,如果你不想部分信息显示出来或反映到日志里面去,可以直接通过设置日志级别来实现隔离这部分日志。这间间单单就是在一个文本文件里面修改几个字母就可以做的(赞~相当灵活)。
那么日志级别有那些呢?分别又代表了那些级别?以log4j1.2.12为例,日志级别有FATAL、ERROR、WARN、INFO、DEBUG这五种级别。其中按我刚刚写的次序,FATAL is Maxium,而DEBUG is Minium。
 
 
其次,紧跟级别之后的是目的地名称列表。既然是列表,当然不会只能是一个名称了,可以是多个。但注意,级别是不可以同时有多个的。名称可以是任意合法的字符串。
 
下面那半部分,则为若干日志输出目的地的配置信息,同样我们以以上例子为例。
他分为3个部分,第一部分为:log4j.appender.名称:决定Appender的类型:
Log4j有如下五种Appender:
 Org.apache.log4j.ConsoleAppender ------控制台
 Org.apache.log4j.FileAppender    ------文件
 Org.apache.log4j.DialyRollingFileAppender ------每天产生一个日志文件
 Org.apache.log4j.RollingFileAppender     -----当文件大小到达指定长度时产生一个新的
 Org.apache.log4j.WriterAppender       ------将日志写到任意流目的地
 
第二部分:配置Layout组件:Log4j提供4种Layout:
 org.apache.log4j.HTMLLayout (以HTML表格的形式布局)
 org.apache.log4j.PatternLayout (可以参数化的灵活布局---推荐)
 org.apache.log4j.SimpleLayout (包含日志级别和信息字符串)
 org.apache.log4j.TTCCLayout   (包含日志产生的时间、线程和类别等信息)
 
第三部分:其中尤以PatternAppender更符合Log4j的精神,灵活多样,但对于初学者来说上面的符号是有点难懂了点。下面对以上符号的意义进行一个简单解说。
 
%p ------日志级别名
%t ------日志请求线程
%c ------日志发生的类名
 
%m%n ------信息内容
 
其他还有:
%d ----输出日志的时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2006528 193022921
%l   ------输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:SampleApp.main(SampleApp.java:10)
 
 
至于那几个/u开头的数字是为了显示中文我自己转换的几个中文的unicode
 
当然,log4j还有很多有用的属性,以下简单介绍几个常用的:
当使用文件记录日志的时候,需要指定文件路径
使用属性:log4j.appender.sample.File = 文件路径 //注意文件分隔符
当使用RollingFileAppender时,还需要指定文件最大尺寸:
使用属性:log4j.appender.sample.MaxFileSize = XXX KB (or other)
 
可以指定特定包的输出级别,仅限于此包:
使用属性:log4j.logger.包名 = 级别
 
当然,log4j的用法是很多的,还有很多灵活的应用方法,笔者也只是简单应用,希望能给初学者带来点帮助,希望对log4j有更好用法的大虾不吝赐教.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值