`

log4j 讲解

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

1.1. log4j configuration scripts in properties format
lg4j.properties 文件作为作为常用的配置文件的方法如下:

Ø         配置根 Logger
Logger 负责处理日志记录的大部分操作。
其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
    其中, level 是日志记录的优先级,分为 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 ALL 或者自定义的级别。 Log4j 建议只使用四个级别,优先级从高到低分别是 ERROR 、 WARN 、 INFO 、 DEBUG 。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了 INFO 级别,只有等于及高于这个级别的才进行处理,则应用程序中所有 DEBUG 级别的日志信息将不被打印出来。 ALL: 打印所有的日志, OFF :关闭所有的日志输出。 appenderName 就是指定日志信息输出到哪个地方。可同时指定多个输出目的地。

Ø         Appender

配置日志信息输出目的地 Appender 负责控制日志记录操作的输出。
其语法为:
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
log4j.appender.appenderName.optionN = valueN

其中, Log4j 提供的 appender 有以下几种:
org.apache.log4j.ConsoleAppender (控制台),
org.apache.log4j.FileAppender (文件),
org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件),
org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新的文件),可通过 log4j.appender.R.MaxFileSize=100KB 设置文件大小,还可通过 log4j.appender.R.MaxBackupIndex=1 设置为保存一个备份文件。
org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)
例:

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
定义一个名为 stdout 的输出目的地, ConsoleAppender 为控制台。

Ø         Layout

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



Ø         格式化日志信息
Log4J 采用类似 C 语言中的 printf 函数的打印格式格式化日志信息,打印参数如下:
%m 输出代码中指定的消息
%p 输出优先级,即 DEBUG , INFO , WARN , ERROR , FATAL
%r 输出自应用启动到输出该 log 信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符, Windows 平台为 “rn” , Unix 平台为 “n”
%d 输出日志时间点的日期或时间,默认格式为 ISO8601 ,也可以在其后指定格式,比如: %d{yyyy MMM dd HH:mm:ss,SSS} ,输出类似: 2002 年 10 月 18 日 22 : 10 : 28 , 921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。


log4j.propertie 示例文件:

log4j.rootCategory=INFO, stdout,file

###. 定义名为 stdout 的输出端的类型
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n


###. 定义名为 file 的输出端的类型为每天产生一个日志文件。
log4j.appender.file =org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=log.txt
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n


###. 指定 com.neusoft 包下的所有类的等级为 DEBUG 。可以把 com.neusoft 改为自己项目所用的包名。
log4j.logger.com.neusoft=DEBUG

###. 如果项目中没有配置 EHCache ,则配置以下两句为 ERROR 。
log4j.logger.com.opensymphony.oscache=ERROR
log4j.logger.net.sf.navigator=ERROR

### struts 配置
log4j.logger.org.apache.commons=ERROR

log4j.logger.org.apache.struts=WARN

### displaytag 配置
log4j.logger.org.displaytag=ERROR

### .spring 配置
log4j.logger.org.springframework=DEBUG

### . ibatis 配置
log4j.logger.com.ibatis.db=WARN
### . hibernate 配置

log4j.logger.org.hibernate=DEBUG



log4j.logger.org.apache.velocity=FATAL
log4j.logger.com.canoo.webtest=WARN


1.2. log4j configuration scripts in XML format
<?xml version="1.0" encoding="GB2312" ?>

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

<appender name="org.zblog.all" class="org.apache.log4j.RollingFileAppender">

<!-- 设置通道 ID:org.zblog.all 和输出方式: org.apache.log4j.RollingFileAppender -->

<param name="File" value="all.output.log" />

<!-- 设置 File 参数:日志输出文件名 -->

<param name="Append" value="false" />

<!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->

   <param name="MaxBackupIndex" value="10" />

   <layout class="org.apache.log4j.PatternLayout">

       <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />

<!-- 设置输出文件项目和格式 -->

   </layout>

</appender>

<appender name="org.zblog.zcw" class="org.apache.log4j.RollingFileAppender">

   <param name="File" value="output.log" />

   <param name="Append" value="true" />

   <param name="MaxFileSize" value="10240" />

<!-- 设置文件大小 -->

   <param name="MaxBackupIndex" value="10" />

   <layout class="org.apache.log4j.PatternLayout">

   <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />

   </layout>

</appender>

<logger name="zcw.log">

<!-- 设置域名限制,即 zcw.log 域及以下的日志均输出到下面对应的通道中 -->

   <level value="debug" />

<!-- 设置级别 -->

   <appender-ref ref="org.zblog.zcw" />

<!-- 与前面的通道 id 相对应 -->

</logger>

<root>

<!-- 设置接收所有输出的通道 -->

   <appender-ref ref="org.zblog.all" />

<!-- 与前面的通道 id 相对应 -->

</root>

</log4j:configuration>


2.   log4j in java
2.1. commongs-logging+Log4j
Ø         导入所有需的 commongs-logging 类:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


Ø         获取日志记录器

在自己的类中定义一个 org.apache.commons.logging.Log 类的私有静态类成员:
private final Log log = LogFactory.getLog(getClass());
LogFactory.getLog() 方法的参数使用的是当前类的 class 。


Ø         输出日志信息

使用 org.apache.commons.logging.Log 类的成员方法输出日志信息:


if (log.isDebugEnabled()) {

   log.debug("debug…");

}
if (log.isInfoEnabled()){
   log.info("Info…");
}
if (log.isWarnEnabled()){
   log.warn("warn …");
}
if (log.isErrorEnabled()){
   log.error("error …");

}
if (log.isFatalEnabled()){
   log.fatal("fatal …")
}

2.2. 单独使用 Log4j
Ø         获取日志记录器

得到记录器使用 Log4j ,这个记录器将负责控制日志信息。其语法为:

public static Logger getLogger( String name)

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

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


Ø         读取配置文件

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

BasicConfigurator.configure () : 自动快速地使用缺省 Log4j 环境。

PropertyConfigurator.configure(String configFilename) :读取使用 Java 的特性文件编写的配置文件。

例: PropertyConfigurator.configure(".\\src\\log4j.properties"), 若将 log4j.properties 放在工程根目录下也可不写此句,程序会自动找到配置文件。

DOMConfigurator.configure ( String filename ) :读取 XML 形式的配置文件。


Ø         输出日志信息

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

Logger.debug ( Object message ) ;

Logger.info ( Object message ) ;

Logger.warn ( Object message ) ;

Logger.error ( Object message ) ;


log4j 范例程序

下面将使用一个最简单的范例程序来进一步说明 log4j 的使用方法。程序代码如下:


import org.apache.log4j.*;

import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;

public class LogTest {

static Logger logger = Logger.getLogger(LogTest.class.getName());

public static void main(String[] args) {

PropertyConfigurator.configure ( “.\\src\log4j.properties”) ;

//DOMConfigurator.configure(".\\src\log4j.xml");// 加载 .xml 文件
logger.debug("Debug ...");

logger.info("Info ...");

logger.warn("Warn ...");

logger.error("Error ...");

}

}

3.   log4j in database
3.1. 数据库配置
Ø         导入所需的驱动包

无论使用哪种数据库都需要将驱动包导入服务中。

Ø         创建所需的表

首先要保证你的数据库中有 log 表,并且保正字段的长度,否则写入日志时操作会失败

数据字典说明:

CREATE TABLE LOG (

        ID                 INTEGER NOT NULL PRIMARY KEY,

        LOGDATE            DATE,

        LOGTIME            TIME,

        LOGTHREAD          VARCHAR(50),

        LOGLEVEL           VARCHAR(50),

        LOGCLASS           VARCHAR(50),

        LOGLOGGER          VARCHAR(200),

        LOGMESSAGE         VARCHAR(2000)

)

GO

3.2. log4j 配置文件
## 配置数据库联接

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

log4j.appender.DATABASE.URL=jdbc:db2://127.0.0.1:50000/pbdb

log4j.appender.DATABASE.driver=com.ibm.db2.jcc.DB2Driver

log4j.appender.DATABASE.user=erpt1104

log4j.appender.DATABASE.password=erpt1104

log4j.appender.DATABASE.sql = INSERT INTO log (logDATE,logTIME,LOGThread,loglevel,logClass,logLogger,logMessage) values ('%d{yyyy-MM-dd}','%d{HH:mm:ss}','%t', '%p', '%c', '%l', '%m')

log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout log4j.appender.DATABASE.layout.ConversionPattern = %d{yyyy MM dd HH:mm:ss,SSS} %-5p %t %c %m


说明:

%d 输出日志时间点的日期或时间,默认格式为 ISO8601 ,也可以在其后指定格式,比如: %d{yyyy-MM-dd HH:mm:ss} ,输出类似: 2007-3-29 17:49:27 ,刚好适合插入 SQLServer ;

%t 产生该日志事件的线程名;

%p 日志的 log_level ,如 DEBUG 、 WARN 或者 INFO ;

%c 输出所属的类目,通常就是所在类的全名,如“ iNotes.Default ”;

%m 日志的内容;

%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。如 Test.main(Test.java:33) ;

%n 输出一个回车换行符, Windows 平台为“ \r\n ”, Unix 平台为“ \n ”

3.3. java 中调用
import sun.jdbc.odbc.*;

import java.sql.*;


import org.apache.log4j.Category;

import org.apache.log4j.Level;

import org.apache.log4j.Logger;

import org.apache.log4j.PropertyConfigurator;

import org.apache.log4j.jdbc.*;


static Logger logger = Logger.getLogger(Test.class.getName ());

PropertyConfigurator.configure ( "log.properties" ) ;

logger.info ( "test" );


运行项目,你就会看到执行了 sql 语句,数据库中便插入相关数据,如需对日志进行分析整理,这就不是 log4j 的事情了。


4.   最后说明:
Doc 文档可以从其网站上下载:

http://logging.apache.org/log4j/docs/api/index.html

http://logging.apache.org/log4j/docs/documentation.html






Log4j深入浅出Log4j 是Apache组织的一个开源项目,它是一个日志操作包,通过使用Log4j可以指定日志信息输出的目的地,如控制台,文件,GUI组件,NT的时间记录 器,还可以控制每一条日志输出的格式,此外通过定义日志的级别,能够非常细致的控制日志的输出,最好的地方是这些功能可以通过一个配置文件来灵活的进行配 置,而不需要修改程序代码.在应用程序中输出日志有三个目的:

1)     监视代码变量的变化情况,把详细信息记录到文件中,进行统计分析.

2)     跟踪代码运行轨迹,作为日后审计的依据.

3)     担当集成开发环境中的调试器的作用,向文件和控制器打印代码的调试信息.

学习Log4j最重要的是首先要了解两个常用的接口:Log和LogFactory.首先说一说Log接口.通用日志包把日志消息分为6个级别:

1)     fatal致命的

2)     error错误

3)     warn警告

4)     info信息

5)     debug调试

6)     trace细节

其中级别按照以上的顺序,org.apache.commons.logging.Log接口代表日志器,它提供

一组输出日志的方法. 例如fatal(Object message)参数都是一个对象,要注意的是只有当它输出日志的级别大于或者等于为日志配置的级别的时候,这个方法才会被执行.Log接口还提供了一组 判断是否允许输出特定级别日志信息的方法,很简单例如isFatalEnabled()在程序输出某种级别的日志消息之前,提倡先调用以上的方法来判断该 级别的日志是否允许输出,这有助于提高应用的性能.这种判断主要是为了提高性能,避免执行多余的操作.

以上阐述了重要的Log接口,下面简单说明一下LogFactory接口,这个接口也和Log接口一样在logging包中,接口提供了获得日志器实例的两个静态方法如下:

public static Log getLog(String name)throws LogConfigurationException;

public static Log getLog(Class class)throws LogConfigurationException;

第一个getLog()方法name参数作为日志器的名字,第二个getLog()方法以class参数指定的类的名字作为日志器的名字.

在强调可重用组件的今天,除了自己从头到尾开发一个可重用的日志操作类以外,还有一个Apache为我们提供的一个强有力的现成的日志操作包Log4j.主要由三大组件构成:

1)     Logger:负责生成日志,并能够对日志信息进行分类筛选.

2)     Appender:定义了日志信息输出的目的地,指定日志信息应该被输出到什么地方.

3)     Layout:指定日志信息的输出格式.

以上的三个组件协同工作, 使得开发者能够依据日志信息类别记录信息,并能够在程序运行期间,控制日志信息的输出格式以及日志的存放地点.Log4j的Appender组件决定日志 输出到什么地方,目前Log4j的Appender支持将日志信息输出到控制台Console,文件,GUI组件.一个Logger可以同时对应多个 Appender也就是说一个Logger的日志信息可以同时输出在多个目的地上.例如可以为rootLogger配置两个Appender,一个是 file一个是console可以这样写:log4j.rootLogger=warn.file.console然后可以用 appender.console或者是appender.file来指定具体的控制台或者文件.当以上的都设置好了以后还需要配置Layout组件,主 要是解决日志的输出格式,它的类型有:HTMLLayout(html格式),PattemLayout(可以灵活的指定布局模式), SimpleLayout(包含日志信息级别和信息的字符串)TTCCLayout(包含日志生产时间,线程和类别等信息).通过如上的研究已经可以配置 Log4j了,然后就可以通过Log4j的API来操作日志了.如果要在Web应用中使用Log4j,需要创建一个配置文件配置Log4j的环境,然后就 可以在其他的Web组件中获取Logger对象并输出日志.下面展示一个局部的Log4j,这里只是举例Log4j的配置文件和在具体的Action中进 行调用,如下:

1)     将Log4j的jar文件copy到WEB-INF的lib目录下.

2)     创建Log4j的配置文件log4j.properties存放在classes目录下.

Log4j.rootLogger=INFO,console,file

Log4j.appender.console=org.apache.log4j.ConsoleAppender

Log4j.appender.file=org.apache.log4j.RollingFileAppender

Log4j.appender.file=e:/log/log.txt

Log4j.appender.console.layout=org.apache.log4j.PattemLayout

Log4j.appender.console.layout.ConversionPattrm=%t%p-%m%n

Log4j.appender.file.layout=rog.appache.log4j.HTMLLayout

Log4j.appender.file.layout.ConversionPattem=%t%p-%m%n

配置文件配置好了, 在Action里调用我就不用详细写了,很简单,就是引入logging的包,然后在execute()方法中通过Log log=LogFactory.getLog(“name”);获取具体的Log对象,在通过log.fatal(“信息”);类似的方法操作日志,还可 以通过isDebugEnbled()等方法判断日志的输出.

    回 顾一下Log4j主要三个组件构成:Logger,Appender,Layout,Logger控制日志信息的输出,Appender决定输出的目的 地,Layout决定日志输出的格式.Log4j允许客户在配置文件文件中灵活的配置这些组件,然后读取配置文件中并配置Log4j环境,然后就可以在程 序中任何要输出日志的地方调用适当的方法,这样对于日后程序的调试有着重大的作用.





1.layout属性

Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数见表1如下:
%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 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)

2.级别

Log4J中的一个核心概念是日志级别是有序的。Log4J内置了5种日志级别为:

DEBUG < INFO < WARN < ERROR < FATAL

右边的级别比左边的高。每一个Logger实例都有一个日志级别,上面的5种输出方法就是对应于5种不同级别的日志请求。比如,如果c是一个Logger 实例,c.info("some information")就是一个INFO级别的日志请求。一个日志请求会不会输出,取决于该Logger实例的日志级别和该日志请求级别的比较。规则 如下:
假如在一个级别为p的Logger实例中发生一个级别为q的日志请求,则当q >= p时请求才会启用。
分享到:
评论

相关推荐

    log4j讲解源代码

    `log4j讲解`文件可能包含了一个示例项目,该项目演示了如何配置和使用Log4j。通过运行这个示例,你可以直观地看到Log4j在实际应用中的效果,加深对Log4j的理解。 总结来说,Log4j是一个强大且灵活的日志框架,它...

    Log4j详解,详细讲解log4j的使用,和原理

    Log4j 详解 Log4j 是一款功能强大的日志记录工具,广泛应用于 Java 应用程序中。它可以帮助开发人员调试和分析程序,记录程序的运行情况,并提供了灵活的配置方式来控制日志的输出。 Log4j 的概念 Log4j 中有三个...

    log4j.properties(完整版) log4j.properties(精简版)

    本文将围绕Log4j的核心配置文件`log4j.properties`进行详细讲解,分为完整版和精简版两个部分。 **1. Log4j基础概念** Log4j由三个主要组件构成:Logger(日志器)、Appender(输出器)和Layout(布局)。Logger...

    java Log4j 事例和讲解

    Log4j是Java编程语言中广泛使用的日志记录框架,由Apache软件基金会开发。它提供了一种灵活且高效的方式来管理和记录应用程序的运行时信息,包括错误、警告、调试...希望这个例子和讲解能帮助你更好地理解和运用Log4j。

    log4j日志详细讲解

    以下是对Log4j日志的详细讲解: 首先,要在项目中启用Log4j,需要创建一个名为`log4j.properties`的配置文件,将其放在`classes`目录下。这个文件用于定义Log4j的行为,包括日志的级别、输出目的地、格式等。 1. *...

    LOG4J 配置方式和讲解

    ### LOG4J配置详解 #### 一、LOG4J简介 Log4j是Apache的一个开源项目,通过使用Log4j,我们可以在Java应用程序中控制日志打印的方式、格式以及输出的目的地。它允许开发者根据级别记录日志信息,使用户能够更加...

    示范如何在android工程中使用log4j记录日志

    本文将详细讲解如何在Android项目中集成和使用Log4j。 首先,我们需要理解Log4j的基本概念。Log4j主要包括三个核心组件:Logger(日志器)、Appender(输出器)和Layout(布局)。Logger是日志记录的起点,Appender...

    log4j与web.xml的配置

    本文将详细讲解如何将Log4j整合到Web应用并通过web.xml进行配置,以实现日志信息的输出和管理。 1. **Log4j介绍** - Log4j由Apache软件基金会开发,提供了一种简单但功能强大的日志记录API,可以控制日志信息的...

    Spring项目中怎么配置log4j

    接下来,我们将详细讲解如何在Spring项目中配置log4j。 首先,我们需要在项目的类路径下创建一个名为`log4j.properties`或`log4j.xml`的配置文件。这里以`log4j.properties`为例,介绍其基本结构和配置选项: 1. *...

    如何使用Log4j如何使用Log4j

    这里我们以Log4j 1.2.8为例进行讲解。 1. **下载**:首先需要下载log4j-1.2.8.jar包,并将其放入项目的lib目录下。 2. **环境配置**:为了让项目能够识别到Log4j,在项目的`CLASSPATH`中加入log4j.properties文件...

    log4j案例代码

    本篇将基于“log4j案例代码”进行深入讲解。 **1. Log4j简介** Log4j是一个用于记录应用日志的灵活框架,它提供了多种级别的日志记录,如DEBUG、INFO、WARN、ERROR和FATAL,以及自定义级别。Log4j的灵活性体现在它...

    详细讲解Java中log4j的使用方法

    ### Java中log4j的使用方法详解 #### 一、log4j简介 Log4j是Apache的一个开源项目,用于实现日志记录功能。它提供了一种高度灵活的日志记录框架,可以方便地控制日志的输出级别、格式以及目标(如控制台、文件等)...

    c3p0&log4j配置文件及说明

    在Java开发中,c3p0和log4j是两个非常关键的库,它们分别用于数据库连接池管理和日志记录。下面将详细讲解这两个库的配置及其重要性。 首先,c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,可以极大地...

    log4j配置过程及配置讲解

    在强调可重用组件开发的今天,除了自己从头到尾开发一个可重用的日志操作类外,Apache为我们提供了一个强有力的日志操作包-Log4j。  官方站点:http://logging.apache.org/log4j/  此外,通过Log4j其他语言接口...

    log4j与spring的详细配置。

    本文将详细讲解Log4j的配置以及如何在Spring项目中使用Log4j。 **一、Log4j基础知识** 1. **Log4j组件**:Log4j主要由三个核心组件构成——Logger(日志器)、Appender(输出器)和Layout(布局器)。 - Logger:...

    log4j配置 输出日志 案例

    本文将深入讲解如何配置log4j以实现日志输出到控制台和文件,并提供相关代码实例和案例分析。** ### 一、Log4j简介 Log4j是Apache组织开发的一个开源项目,用于生成日志信息。它提供了灵活的配置方式,支持多种输出...

    Log4j使用实例

    ### Log4j 使用实例详解 #### 一、Log4j简介 Log4j 是一个开源的日志记录框架,由 Apache 软件基金会提供。它允许开发者根据需求配置日志等级,并灵活选择日志信息的输出方式。Log4j 的核心组件包括 Logger、...

Global site tag (gtag.js) - Google Analytics