2024年2月21日发(作者:)

ties配置文件配置项的说明

在程序中,可以以以下方式来使用

Log log = ();

("debug message -------------------");

("info message ******************");

("warn message +++++++++++++++");

("error msg=================");

本文主要讲的是如何配置log4j,先让我们先看看一个典型的log4j配置:

==========ties==================

=eAppender

=nLayout

sionPattern=%d{MM-dd HH:mm:} %-5p [%F:%L]%x %m%n

t=gFileAppender

=D:/workspace/log4jtest/log/

eSize=10000KB

kupIndex=10

=nLayout

sionPattern=%d{MM-dd HH:mm:}[%24F:%-3L:%-5p]%x %m%n

tegory=INFO, stdout, fileout

2=DEBUG,stdout

===================================

这个文件可以划为三小块

===========第一块定义了一个名为 stdout 的appender和layout (appender,layout的概念后面再解释,目前先记着有这样两个名词):

=eAppender

定义stdout的实际输出实现类,从这个appender实现类名可以猜到,这个类是负责控制台输出的。

=nLayout

定义stdout的输出装饰器

sionPattern=%d{MM-dd HH:mm:} %-5p [%F:%L]%x %m%n

装饰器参数配置

============第二块定义了一个名为 fileout 的appender和layout:

t=gFileAppender

同理可猜这个实现类是输出到文件的

=D:/workspace/log4jtest/log/

eSize=10000KB

kupIndex=10

=nLayout

sionPattern=%d{MM-dd HH:mm:}[%24F:%-3L:%-5p]%x %m%n

============第三块定义了名字分别为rootCategory,2的两个logger

tegory=INFO, stdout, fileout

2=DEBUG,stdout

rootCategory logger是缺省的logger,记录所有的包的信息输出。

第二个logger是只输出指定包2下的日志信息。

那么INFO,DEBUG又是什么意思呢,他们是信息的分级标识,通过继承实现这个实现自定义级别的分级。

第三块配置两句的意思是这样的:

rootCategory 把所有类的INFO级别以上的信息输出到stdout和fileout两个appender中,

2,把2包中的所有类(包括子包)DEBUG级别(含)以上的信息输出到stdout 中

一个logger可以输出到很多个设备中(appender),如果需要增加输出设备则用分号分隔开appender名称即可。

输出信息的分类级别是DEBUG > INFO > WARN > ERROR,信息细节由细到粗,指定输出某一级别的信息时,

过细的信息输出将会被忽略

如果一个配置中有多个logger,他们之间会有什么关系呢?答案是,在输出上,他们没有任何关系,都是独立运作的,

不相关的,但是在配置上,父包的配置会传给子包,如果子包没有另外定义配置的话。

例如上面配置文件中的两个logger:

uare

2

这里认为 2 继承自 uare,他们的配置声明如下:

tegory=INFO, stdout, fileout

2=,stdout

注意第二句没有指定输出级别,那么根据配置继承规则会继承父logger的配置,在这里就是INFO。

同时需要强调的是,如果两个logger有继承关系,且输出到同一个appender,根据输出独立原则,那么将会出现两行一样的信息,

例如上面的两个logger定义会导致这样的情况。

最后以一幅图来概括:

ties配置详解

在学习spring mvc的同时也对其日志引起了兴趣,由于准备要把log4j更换成logback 其两框架都是同一个作者开发,所以先把log4j做一个详细的了解,以下内容从Google上搜到出来的,关于ties的详细配置

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

1. 配置文件

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

#配置根Logger

gger = [ level ] , appenderName1 , appenderName2 , …

#配置日志信息输出目的地Appender

erName =

1 = value1

N = valueN

#配置日志信息的格式(布局)

=

1 = value1

N = valueN

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

FATAL 0

ERROR 3

WARN 4

INFO 6

DEBUG 7

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

eAppender(控制台),

pender(文件),

ollingFileAppender(每天产生一个日志文件),

gFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),

Appender(将日志信息以流格式发送到任意指定的地方)

Layout:日志输出格式,Log4j提供的layout有以下几种:

yout(以HTML表格形式布局),

nLayout(可以灵活地指定布局模式),

Layout(包含日志信息的级别和信息字符串),

yout(包含日志产生的时间、线程、类别等等信息)

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

%m 输出代码中指定的消息

%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL

%r 输出自应用启动到输出该log信息耗费的毫秒数

%c 输出所属的类目,通常就是所在类的全名

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

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

%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日 22 : 10 : 28 ,

921

%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:(: 10 )

2. 在代码中初始化Logger:

