Log4j 教程

Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;
我们可以
控制每一条日志的输出格式;
通过定义每一条日志信息的级别,
我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

简单示例
1.
首先下载log4j Jar包并引用
地址:http://logging.apache.org/log4j/1.2/

2.在src根目录下新建log4j.properties文件,包含以下内容

log4j.rootLogger=info, stdout, log, errorlog

###Console ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern =  %d{ABSOLUTE} [ %t ] [ %p ]:%L - %m%n

### Log ###  
log4j.appender.log = org.apache.log4j.DailyRollingFileAppender
log4j.appender.log.File = log/log.log
log4j.appender.log.Append = true
log4j.appender.log.Threshold = INFO
log4j.appender.log.DatePattern='.'yyyy-MM-dd
log4j.appender.log.layout = org.apache.log4j.PatternLayout
log4j.appender.log.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t ] %m%n

### Error ###
log4j.appender.errorlog = org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorlog.File = log/error.log
log4j.appender.errorlog.Append = true
log4j.appender.errorlog.Threshold = ERROR 
log4j.appender.errorlog.DatePattern='.'yyyy-MM-dd
log4j.appender.errorlog.layout = org.apache.log4j.PatternLayout
log4j.appender.errorlog.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss} [ %t ] %m%n

3.新建class文件logTest
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;

public class logTest {
  
  public static void main(String args[]){
    // Create a logger by the name of class Log4jTest.
        Logger logger = Logger.getLogger(logTest.class);

        // This request will be disabled since Level.DEBUG < Level.INFO.
        logger.debug("This is debug.");

        // These requests will be enabled.
        logger.info("This is an info.");
        logger.warn("This is a warning.");
        logger.error("This is an error.");
        logger.fatal("This is a fatal error.");    
  }
}


log4j.properties的配置

log4j.properties中的内容为 Log4j的三个重要组件—— Loggers, Appenders, Layouts ,这三个组件协同的工作,
使得开发者能够依据信息类别和级别去纪录信息,并能够运行期间,控制信息记录的方式已经日志存放地点。

配置根Logger,其语法为:

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

level 是日志记录的优先级,它相当于一个总控开关,只有级别到这个等级的或以上的日志才被记录

包括以下:
级别:
ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF

ALL   各级包括自定义级别
DEBUG   指定细粒度信息事件是最有用的应用程序调试
INFO   指定能够突出在粗粒度级别的应用程序运行情况的信息的消息
WARN   指定具有潜在危害的情况
ERROR   错误事件可能仍然允许应用程序继续运行
FATAL   指定非常严重的错误事件,这可能导致应用程序中止
OFF   这是最高等级,为了关闭日志记录

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

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

log4j.appender.appenderName = appender.class   
log4j.appender.appenderName.option = value

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

-------------------------------------------------------------------------------
log4j.appender.log.Threshold = ERROR  

它是表示在总控开关的前提,觉得精确,只有达到这个级别的日志才被记录到这个文件中
-------------------------------------------------------------------------------

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

log4j.appender.appenderName.layout = layout.class 

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


-------------------------------------------------------------------------------
格式参数配置

log4j.appender.log.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t ] %m%n

%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   输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

-------------------------------------------------------------------------------
企业应用
设置指定的类或者包输出的日志格式

#设置指定类,格式为log4j.logger.className(注意加上package路径)
log4j.logger.com.anker.log4j.Test1=info,appender1
#设置指定包,格式为log4j.logger.packageName
log4j.logger.com.anker.log4j=info,appender1
#若是指定字符串创建的logger实例,则无package路径,如Logger logger2 = Logger.getLogger("Test2");
log4j.logger.Test2=info,appender2

如果在同一类中需要输出多个日志文件呢?通过在类中定义多个logger实例,针对每个logger实例
配置不同的输出文件

private static Log logger1 = LogFactory.getLogger("myTest1");
private static Log logger2 = LogFactory.getLogger("myTest2");



设置是否同时输出到log4j.rootLogger所配置的日志中,设为false就不会输出到其它地方
log4j.additivity.com.anker.log4j.Test1 = false
注意这里的loggerName是logger的实例名称(指定class,名称则会包含package路径)

若不想输出到rootLogger的日志,却仍想输出到stduout中,可以通过下面指定
log4j.logger.com.anker.log4j.Test1=info,appender1,stdout

猜你喜欢

转载自yangeoo.iteye.com/blog/2210000