如下是一个log4j.properties的配置
log4j.rootCategory=INFO, stdout , R log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n log4j.appender.R=org.apache.log4j.DailyRollingFileAppender log4j.appender.R.File=/home/tom/logs/logs.log log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n log4j.logger.com.tom=INFO, tom log4j.appender.tom=org.apache.log4j.DailyRollingFileAppender log4j.appender.tom.File=/home/tom/logs/tom.log log4j.appender.tom.layout=org.apache.log4j.PatternLayout log4j.appender.tom.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n log4j.logger.pck=INFO, pck log4j.appender.pck=org.apache.log4j.DailyRollingFileAppender log4j.appender.pck.File=/home/tom/logs/pck.log log4j.appender.pck.layout=org.apache.log4j.PatternLayout log4j.appender.pck.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n
在这个配置文件中定义了三个logger,分别是root,com.tom以及pck,日志文件分别打印到logs.log,tom.log以及pck.log。
定义如下三个测试类
package com.tom.log4j; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.log4j.Logger; public class Log4jTest { @org.junit.Test public void test1() { Log log = LogFactory.getLog("tom"); log.info("Hello,test1");//输出到logs.log } @org.junit.Test public void test2() { Logger logger = Logger.getLogger(Log4jTest.class); logger.info("Hello, test2");//输出到logs.log以及tom.log } @org.junit.Test public void test3() { Logger logger = Logger.getLogger("pck"); //输出到logs.log以及pck.log logger.info("Hello, test3"); } }
test1结果分析
- root logger会对所有的日志起作用,所以它会打印到root logger对应的日志文件logs.log
- 因为配置中没有配置日志名称为tom的logger,因此,只有root logger会记录这个日志
- 需要注意的是,如下定义的日志名称不是tom而是com.tom,因此通过getLogger("tom"),这个日志不会选中,也就不会打印到tom.log
log4j.logger.com.tom=INFO, tom
test2结果分析
- root logger会对所有的日志起作用,所以它会打印到root logger对应的日志文件logs.log
- Logger.getLogger(Log4jTest.class)会通过Log4jTest类文件的全限定名称(com.tom.log4j.Log4jTest)去查找日志。因为日志配置文件没有定义名称为com.tom.log4j.Log4jTest的logger,那它怎么写到tom.log文件中的呢?这就是Log4j的logger的继承关系,例如Logger.getLogger("X.Y.Z"),那么可以起作用的logger包括X.Y.Z,X.Y,X以及root。它不是从下向上找到就停止的方式,而是从它自身到root之间所有的logger找出来,然后根据每个logger的配置,进行日志打印。
- 在test2中Logger.getLogger("com.tom.log4j.Log4jTest")会找到com.tom和root两个logger,因此分别打印到tom.log和logs.log
test3结果分析
- root logger会对所有的日志起作用,所以它会打印到root logger对应的日志文件logs.log
- 因为配置中有一个名称为pck的logger,因此这个logger也被选中,所以会打印到pck.log中
总结
test2展现的logger的继承特性是非常有用,当在项目中使用了第三方的框架,例如Spring,Struts等,为了记录Spring,Struts的日志,可以在log4j.propeties添加两行
org.apache.struts=ERROR org.springframework=WARN
也可以把它们记录到不同的文件中,例如:
log4j.logger.org.apache.struts=INFO, struts log4j.appender.struts=org.apache.log4j.DailyRollingFileAppender log4j.appender.struts.File=/home/tom/logs/struts.log log4j.appender.struts.layout=org.apache.log4j.PatternLayout log4j.appender.struts.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n
layout格式
c | Used to output the category of the logging event. The category conversion specifier can be optionally followed by precision specifier, that is a decimal constant in brackets.
If a precision specifier is given, then only the corresponding number of right most components of the category name will be printed. By default the category name is printed in full. For example, for the category name "a.b.c" the pattern %c{2} will output "b.c". |
C | Used to output the fully qualified class name of the caller issuing the logging request. This conversion specifier can be optionally followed by precision specifier, that is a decimal constant in brackets.
If a precision specifier is given, then only the corresponding number of right most components of the class name will be printed. By default the class name is output in fully qualified form. For example, for the class name "org.apache.xyz.SomeClass", the pattern %C{1} will output "SomeClass". WARNING Generating the caller class information is slow. Thus, use should be avoided unless execution speed is not an issue. |
d | Used to output the date of the logging event. The date conversion specifier may be followed by a date format specifier enclosed between braces. For example, %d{HH:mm:ss,SSS} or %d{dd MMM yyyy HH:mm:ss,SSS}. If no date format specifier is given then ISO8601 format is assumed.
The date format specifier admits the same syntax as the time pattern string of the For better results it is recommended to use the log4j date formatters. These can be specified using one of the strings "ABSOLUTE", "DATE" and "ISO8601" for specifying These dedicated date formatters perform significantly better than |
F | Used to output the file name where the logging request was issued.
WARNING Generating caller location information is extremely slow and should be avoided unless execution speed is not an issue. |
l | Used to output location information of the caller which generated the logging event.
The location information depends on the JVM implementation but usually consists of the fully qualified name of the calling method followed by the callers source the file name and line number between parentheses. The location information can be very useful. However, its generation is extremely slow and should be avoided unless execution speed is not an issue. |
L | Used to output the line number from where the logging request was issued.
WARNING Generating caller location information is extremely slow and should be avoided unless execution speed is not an issue. |
m | Used to output the application supplied message associated with the logging event. |
M | Used to output the method name where the logging request was issued.
WARNING Generating caller location information is extremely slow and should be avoided unless execution speed is not an issue. |
n | Outputs the platform dependent line separator character or characters.
This conversion character offers practically the same performance as using non-portable line separator strings such as "\n", or "\r\n". Thus, it is the preferred way of specifying a line separator. |
p | Used to output the priority of the logging event. |
r | Used to output the number of milliseconds elapsed from the construction of the layout until the creation of the logging event. |
t | Used to output the name of the thread that generated the logging event. |
x | Used to output the NDC (nested diagnostic context) associated with the thread that generated the logging event. |
X |
Used to output the MDC (mapped diagnostic context) associated with the thread that generated the logging event. The X conversion character must be followed by the key for the map placed between braces, as in %X{clientNumber} where See |
% | The sequence %% outputs a single percent sign. |
log4j的maven依赖
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.2</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
使用slf4j的代码:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; private final Logger LOG = LoggerFactory.getLogger("mylogger");
第一行的第一个hc4是logger的名字,第二个hc4是logger的配置别名,这样,appender.hc4都是指代的第二个hc4.。
这种写法有个好处,就是
log4j.logger.org.apache.http=INFO,http,可以用http指代org.apache.http这个logger进行后面的配置
log4j.logger.hc4=INFO,hc4 log4j.appender.hc4=org.apache.log4j.DailyRollingFileAppender log4j.appender.hc4.Threshold=DEBUG log4j.appender.hc4.file=C:/http.client.logs/hc4.log log4j.appender.hc4.DatePattern='.'yyyy-MM-dd log4j.appender.hc4.layout=org.apache.log4j.PatternLayout log4j.appender.hc4.layout.ConversionPattern=[%-5p] [%d{yyyy-MM-dd HH:mm:ss}] [%C{1}:%M:%L] %m%n log4j.additivity.hc4=false
相关推荐
### Log4j.properties配置详解 #### 一、Log4j配置文件基本概念 Log4j是一种广泛应用于Java应用程序的日志框架,它可以帮助开发者轻松管理应用程序的日志记录过程。Log4j支持多种配置方式,其中.properties文件...
### Tomcat 下的 Log4j 日志配置详解 在日常的 Web 开发中,日志记录对于调试问题、监控系统状态以及后期维护来说至关重要。在使用 Apache Tomcat 作为服务器时,合理配置日志框架(如 Log4j)能够极大地提高开发...
### 常用log4j配置详解 #### log4j简介 Log4j是一个开源的日志框架,由Apache Software Foundation开发。它允许开发者通过简单的配置文件来定义日志的输出等级、输出目的地以及日志信息的格式等。这极大地提高了...
### Log4j Properties 配置详解 #### 一、配置文件结构与基本概念 Log4j 是一个功能强大的日志框架,广泛应用于Java应用程序中。它允许开发者通过配置文件来控制日志信息的生成方式、存储位置及格式。Log4j 的配置...
Log4j的配置通常通过一个名为`log4j.properties`或`log4j.xml`的文件完成。以下是一个简单的`log4j.properties`配置示例: ```properties # 设置root logger级别为INFO,并将输出到console log4j.rootLogger=INFO, ...
本文将围绕Log4j的核心配置文件`log4j.properties`进行详细讲解,分为完整版和精简版两个部分。 **1. Log4j基础概念** Log4j由三个主要组件构成:Logger(日志器)、Appender(输出器)和Layout(布局)。Logger...
Log4j的配置文件通常是`log4j.properties`或`log4j.xml`,用于设置日志器、输出器和布局等相关属性。以下是一些基本配置示例: ```properties # 配置控制台输出 log4j.rootLogger=DEBUG, Console log4j.appender....
本文将围绕一份示例配置文件来详细介绍Log4J的配置方法。 #### 二、核心概念 在深入分析配置文件之前,我们先了解几个Log4J中的核心概念: - **Logger**:负责接收并处理日志信息的对象。 - **Appender**:指定日志...
**日志框架Log4j详解** 在Java编程中,日志记录是一项不可或缺的功能,它能够帮助开发者追踪程序运行状态,定位错误,优化性能。Log4j是Apache组织提供的一款广泛使用的开源日志框架,适用于各种Java应用程序。本...
### log4j集成syslog配置详解 在现代的IT运维管理中,日志记录与分析是确保系统稳定运行的关键环节之一。log4j作为Java应用中广泛使用的日志框架,其强大的日志处理能力得到了业界的认可。而syslog作为一种标准化的...
通常,我们都提供一个名为 log4j.properties 的文件,在第一次调用到 Log4J 时,Log4J 会在类路径中定位这个文件,并读入这个文件完成的配置。 Log4j 有三个主要的组件:Loggers(记录器),Appenders(输出源)和 ...
### Log4j配置详解 #### 一、Log4j配置文件概述 Log4j是一款流行的Java日志框架,被广泛应用于各种规模的应用程序中。它的配置文件(Configuration File)主要用于设置记录器(Logger)的级别、存放器(Appender)...
log4j支持多种配置文件格式,包括XML和Java属性文件。这里我们重点介绍使用Java属性文件进行配置的方法。 ##### 1. 配置根Logger 根Logger是默认的日志记录器,如果没有特别指定其他的Logger,那么所有的日志都会...
### Java Log4j 配置详解 #### 一、Log4j 概述 Log4j 是 Apache 的一个开源项目,被广泛应用于 Java 应用程序的日志记录中。通过 Log4j,开发者可以轻松控制日志信息的输出目的地、格式以及级别。这使得日志的管理...
- `log4j.properties` 或 `log4j.xml`: 配置Log4j的主要方式,用于设定Logger、Appender、Layout等属性。例如,可以指定哪个类或包的日志级别,以及日志输出的格式和位置。 3. **使用示例** - 创建Logger实例: ...
3. **配置log4j属性文件**: - 新建一个名为`log4j.properties`的文件,并将其放置在项目的根目录下。 - 编写log4j配置信息。以下是一个简单的示例: ```properties log4j.rootLogger=info,...
#### 步骤一:配置log4j属性文件 在Java应用中使用Log4j进行日志记录的第一步,是创建并配置log4j的属性文件(log4j.properties)。这个文件定义了日志的级别、输出目的地以及日志的格式。以下是一个典型的log4j配置...
《log4j2.17.2漏洞修复程序包详解》 在信息技术领域,日志管理是系统维护和故障排查的重要环节。Log4j作为Java平台广泛使用的日志记录框架,其性能高效、功能强大,深受开发者的青睐。然而,随着技术的发展,安全...