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

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

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

  1. logger是日志组件的主要概念,用于指定不同的包使用不同的日志级别,或者指定一个logger组件,以便在使用的时候可以使用getLogger(组件名)的方式获取该logger的定义。logger中主要指定一个日志级别,以及数个具体的记录器appender,这样程序中就可以选用哪些记录器进行记录日志,以及记录什么级别的日志。
  2. 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字符,就从左边交远销出的字符截掉。

原创文章,作者:3628473679,如若转载,请注明出处:https://blog.ytso.com/193348.html

(0)
上一篇 2021年11月15日
下一篇 2021年11月15日

相关推荐

发表回复

登录后才能评论