1)在程序中调用ure()方法:给根记录器增加一个ConsoleAppender,输出格式通过PatternLayout设为"%-4r [%t] %-5p %c %x - %m%n",还有根记录器的默认级别是.

2)配置放在文件里,通过命令行参数传递文件名字,通过ure(args[x])解析并配置;

3)配置放在文件里,通过环境变量传递文件名等信息,利用log4j默认的初始化过程解析并配置;

4)配置放在文件里,通过应用服务器配置传递文件名等信息,利用一个特殊的servlet来完成配置。

3. 为不同的 Appender 设置日志输出级别:

当调试系统时,我们往往注意的只是异常级别的日志输出,但是通常所有级别的输出都是放在一个文件里的,如果日志输出的级别是BUG!?那就慢慢去找吧。

这时我们也许会想要是能把异常信息单独输出到一个文件里该多好啊。当然可以,Log4j已经提供了这样的功能,我们只需要在配置中修改Appender的Threshold 就能实现,比如下面的例子:

[配置文件]

### set log levels ###

gger = debug , stdout , D , E

### 输出到控制台 ###

= eAppender

=

= nLayout

sionPattern = %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n

### 输出到日志文件 ###

er.D = ollingFileAppender

= logs/

= true

old = DEBUG ## 输出DEBUG级别以上的日志

= nLayout

sionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] -

[ %p ] %m%n

### 保存异常信息到单独文件 ###

er.D = ollingFileAppender

= logs/ ## 异常日志文件名

= true

old = ERROR ## 只输出ERROR级别以上的日志!!!

= nLayout

sionPattern = %-d{yyyy-MM-dd HH:mm:ss}

[ %p ] %m%n

[代码中使用]

public class TestLog4j {

public static void main(String[] args) {

ure( " D:/Code/conf/ties " );

Logger logger = ger(TestLog4j. class );

( " debug " );

( " error " );

}

}

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

ties 使用

一.参数意义说明

输出级别的种类

ERROR、WARN、INFO、DEBUG

ERROR 为严重错误 主要是程序的错误

WARN 为一般警告,比如session丢失

INFO 为一般要显示的信息,比如登录登出

DEBUG 为程序的调试信息

配置日志信息输出目的地

erName =

eAppender(控制台)

[ %t:%r ] -

pender(文件)

ollingFileAppender(每天产生一个日志文件)

gFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)

Appender(将日志信息以流格式发送到任意指定的地方)

配置日志信息的格式

=

yout(以HTML表格形式布局),

nLayout(可以灵活地指定布局模式),

Layout(包含日志信息的级别和信息字符串),

yout(包含日志产生的时间、线程、类别等等信息)

控制台选项

Threshold=DEBUG:指定日志消息的输出最低层次。

ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。

Target=:默认情况下是:,指定输出控制台

FileAppender 选项

Threshold=DEBUF:指定日志消息的输出最低层次。

ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。

File=:指定消息输出到文件。

Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。

RollingFileAppender 选项

Threshold=DEBUG:指定日志消息的输出最低层次。

ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。

File=:指定消息输出到文件。

Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。

MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到.1文件。

MaxBackupIndex=2:指定可以产生的滚动文件的最大数。

sionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n

日志信息格式中几个符号所代表的含义:

-X号: X信息输出时左对齐;

%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,

%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921

%r: 输出自应用启动到输出该log信息耗费的毫秒数

%c: 输出日志信息所属的类目,通常就是所在类的全名

%t: 输出产生该日志事件的线程名

%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例: (:10)

%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。

%%: 输出一个"%"字符

%F: 输出日志消息产生时所在的文件名称

%L: 输出代码中的行号

%m: 输出代码中指定的消息,产生的日志具体信息

%n: 输出一个回车换行符,Windows平台为"rn",Unix平台为"n"输出日志信息换行

可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:

1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。

2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。

3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。

4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉。

二.文件配置Sample1

gger=DEBUG,A1,R

#gger=INFO,A1,R

# ConsoleAppender 输出

er.A1=eAppender

=nLayout

sionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n

# File 输出 一天一个文件,输出路径可以定制,一般在根路径下

er.R=ollingFileAppender

=blog_

eSize=500KB

kupIndex=10

=nLayout

sionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p]

- %m%n

文件配置Sample2

下面给出的Log4J配置文件实现了输出到控制台,文件,回滚文件,发送日志邮件,输出到数据库日志表,自定义标签等全套功能。

gger=DEBUG,CONSOLE,A1,im

#DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE

=true

###################

# Console Appender

###################

E=eAppender

old=DEBUG

=

=nLayout

sionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x

- %m%n

#sionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n

#####################

# File Appender

#####################

=pender

=

=false

=nLayout

sionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x

- %m%n

# Use this layout for LogFactor 5 analysis

########################

# Rolling File

########################

G_FILE=gFileAppender

G_old=ERROR

G_=

G_=true

G_eSize=10KB

G_kupIndex=1

G_=nLayout

G_sionPattern=[framework]

[%t] %-5p %c %x - %m%n

####################

# Socket Appender

####################

=gFileAppender

Host=localhost

=5001

onInfo=true

# Set up for Log Facter 5

=nLayout

sionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n

########################

# Log Factor 5 Appender

########################

5_APPENDER=5Appender

5_berOfRecords=2000

########################

# SMTP Appender

#######################

=pender

old=FATAL

Size=10

%d - %c -%-4r

=chenyl@

st=

t=Log4J Message

=chenyl@

=nLayout

sionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x

- %m%n

########################

# JDBC Appender

#######################

SE=pender

=jdbc:mysql://localhost:3306/test

=

=root

rd=

=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r

[%t] %-5p %c %x - %m%n')

=nLayout

sionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x

- %m%n

er.A1=ollingFileAppender

=4j

ttern=yyyyMMdd-HH'.log4j'

=out

###################

#自定义Appender

###################

= nder

=

me = username

rd = password

ent = corlin@

=nLayout

sionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x

- %m%n

三.高级使用

实验目的:

1.把FATAL级错误写入2000NT日志

2. WARN,ERROR,FATAL级错误发送email通知管理员

3.其他级别的错误直接在后台输出

实验步骤:

输出到2000NT日志

1.把Log4j压缩包里的拷到WINNTSYSTEM32目录下

2.写配置文件ties

# 在2000系统日志输出

=FATAL, A8

# APPENDER A8

er.A8=tLogAppender

=JavaTest

=nLayout

sionPattern=%-4r %-5p [%t] %37c %3x - %m%n

3.调用代码:

Logger logger2 = ger("NTlog"); //要和配置文件中设置的名字相同

("debug!!!");

("info!!!");

("warn!!!");

("error!!!");

//只有这个错误才会写入2000日志

("fatal!!!");

发送email通知管理员:

1. 首先下载JavaMail和JAF,

/j2ee/ja/javamail/

/beans/glasgow/

在项目中引用和。

2. 写配置文件

# 将日志发送到email

g=WARN,A5

# APPENDER A5

er.A5=pender

Size=5

=chunjie@

=error@

t=ErrorLog

st=

=nLayout

sionPattern=%-4r %-5p [%t] %37c %3x - %m%n

3.调用代码:

//把日志发送到mail

Logger logger3 = ger("MailLog");

("warn!!!");

("error!!!");

("fatal!!!");

在后台输出所有类别的错误:

1. 写配置文件

# 在后台输出

e=DEBUG, A1

# APPENDER A1

er.A1=eAppender

=nLayout

sionPattern=%-4r %-5p [%t] %37c %3x - %m%n

2.调用代码

Logger logger1 = ger("console");

("debug!!!");

("info!!!");

("warn!!!");

("error!!!");

("fatal!!!");

--------------------------------------------------------------------

全部配置文件:ties

# 在后台输出

e=DEBUG, A1

# APPENDER A1

er.A1=eAppender

=nLayout

sionPattern=%-4r %-5p [%t] %37c %3x - %m%n

# 在2000系统日志输出

=FATAL, A8

# APPENDER A8

er.A8=tLogAppender

=JavaTest

=nLayout

sionPattern=%-4r %-5p [%t] %37c %3x - %m%n

# 将日志发送到email

g=WARN,A5

# APPENDER A5

er.A5=pender

Size=5

=chunjie@

=error@

t=ErrorLog

st=

=nLayout

sionPattern=%-4r %-5p [%t] %37c %3x - %m%n

全部代码:

/*

* 创建日期 2003-11-13

*/

package ;

import 4j.*;

//import .*;

//import .*;

/**

* @author yanxu

*/

public class Log4jTest

{

public static void main(String args[])

{

ure("ties");

//在后台输出

Logger logger1 = ger("console");

("debug!!!");

("info!!!");

("warn!!!");

("error!!!");

("fatal!!!");

//在NT系统日志输出

Logger logger2 = ger("NTlog");

//NTEventLogAppender nla = new NTEventLogAppender();

("debug!!!");

("info!!!");

("warn!!!");

("error!!!");

//只有这个错误才会写入2000日志

("fatal!!!");

//把日志发送到mail

Logger logger3 = ger("MailLog");

//SMTPAppender sa = new SMTPAppender();

("warn!!!");

("error!!!");

("fatal!!!");

}

}