Log4j笔记

工作中用到了日志记录,始终没有去仔细的看过,总结过,最近去搜罗了一些资料看了下,做些总结方便以后复习

开始:首先来些介绍

1、 log4j简介

log4j是一个开放源码项目,主要用于日志控制。一个项目如果需要log4j支持,需要引用log4j-1.2.13.jar。Log4j有三个主要的组件:Logger(日志写出器,供程序员输出日志信息)、Appender(日志目的地,把格式化好的日志信息输出到指定的地方去)和Layout(日志格式化器,用来把程序员的loggingrequest格式化成字符串)。

2.直接开始使用

在工程中引入log4j-1.2.13.jar包

 

3.编写属性文件(必须的)

这里采用properties文件格式

log4j.rootLogger=error,A1
#log4j.logger.org.springframework=debug,A2
#log4j.logger.sitech=debug,A2
#//这里给test这个包下的内容设定了error级别的日志才进行操作
log4j.logger.test=info,A2//根记录器

log4j.appender.A1=org.apache.log4j.ConsoleAppender//输出到控制台
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{MM-dd HH:mm:ss} [%-5p] %c %M %L %x - %m%n

log4j.appender.A2=org.apache.log4j.RollingFileAppender //输出到文件
#过滤低于设置值的(如这里设置warn)示
log4j.appender.A2.Threshold=info //过滤器设置
log4j.appender.A2.File=chn.log    //输出文件到chn.log文件
log4j.appender.A2.Append=true //这里的意思是写入文件的方式是追加,也就是不覆盖以前的文件
log4j.appender.A2.MaxFileSize=2KB //文件达到了2KB后会备份一个文件,然后再往新的文件中写入
log4j.appender.A2.MaxBackupIndex=4
log4j.appender.A2.layout=org.apache.log4j.PatternLayout //输出格式
log4j.appender.A2.layout.ConversionPattern=%d{MM-dd HH:mm:ss} [%-5p] %c %M %L %x - %m%n

4.测试类

package test;

import org.apache.log4j.Logger;


public class TestLog4j
{
 Logger  logger = Logger.getLogger(TestLog4j.class);
 public static void main(String[] args)
 {
  TestLog4j  tt = new TestLog4j();
  tt.getMessage();
 }
 
 public  void getMessage(){
  
  logger.info("hello ------info");
  logger.error("error------------");
  logger.fatal("fatal ------fatal");
  
  System.out.println("test------");
 }

}

5.结果

10-19 10:20:05 [INFO ] test.TestLog4j getMessage 17  - hello ------info
10-19 10:20:05 [ERROR] test.TestLog4j getMessage 18  - error------------
10-19 10:20:05 [FATAL] test.TestLog4j getMessage 19  - fatal ------fatal
test------
6.下面是网上找的介绍资料

 

1、 log4j简介

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

 

l2、 log4j配置文件介绍

通常将log4j配置信息放到独立的properties文件中,在代码中通过PropertyConfigurator.configure()函数从properties文件中加载配置信息。

配置文件中需要配置的信息如下

(1)Logger

Logger:需要指定的信息包括日志级别和日志器名称。建议只使用四个级别——ERROR、WARN、INFO、DEBUG(优先级从高到低,定义是不区分大小写)。同一个记录器可有多个名称,从而实现多个输出端。

配置实例:

A:根记录器对象(根记录器总是存在;根记录器没有名字)

log4j.rootLogger=debug,stdout,ROLLING_FILE

B:指定的logger对象实例

log4j.logger.org=error,stdout,ROLLING_FILE

(2)Appender

定义一个appender的输出目的地的格式为:

log4j.appender.appenderName =fully.qualified.name.of.appender.class

log4j提供了以下几种常用的输出目的地class:

org.apache.log4j.ConsoleAppender,将日志信息输出到控制台

org.apache.log4j.FileAppender,将日志信息输出到一个文件

org.apache.log4j.DailyRollingFileAppender,将日志信息输出到一个,并且每天输出到一个新的日志文件

org.apache.log4j.RollingFileAppender,将日志信息输出到一个文件,通过指定文件的的尺寸,当文件大小到达指定尺寸的时候会自动把文件改名,如名为example.log的文件会改名为example.log.1,同时产生一个新的example.log文件。如果新的文件再次达到指定尺寸,又会自动把文件改名为example.log.2,同时产生一个example.log文件。依此类推,直到example.log.MaxBackupIndex,MaxBackupIndex的值可在配置文件中定义。

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

org.apache.log4j.jdbc.JDBCAppender,通过JDBC把日志信息输出到数据库中。

配置实例:

输出到控制台:

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

输出到文件:

log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender

# tomcat根目录\logs\bol_logs,如果指定文件夹不存在会自动创建

log4j.appender.ROLLING_FILE.File=../logs/bol_logs/run.log

#新产生的文件为追加形式

log4j.appender.ROLLING_FILE.Append=true

#每个日志文件大小的最大值

log4j.appender.ROLLING_FILE.MaxFileSize=1024KB

#最多备份文件数

