Log4j配置(转)

原文:http://www.blogjava.net/zJun/archive/2006/06/28/55511.html

Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。

1. 配置文件
Log4J配置文件的基本格式如下:

#配置根Logger
log4j.rootLogger 
=
 
[
level
]
 
,
 appenderName1
,
 appenderName2
,



#配置日志信息输出目的地Appender
log4j.appender.appenderName 
=

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

value1 
  … 
  log4j.appender.appenderName.optionN 
=

valueN 

#配置日志信息的格式(布局)
log4j.appender.appenderName.layout 
=

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

value1 
  … 
  log4j.appender.appenderName.layout.optionN 
=
 valueN

其中 [level] 是日志输出级别,共有5级:


FATAL     
0

ERROR     
3

WARN      
4

INFO      
6

DEBUG     
7

Appender

为日志输出目的地,Log4j提供的appender有以下几种:

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

打印参数: Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,如下:

  %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. 在代码中初始化Logger:

1)在程序中调用BasicConfigurator.configure()方法:给根记录器增加一个ConsoleAppender,输出格式通过PatternLayout设为"%-4r [%t] %-5p %c %x - %m%n",还有根记录器的默认级别是Level.DEBUG.
2)配置放在文件里,通过命令行参数传递文件名字,通过PropertyConfigurator.configure(args[x])解析并配置;
3)配置放在文件里,通过环境变量传递文件名等信息,利用log4j默认的初始化过程解析并配置;
4)配置放在文件里,通过应用服务器配置传递文件名等信息,利用一个特殊的servlet来完成配置。

3. 为不同的 Appender 设置日志输出级别:
当调试系统时,我们往往注意的只是异常级别的日志输出,但是通常所有级别的输出都是放在一个文件里的,如果日志输出的级别是BUG!?那就慢慢去找吧。
这时我们也许会想要是能把异常信息单独输出到一个文件里该多好啊。当然可以,Log4j已经提供了这样的功能,我们只需要在配置中修改AppenderThreshold

就能实现,比如下面的例子:

[配置文件]

log4j.rootLogger
=
debug
,
 stdout
,
 D
,

E

### 输出到控制台 ###
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} %5p %c{
1

}:%L - %m%n

### 输出到日志文件 ###
log4j.appender.D
=

org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File
=

logs/log.log
log4j.appender.D.Append
=

true
log4j.appender.D.Threshold
=

DEBUG ## 输出DEBUG级别以上的日志
log4j.appender.D.layout
=

org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern
=
%-d{yyyy-MM-dd HH:mm:ss} 
[
%t:%r
]
-
[
%p
]

%m%n

### 保存异常信息到单独文件 ###
log4j.appender.D
=

org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File
=

logs/error.log ## 异常日志文件名
log4j.appender.D.Append
=

true
log4j.appender.D.Threshold
=

ERROR ## 只输出ERROR级别以上的日志!!!
log4j.appender.D.layout
=

org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern
=
%-d{yyyy-MM-dd HH:mm:ss} 
[
%t:%r
]
-
[
%p
]
 %m%n

[代码中使用]

public
 
class
 TestLog4j

{
    
public
 
static
 
void
 main(String[] args)

{
        PropertyConfigurator.configure(
"
D:/Code/conf/log4j.properties
"

);
        Logger logger 
=
 Logger.getLogger(TestLog4j.
class

);
        logger.debug(
"
debug
"

);
        logger.error(
"
error
"

);
    }

}

运行一下,看看异常信息是不是保存在了一个单独的文件error.log中。

注:

关于spring的log4j配置:

####### spring framework #########
log4j.logger.org.springframework=INFO
log4j.logger.org.springframework.security=INFO
log4j.logger.org.springframework.transaction=INFO
log4j.logger.org.springframework.jms=INFO
log4j.logger.org.springframework.web.client.RestTemplate=INFO
log4j.logger.org.springframework.amqp=INFO

log4j.logger.javax.transaction=INFO
时间: 2024-11-03 22:52:50

Log4j配置(转)的相关文章

log4j配置后行号乱码显示为?问号

