`

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的原理讲解,jar包,以及实例,帮助初学者迅速上手,。。。

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

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

    log4j中配置日志文件相对路径方法分析

    log4j中配置日志文件相对路径方法分析 方法一、 解决的办法自然是用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如:log4j.appender.logfile.File=${WORKDIR}/logs/app.log 其中“${...

    log4j使用笔记

    1.该笔记中详细的介绍了log4j的作用和优势、具体地讲解了log4j的使用步骤和详细配置。 2.深入的说明了log4j在项目中的重要地位以及给项目带来的影响,同时说明了log4j的优化。 3.该笔记从log4j的简介/入门开始介绍,到...

    java Log4j 事例和讲解

    java Log4j 事例和讲解 基本功能全讲解 与文档配合使用更有效果哦!

    log4j配置过程及配置讲解

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

    LOG4J 配置方式和讲解

    LOG4J 配置方式和讲解 一看就懂,log4j你就会用了,下吧!

    log4j 参考文档 示例代码 学习案例

    log4j,log4j,log4j,log4j,log4j,log4j,log4j,log4j,log4j,log4j,log4j,log4j,log4j,log4j,log4j,log4j,log4j,log4j,log4j,log4j,log4j,log4j,log4j,log4j,log4j,log4j,log4j,log4j,log4j,此文档包含了对Log4j的详细...

    log4j日志详细讲解

    log4j日志。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    log4j技术详解

    本文件详细讲解了log4j的配置文件的使用和怎样搭建log4j,适合初学者查看,如果错误请多多保函。

    Log4J基础详解及示例大全

    Log4J理论及各种输出方式说明。Log4j主要由三大组件说明。Log4j的控制台输出方式、邮件输出方式、数据库输出方式、文件输出方式。

    Strtus2.3升级2.5(包含log4j升级log4j2)所需jar,和相关资料

    Strtus2.3升级2.5(包含log4j升级log4j2)所需jar,和相关资料,可联系作者详细讲解升级过程,log4j2升级之后日志分级分片等。联系方式wx:XPL15753032590

    Log4j的讲解

    log4j 的讲解 [代码中使用] public class TestLog4j { public static void main(String[] args) { PropertyConfigurator.configure( " D:/Code/conf/log4j.properties " ); Logger logger = Logger.getLogger...

    既简单又实用的log4j知识(.doc)

    既简单又实用的log4j知识, 第一部分讲解如何配置log4j;  第二部分为对log4j.properties配置文件中的各个属性的讲解;  第三部分为对log4j的详细讲解。

    Log4j入门学习笔记

    pptx格式。Log4j详细讲解。Logger--日志写出器,供程序员输出日志信息 。Log4j 允许开发人员定义多个Logger,每个Logger拥有自己的名字,Logger之间通过名字来表明隶属关系。

    SpringBoot2.X整合Mybatis代码示例2-使用配置文件方式+Log4j

    在项目开发过程中,日志是必不可少的,此文将讲解SpringBoot2.x中log4j的整合。

    Log4j.properties详细说明

    详细的讲解了Log4j的详细配置,不错!

    Log4j视频教程2019(百度云)

    本视频教程总共讲解了Log4j的简介,Log4j的日志级别,如何输出控制文件(打印日志),使用Log4j的常见事项等等内容

    jjava日志文件log4j

    Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、... 第二部分为对log4j.properties配置文件中的各个属性的讲解;  第三部分为对log4j的详细讲解。

Global site tag (gtag.js) - Google Analytics