log4j.appender.ROLLING_FILE.MaxBackupIndex=100

输出到数据库:

log4j.appender.JDBC=org.apache.log4j.jdbc.JDBCAppender

log4j.appender.JDBC.BufferSize=1

log4j.appender.JDBC.Driver=oracle.jdbc.driver.OracleDriver

log4j.appender.JDBC.URL=jdbc:oracle:thin:@192.168.100.53:1522:jljf

log4j.appender.JDBC.User=a97

log4j.appender.JDBC.Password=a97

log4j.appender.JDBC.Sql=INSERT INTO LOGGING_TEST(log_date,log_level,location,message) VALUES(to_date('%d{yyyy-MM-dd HH:mm:ss}','YYYY-MM-DDHH24:MI:SS'),'%p','%c','%m')

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

还有一些不常用的appender的配置,见附录

注意:1:当指定为RollingFileAppender设置MaxBackupIndex具体作用为:

1)当example3.log文件的大小超过K时,就把文件改名为example3.log.1,同时生成一个新的example3.log文件

2)当example3.log文件的大小再次超过1K,又把文件改名为example3.log.1。但由于此时example3.log.1已存在,则先把example3.log.1更名为example3.log.2,再把example3.log文件改名为example3.log.1

3)同理,当example3.log文件的大小再次超过1K,先把example3.log.2文件更名为example3.log.3,把example3.log.1文件更名为example3.log.2,再把example3.log文件改名为example3.log.1

4)当example3.log文件的大小再次超过1K,先把example3.log.2文件更名为example3.log.3,旧的example3.log.3文件将被覆盖;把example3.log.1文件更名为example3.log.2,旧的example3.log.2文件被覆盖;最后把example3.log文件改名为example3.log.1并覆盖掉旧的example3.log.1文件。

注意:2:Repository-wide threshold:

Repository-widethreshold指定的Level的优先级高于Logger本身的Level。语法为log4j.threshold=[level],level可以为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL。也可以使用自定义Level,这时的语法为log4j.threshold=[level#classname]。默认为ALL。

依据上面的规则,我们有这样的结论:如果log4j.threshold=ERROR,LoggerC的Level=DEBUG,这时只有高于等于ERROR的日志记录请求会被Logger C处理。

(3)Layout

定义一个appender的布局模式的格式为:

log4j.appender.appenderName.layout =fully.qualified.name.of.layout.class

log4j提供了以下几种常用的布局模式class:

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

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

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

指定PatternLayout时,必须同时指定的ConversionPattern参数

常用参数的具体含义如下:

%c列出logger名字空间的全称,如加上{<层数>}表示出从最内层算起的指定层数的名字空间
%X 按MDC(Mapped DiagnosticContext,线程映射表)输出日志。通常用于多个客户端连接同一台服务器,方便服务器区分是那个客户端访问留下来的日志。
%p 日志信息级别
%d%d{<日期格式>}:日志信息产生时间,使用ISO8601定义的日期格式
%C 日志信息所在地(全限类名)
%m 产生的日志具体信息
%n输出日志信息换行
%F 显示调用logger的源文件名
%l输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数
%L显示调用logger的代码行
%M 显示调用logger的方法名
%r显示从程序启动时到记录该条日志时已经经过的毫秒数
%t输出产生该日志事件的线程名
%% 显示一个

注意:%C日志信息所在地(全限类名)这个参数似乎不好用,在本人接触过的一个系统中想要用这个参数输出日志发生的类,如此配置时log4j.appender.ROLLING_FILE.layout.ConversionPattern=%d- %C:%L - %-5p %C %x - %m%n,在日志中只输出了日志具体信息相当于只有%m有效。

3、 程序中引用

(1)配制文件加载

如果系统加入了spring框架,那么系统系统时会默认加载log4j.properties,如果要加载指定的属性文件可以用:

PropertyConfigurator.configure(“c:/log4j.properties");

注意:如果要排除spring日志的影响,可以改变log4j配置文件的名字或者位置,然后用上面的方式加载。

如果将配置文件改名,但仍需要spring加载,可以在web.xml中配置Log4jConfigListener,具体写法如下:

<context-param>

<param-name>log4jConfigLocation</param-name>

<param-value>/WEB-INF/log4j.properties</param-value>

</context-param>

<listener>

<listener-class>

org.springframework.web.util.Log4jConfigListener

</listener-class>

</listener>

(2)取得日志对象

取得根记录器对象可通过Logger.getRootLogger()函数,要取得非根记录器可通过Logger.getLogger(String logName)函数。可以指定的类的名字作为日志器的名字,其语法如下:

Logger.getLog(Class class)

(3)写入记录

写入不同级别的日志,其语法如下:

Logger.debug ( Object message ) ;
  Logger.info ( Object message ) ;
  Logger.warn ( Object message ) ;
  Logger.error ( Object message ) ;

日志记录的顺序是从当前级别 + 更高级别,如果你的级别记录为info,则执行warn,error记录时候也写入日志信息。

 

阅读更多
个人分类: java
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