debug="true"  classpathref="accrual.path" > 首发于 http://blog.xfuse.cn 参考文档 http://ant.apache.org/manual/CoreTasks/javac.html Log4j配置 log4j.appender.C1.layout.ConversionPattern=%F(%L)-- %-4r %-5p [%t] %37c %3x - %m%n 如果是用JAVAC编绎,那么直接加

log4 log4j配置

  log4j配置 Log4j支持两种配置文件格式,一种是XML格式的文件,一种是properties格式的文件. 1.log4j.properties配置方法: 步骤: 0.下载log4j的jar包: 1.新建java项目: 2.新建包: 3.新建类: 4.在src下新建log4J.properites文本文件[日志配置文件] 5.新建lib文件夹:[存放第三方jar包] 6.新建bin文件夹:[存放生成的.class文件] 如下图: package com.loveryw; import o

项目重构之数据源配置与优化:log4j 配置数据库连接池Druid,并实现日志存储到数据库

作者:泥沙砖瓦浆木匠 个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节. 如果我的帮到了你,是否乐意捐助一下或请一杯啤酒也好呢?有你支持,干的更好~ 点这参与众筹 我的支付宝:13958686678 一. 前言 泥瓦匠又和大家见面了,最近两天我在Code Review ,顺便代码小小的Refactoring(重构)下.先了解这个项目吧,这次解决的是数据源配置优化.因为这web项目中配置数据源的地方很多.例如JDBC要配置数据源,Mybatis要配置数据源,Quartz定时任务要配

log4j配置中遇到的问题

log4j配置后启动的时候报java.lang.NoClassDefFoundError: Could not initialize class org.apache.log4j.LogManager的原因是,在不缺少jar的包的情况下,错误就发生在log4j.properties中,我的错误就是因为log4j.appender.FILE.DatePattern=yyyy-MM-dd -HH.log,日志根据日期格式生成,如果后面需要加别的内容,必须将其后的内容放在引号中,所以应该改成log4j

springmvc log4j配置

添加依赖 1 <properties> 2 <spring.version>4.1.0.RELEASE</spring.version> 3 <slf4j.version>1.7.13</slf4j.version> 4 </properties> 5 <!-- log4j --> 6 <dependency> 7 <groupId>org.springframework</groupId&g

Log4j配置为何失效

昨天上线折腾了半天,发现日志始终不能正确打印到指定文件,反而Tomcat的catalina.out打印了业务日志,仔细检查线上log4j配置,未发现任何问题,console日志输入并没有打开.于是迅速使用上次上线包进行替换重新发布,发现问题解决. 考虑到本次上线新依赖了其他系统的jar包,检查该jar后发现,jar包中包含了Log4j.xml!! log4j为何选择了jar中的log4j.xml而不是自己的log4j.properties文件呢,原因就在log4j的LogManager类中 看段

#2014/7/24#常用log4j配置

常用log4j配置,一般可以采用两种方式,.properties和.xml,下面举两个简单的例子: 一.log4j.properties ### 设置org.zblog域对应的级别INFO,DEBUG,WARN,ERROR和输出地A1,A2 ## log4j.category.org.zblog=ERROR,A1 log4j.category.org.zblog=INFO,A2 log4j.appender.A1=org.apache.log4j.ConsoleAppender ### 设置输出

slf4j和log4j配置

在选用 slf4j-api-1.7.7.jar + slf4j-log4j12-1.7.7.jar + log4j-1.2.17.jar 时输出(前提是有相应的配置文件log4j.properties,放在根目录,一般是src文件夹下)到文件logs.log和errors.log 1 基本格式如下: #配置根Logger log4j.rootLogger = [ level ] , appenderName1 , appenderName2 , - #配置日志信息输出目的地Appender lo

log4j配置相对路径实现日志记录

从网上简单搜索了一下,发现有三种介绍的方法.总结在这里1. 解决的办法自然是想办法用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如: log4j.appender.logfile.File=${WORKDIR}/logs/app.log 其中“${WORKDIR}/”是个变量,会被System Property中的“WORKDIR”的值代替.这样,我们就可以在log4j加载配置文件之前,先用System.setProperty设置好根路径. 在 没有发现这个