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字符,就从左边交远销出的字符截掉。

原文地址:http://blog.51cto.com/ggwhsd/2340510

时间: 2024-10-07 17:06:24

log4j的多logger记录日志的简明使用的相关文章

Log4J 如何分开Logger输出

今天和两个同事讨论Log4j,他们都需要解决一个问题,怎么分开输出Logger.这么讲不清楚,举个例子: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 package com.gmail.at.ankyhe.log4jtest; import org.apache.log4j.Logger; public class ClassA {          private static Logger logger =

Spring学习总结(13)——Spring+Log4j+ActiveMQ实现远程记录日志

应用场景 随着项目的逐渐扩大,日志的增加也变得更快.Log4j是常用的日志记录工具,在有些时候,我们可能需要将Log4j的日志发送到专门用于记录日志的远程服务器,特别是对于稍微大一点的应用.这么做的优点有: 可以集中管理日志 :可以把多台服务器上的日志都发送到一台日志服务器上,方便管理.查看和分析 可以减轻服务器的开销 :日志不在服务器上了,因此服务器有更多可用的磁盘空间 可以提高服务器的性能 :通过异步方式,记录日志时服务器只负责发送消息,不关心日志记录的时间和位置,服务器甚至不关心日志到底有

日志组件系列:(2)commons logging和log4j实战

(1).下载组件,引入jar包 (2).配置 (3).使用API 1.下载组件,引入jar包 jar包 下载地址 log4j-1.2.17.jar http://logging.apache.org/log4j/1.2/ commons-logging-1.2.jar http://commons.apache.org/proper/commons-logging/download_logging.cgi 2.配置 在项目的src目录下添加log4j.properties文件,配置如下: log

commons-logging.jar 和 log4j.jar 的关系

在用springmvc开发项目的时候,在日志管理这一块,我们一般用的都是log4j进行日志管理,但是我们在导入spring相关的jar的时候,都会看到commons-logging.jar包,为什么我们使用log4j的同时还要引入commons-logging.jar包,它们到底是一种什么关系呢? 接下来我们看看commons-logging中的org.apache.commons.logging.Log的源码 /*** Eclipse Class Decompiler plugin, copy

使用log4j记录日志

log4j.properties ### 设置Logger输出级别和输出目的地 ### log4j.rootLogger=debug,stdout,logfile ### 把日志信息输出到控制台 ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.err log4j.appender.stdout.layout=org.apache.log4j.SimpleL

Log4j:log4j.properties 配置解析

Log4j 三个主要组件 Loggers(记录器):记录日志的工具,程序中就是用它来记录我们想要的日志信息. Appenders (输出源):日志输出到什么地方,可以是控制台.文件.流位置.数据库,等等. Layouts(布局模式):日志需要记录哪些基本信息,用什么样的格式去记录展示这些信息. 一个 Logger 最少要有一个 Appender,一个 Appender 有一个 Layout. Loggers 记录器在 Log4j 中就是 Logger 类的实例对象,下面是该类中定义的一些主要方法

java之log4j的配置

log4j有很多的优点,用起来很方便,就是配置起来有些麻烦,下面我介绍一下log4j的配置方法. log4j是用来记录日志的. 软件的运行过程离不开日志.日志主要用来记录系统运行过程中的一些重要的操作信息,便于监视系统运行情况,帮助用户提前发现和避开可能出现的问题,或者出现问题后根据日志找到发生的原因. 日志根据记录内容的不同,主要分成以下3类: SQL日志:记录系统执行的SQL语句. 异常日志:记录系统运行中发生的异常事件. 业务日志:记录系统运行过程,如用户登录,操作记录. 要使用log4j

Java中的日志——Java.util.logging、log4j、commons-logging

Java中给项目程序添加log主要有三种方式,一使用JDK中的java.util.logging包,一种是log4j,一种是commons-logging.其中log4j和commons-logging都是apache软件基金会的开源项目.这三种方式的区别如下: Java.util.logging,JDK标准库中的类,是JDK 1.4 版本之后添加的日志记录的功能包. log4j,最强大的记录日志的方式.可以通过配置 .properties 或是 .xml 的文件, 配置日志的目的地,格式等等.

log4j详细使用方法

简单的说log4j就是帮助开发人员进行日志输出管理的API类库.它最重要的特点就可以配置文件灵活的设置日志信息的优先级.日志信息的输出目的地.日志信息的输出格式 Log4j 除了可以记录程序运行日志信息外还有一重要的功能就是用来显示调试信息. 程序员经常会遇到脱离java ide环境调试程序的情况,这时大多数人会选择使用System.out.println语句输出某个变量值的方法进行调试.这样会带来一个非常麻烦的问题:一旦哪天程序员决定不要显示这些System.out.println的东西了就只