log4j.logger java_log4j的多logger记录日志的简明使用

日志,应该是一个应用软件的基础功能之一。

使用java语言,必然会使用一个日志库,我使用的是log4j的日志库。网上不少文章都有介绍,但是结合logger的不同功能介绍以及示例介绍的清楚的不多,至少我也是翻了不少网页,然后根据实验才得出这些功能。

我觉得log4j中主要有2个概念:logger、appender。

logger是日志组件的主要概念,用于指定不同的包使用不同的日志级别,或者指定一个logger组件,以便在使用的时候可以使用getLogger(组件名)的方式获取该logger的定义。logger中主要指定一个日志级别,以及数个具体的记录器appender,这样程序中就可以选用哪些记录器进行记录日志,以及记录什么级别的日志。

appender是具体执行记录日志到文件或者终端的组件。

多logger组件的使用方式

getLogger(参数),如果参数可以在配置文件中找到对应的logger,则使用该logger,如果找不到,则使用rootlogger。

代码使用方式很简单,在java工程中引入如下库

package logStudy;

import org.apache.log4j.Logger;

public class useLog4J {

public static Logger logger1 = Logger.getLogger(useLog4J.class);

public static Logger logger2 = Logger.getLogger("logStudy");

public static void main(String[] args) {

int i =100;

while(i>0) {

logger1.debug("这是一条测试log的数据,级别应该是debug");

logger1.debug("这是一条测试log的数据,级别应该是debug");

logger1.info("这是一条测试log的数据,级别info");

logger1.info("这是一条测试log的数据,级别info");

logger1.info("这是一条测试log的数据,级别info");

logger1.debug("这是一条测试log的数据,级别应该是debug");

logger1.warn("这是一条测试log的数据,级别应该是warn");

i--;

}

logger2.debug("logger2 debug");

logger2.info("logger2 info");

logger2.warn("logger2 warn");

logger2.fatal("logger2 fatal");

}

}

以上代码中,使用了两个logger组件,主要是为了演示两者的区别,logger1是使用的rootlogger的内容,而logger2使用的是名为logStudy的logger,这个logger使用的只是CONSOLE,以下配置会有介绍。

log4j的使用代码很简单明了,主要工作是在配置文件中,即log4j.properties中的配置,示例中的配置示例如下。

ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF

### 设置级别和目的地(这里多个目的地) ###

log4j.rootLogger = INFO,CONSOLE,HelloLog,Hello2Log

### 第一个用处,默认这里的logStudy是包,也就是在这个包记录日志时,是只记录WARN及以上级别的日志.

### 第二个用处,可以在程序中任何地方,通过Logger.getLogger("logStudy")主动使用这个名为logStudy的logger。

log4j.logger.logStudy=WARN,CONSOLE

### 配置日志信息输出目的地Appender,此处第一个appender名为CONSOLE,使用的输出方式为org.apache.log4j.ConsoleAppender,即输出到控制台

log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender

log4j.appender.CONSOLE.Target = System.out

log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout

#输出格式,具体格式内容可以网上查找

log4j.appender.CONSOLE.layout.ConversionPattern = %c %d{ABSOLUTE} %5p %c{1}:%L - %m%n

#每天创建一个日志

log4j.appender.HelloLog = org.apache.log4j.DailyRollingFileAppender

log4j.appender.HelloLog.File =.\\log\\debug.log

#log4j.appender.HelloLog.File =/var/log/debug.log

log4j.appender.HelloLog.Append = true

## 只输出DEBUG级别以上的日志

log4j.appender.HelloLog.Threshold = INFO

#'.'yyyy-MM-dd: 每天产生一个新的文件

log4j.appender.HelloLog.DatePattern = '.'yyyy-MM-dd

log4j.appender.HelloLog.layout = org.apache.log4j.PatternLayout

log4j.appender.HelloLog.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] [%c{1}:%L] [%M] %m%n

log4j.additivity.logStudy = false #不继承根rootLogger,这样就不会把日志输出到rootLogger中指定的appender中。

#当文本文件为3KB大时新建一个文件

log4j.appender.Hello2Log = org.apache.log4j.RollingFileAppender

log4j.appender.Hello2Log.File =.\\log\\debug2.log

#log4j.appender.Hello2Log.File =/var/log/debug.log

log4j.appender.Hello2Log.Append = true

## 只输出DEBUG级别以上的日志

log4j.appender.Hello2Log.Threshold = INFO

log4j.appender.Hello2Log.MaxFileSize = 2KB

log4j.appender.Hello2Log.MaxBackupIndex = 5

#'.'yyyy-MM-dd: 每天产生一个新的文件

log4j.appender.Hello2Log.layout = org.apache.log4j.PatternLayout

log4j.appender.Hello2Log.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] [%c{1}:%L] [%M] %m%n

以下内容为每个介绍:

1、log4j.rootLogger

log4j.rootLogger= [ level ] , appenderName, appenderName2,...

level:是log4j的日志级别,优先级从高到低分别是FATAL、ERROR、WARN、INFO、DEBUG、ALL。appenderName:就是指定日志信息输出到哪个地方。

2、 配置日志信息输出目的地Appender,其语法为:

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

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

org.apache.log4j.ConsoleAppender(控制台),

org.apache.log4j.FileAppender(文件),

org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),

org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),

org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

3、设置好appender后,针对appender的配置

也就是设置好要输出到什么地方后,其它配置选项,很多配置选项是相同的,每个appender类型有一些特别的选项

1.ConsoleAppender选项

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

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

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

2.FileAppender 选项

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

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

3.DailyRollingFileAppender 选项

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

DatePattern=’.’yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。

4.RollingFileAppender 选项

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

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

4.输出格式介绍

日志输出格式,所用到的参数如下,按需添加:

%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)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)

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

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

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

%L: 输出代码中的行号

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

%n: 输出一个回车换行符,Windows平台为”\r\n”,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字符,就从左边交远销出的字符截掉。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值