### Log4j配置详解
#### 一、Log4j配置文件概述
Log4j是一款流行的Java日志框架,被广泛应用于各种规模的应用程序中。它的配置文件(Configuration File)主要用于设置记录器(Logger)的级别、存放器(Appender)以及布局(Layout),支持key=value格式的设置或XML格式的设置信息。通过这些配置,我们可以非常灵活地控制日志的记录方式,创建出符合需求的日志运行环境。
#### 二、配置文件的基本结构与语法
在Log4j的配置文件中,可以通过以下几种方式进行配置:
1. **基本配置语句**:用于定义Logger、Appender和Layout的基本属性。
- `log4j.rootLogger=[level], appenderName1, appenderName2`:设置根记录器(root logger)的级别以及关联的存放器。例如:
```
log4j.rootLogger=DEBUG, stdout, file
```
- `log4j.appender.appenderName=fully.qualified.name.of.appender.class`:定义一个具体的存放器类。例如:
```
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
```
- `log4j.appender.appenderName.option=value`:设置存放器的具体选项。例如:
```
log4j.appender.stdout.Target=System.out
```
- `log4j.appender.appenderName.layout=fully.qualified.name.of.layout.class`:定义一个具体的布局类。例如:
```
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
```
- `log4j.appender.appenderName.layout.option=value`:设置布局的具体选项。例如:
```
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
```
2. **日志级别**:Log4j支持五种不同的日志级别,按照严重程度递减排序如下:
- FATAL (0)
- ERROR (3)
- WARN (4)
- INFO (6)
- DEBUG (7)
3. **常用的存放器(Appender)**:Log4j提供了多种存放器供选择,以满足不同场景下的需求:
- `org.apache.log4j.ConsoleAppender`:将日志输出到控制台。
- `org.apache.log4j.FileAppender`:将日志输出到指定文件。
- `org.apache.log4j.DailyRollingFileAppender`:按天滚动的日志文件存放器。
- `org.apache.log4j.RollingFileAppender`:根据文件大小进行滚动的日志文件存放器。
- `org.apache.log4j.WriterAppender`:将日志输出到任何实现了`java.io.Writer`接口的对象。
4. **常用的布局(Layout)**:Log4j同样提供了多种布局方式,以定制日志的输出格式:
- `org.apache.log4j.HTMLLayout`:HTML格式的布局。
- `org.apache.log4j.PatternLayout`:支持模式化定制的日志布局。
- `org.apache.log4j.SimpleLayout`:简单的布局,通常包含时间戳和日志信息。
- `org.apache.log4j.TTCCLayout`:时间戳、线程名、分类名等信息的布局。
#### 三、示例配置
下面给出一个具体的配置文件示例:
```
log4j.rootLogger=DEBUG, stdout, D, E
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.appender.D=org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File=logs/log.log
log4j.appender.D.Append=true
log4j.appender.D.Threshold=DEBUG
log4j.appender.D.layout=org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %m%n
```
该配置文件定义了一个根记录器,其级别为DEBUG,并且关联了两个存放器:一个控制台存放器(stdout)和一个按天滚动的日志文件存放器(D)。此外,还设置了相应的布局,以便更清晰地展示日志信息。
#### 四、启动Logger的方式
1. **使用BasicConfigurator**:简单配置控制台输出。
```java
BasicConfigurator.configure();
```
默认情况下,控制台输出使用`org.apache.log4j.ConsoleAppender`,并采用`"%-4r [%t] %-5p %c%x - %m%n"`的PatternLayout格式,日志级别为DEBUG。
2. **使用PropertyConfigurator**:通过配置文件来配置Logger。
```java
PropertyConfigurator.configure(args[0]);
```
3. **使用默认配置**:如果应用中没有明确配置,则会使用默认的配置。
```java
Logger.getLogger("YourClass").info("Info message");
```
4. **使用XML配置文件**:这种方式更为灵活,允许使用更为复杂的配置结构。
#### 五、总结
通过以上介绍,我们可以看到Log4j的配置文件具有极高的灵活性和可定制性。无论是简单的控制台输出还是复杂的多文件滚动输出,都可以通过配置文件轻松实现。这对于开发人员来说是一个非常强大的工具,可以帮助他们更好地管理和分析应用程序的日志数据。