Logger4j详解

Logger4j详解

2023年7月26日发(作者:)

Logger4j详解⼀、介绍

Log4j是Apache的⼀个开源项⽬,通过使⽤Log4j,我们可以控制⽇志信息输送的⽬的地是控制台、⽂件、GUI组件、甚⾄是套接⼝服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每⼀条⽇志的输出格式;通过定义每⼀条⽇志信息的级别,我们能够更加细致地控制⽇志的⽣成过程。Log4j由三个重要的组件构成:⽇志信息的优先级(Loggers),⽇志信息的输出⽬的地(Appenders),⽇志信息的输出格式(Layouts)。⽇志信息的优先级从⾼到低有ERROR、WARN、 INFO、DEBUG,分别⽤来指定这条⽇志信息的重要程度;⽇志信息的输出⽬的地指定了⽇志将打印到控制台还是⽂件中;⽽输出格式则控制了⽇志信息的显⽰内容。⼆、配置⽂件

其实您也可以完全不使⽤配置⽂件,⽽是在代码中配置Log4j环境。但是,使⽤配置⽂件将使您的应⽤程序更加灵活。

Log4j⽀持两种配置⽂件格式,⼀种是XML格式的⽂件,⼀种是properties格式的⽂件。下⾯我们介绍使⽤properties格式做为配置⽂件的⽅法:

⽰例:

gger=INFO, A1

er.A1=eAppender

=nLayout

sionPattern=%-4r %-5p [%t] %37c %3x - %m%n1. 配置根Logger,其语法为:

gger = [ level ] , appenderName, appenderName, …

其中,level 是⽇志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使⽤四个级别,优先级从⾼到低分别是ERROR、WARN、INFO、DEBUG。通过在这⾥定义的级别,您可以控制到应⽤程序中相应级别的⽇志信息的开关。⽐如在这⾥定义了INFO级别,则应⽤程序中所有DEBUG级别的⽇志信息将不被打印出来。appenderName就是指定⽇志信息输出到哪个地⽅。您可以同时指定多个输出⽬的地。2. 配置⽇志信息输出⽬的地Appender,其语法为:

erName = package+appender_class_1 = value1

= valueN

其中,Log4j提供的appender有以下⼏种:

eAppender(控制台),

pender(⽂件),

ollingFileAppender(每天产⽣⼀个⽇志⽂件),

gFileAppender(⽂件⼤⼩到达指定尺⼨的时候产⽣⼀个新的⽂件),

Appender(将⽇志信息以流格式发送到任意指定的地⽅)pender(将⽇志写⼊数据库)(1).ConsoleAppender选项

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

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

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

(2).FileAppender 选项

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

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

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

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

(3).DailyRollingFileAppender 选项

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

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

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

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

DatePattern=’.'yyyy-ww:每周滚动⼀次⽂件,即每周产⽣⼀个新的⽂件。当然也可以指定按⽉、周、天、时和分。即对应的格式如下:

1)’.'yyyy-MM: 每⽉

2)’.'yyyy-ww: 每周

3)’.'yyyy-MM-dd: 每天

4)’.'yyyy-MM-dd-a: 每天两次

5)’.'yyyy-MM-dd-HH: 每⼩时

6)’.'yyyy-MM-dd-HH-mm: 每分钟

(4).RollingFileAppender 选项

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

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

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

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

MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在⽇志⽂件到达该⼤⼩时,将会⾃动滚动,即将原来的内容移到.1⽂件。MaxBackupIndex=2:指定可以产⽣的滚动⽂件的最⼤数。(5). JDBCApperder选项URL=jdbc:mysql://localhost:3306/test:指定⽇志写⼊的数据库链接driver=:指定数据库驱动user=root:指定数据库的⽤户名password=123:指定数据库的登录密码sql=insert into tb_log (message) values('=[%-5p] %d(%r) --> [%t] %l: %m %x %n'):指定写⼊数据库的执⾏语句3. 配置⽇志信息的布局,其语法为:

= package+layout_class_name

1 = value1

= valueN

其中,Log4j提供的layout有以下⼏种:

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

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

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

yout(包含⽇志产⽣的时间、线程、类别等等信息)4、输出格式设置

在配置⽂件中可以通过sionPattern设置⽇志输出格式。

参数:

%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字符,就从左边交远销出的字符截掉。三、如何在不同的模块中输出不同的⽇志⽤户基础信息模块路径为:它下⾯有个类:foprivate Log log = ();⽅法1:在ties中加⼊:=info,userLog,g==../logs/=old==sionPattern==%d %p [%c] - %m%n注:也就是让模块下所有的logger使⽤g所做的配置。⽅法2:

⾃定义“别名”private Log log = ("userInfoLog");然后在ties中加⼊:foLog=info,userLog,g==../logs/=old==sionPattern==%d %p [%c] - %m%n注:也就是在⽤logger时给它⼀个⾃定义的名字(如这⾥的"userInfoLog"),然后在ties中做出相应配置即可。,在这种模式下,即使在同⼀个类中也能定义多个不同输出的log.在类中调⽤代码如下:private Log loggerError = ("userErrorLog");private Log loggerInfo = ("userInfoLog");⾃定义的⽇志默认是同时输出到gger所配置的⽇志中的,如何能只让它们输出到⾃⼰指定的⽇志中呢?foLog = false它⽤来设置是否同时输出到gger所配置的⽇志中,设为false就不会输出到其它地⽅啦!注意这⾥的"userInfoLog"是你在程序中给logger起的那个⾃定义的名字!如果你说,我只是不想同时输出这个⽇志到gger所配置的logfile中,stdout⾥我还想同时输出呢!如:foLog=DEBUG, userLog, stdout 三、加载ties⽂件1、spring⽅式加载,配置与中:Spring加载ties,它提供了⼀个Log4jConfigListener,本⾝就能通过配置从指定位置加载log4j配置⽂件和log4j的输出路径,要注意的是Log4jConfigListener必须要在Spring的Listener之前。log4jConfigLocationWEB-INF/classes/tieslog4jRefreshInterval100004jConfigListener2、可以通过资源类对资源⽂件进⾏加载,与使⽤为⼀体public class Logger4JTest { public static void main(String[] args) { ure(" D:/log/ties "); Logger logger = ger(); (" debug "); (" error "); }}四、在程序中的使⽤

在程序中使⽤Log4j之前,⾸先要将和导⼊到classpath中,并将ties放于src根⽬录中。接下来就可以使⽤了。1.得到记录器

使⽤Log4j,第⼀步就是获取⽇志记录器,这个记录器将负责控制⽇志信息。其语法为:

public static Logger getLogger( String name),

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

static Logger logger = ger ( e () ) ;

2.插⼊记录信息(格式化⽇志信息)

当上两个必要步骤执⾏完毕,您就可以轻松地使⽤不同优先级别的⽇志记录语句插⼊到您想记录⽇志的任何地⽅,其语法如下:

( Object message ) ;

( Object message ) ;

( Object message ) ;

( Object message ) ;

发布者:admin,转转请注明出处:http://www.yc00.com/web/1690378976a340612.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信