java自定义日志输出文件(log4j日志文件输出多个自定义日志文件)


在Java中,使用Log4j来实现自定义日志输出到多个文件是一个常见的需求。这里,我将提供一个简单的Log4j2配置示例,该配置将日志输出到两个不同的文件中,基于不同的日志级别或日志分类。

首先,确保你的项目中已经包含了Log4j2的依赖。如果你使用的是Maven,可以在`pom.xml`中添加如下依赖(注意检查最新版本):


<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.x.x</version> <!-- 使用最新的稳定版本 -->
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.x.x</version> <!-- 与log4j-core相同版本 -->
</dependency>

接下来,在你的资源文件夹(如`src/main/resources`)中创建一个名为`log4j2.xml`的配置文件。以下是一个配置示例,它将日志输出到两个不同的文件:


<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <!-- 配置第一个日志文件,仅捕获ERROR级别的日志 -->
        <File name="ErrorFile" fileName="logs/errors.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n"/>
            <Filters>
                <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </File>

        <!-- 配置第二个日志文件,捕获除了ERROR级别之外的所有日志 -->
        <File name="GeneralFile" fileName="logs/general.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n"/>
            <Filters>
                <!-- 拒绝ERROR级别的日志 -->
                <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
                <!-- 捕获所有其他级别的日志 -->
                <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </File>
    </Appenders>
    <Loggers>
        <Root level="debug">
            <AppenderRef ref="ErrorFile"/>
            <AppenderRef ref="GeneralFile"/>
        </Root>
    </Loggers>
</Configuration>

这个配置文件中,我们定义了两个`File` Appender,分别用于输出ERROR级别的日志到`errors.log`文件和输出除ERROR级别之外的所有日志到`general.log`文件。通过`ThresholdFilter`,我们可以控制哪些日志级别被写入到指定的文件中。

注意:在真实应用中,你可能需要根据自己的需求调整日志级别、文件路径、日志格式等配置。

现在,在你的Java代码中,你可以通过Log4j2的API来获取Logger实例,并像平常一样记录日志。Log4j2会根据上述配置将日志输出到相应的文件中。