行业资讯 2025年08月6日
0 收藏 0 点赞 770 浏览 6814 个字
摘要 :

文章目录 1. Log4j2 依赖关系 1.1 Maven 1.2 Gradle 2. ConsoleAppender – 记录到控制台 3. RollingFileAppender – 记录到文件 4. 配置多个Appender 5. l……




  • 1. Log4j2 依赖关系
    • 1.1 Maven
    • 1.2 Gradle
  • 2. ConsoleAppender – 记录到控制台
  • 3. RollingFileAppender – 记录到文件
  • 4. 配置多个Appender
  • 5. log4j2.xml 文件的位置
  • 6.Demo
    • 6.1 Core Log4j2 API
    • 6.2. Log4j2 with SLF4j

    学习配置log4j2.xml文件以将日志语句输出到控制台、滚动文件等。 学习配置log4j2的appender、级别和模式。

    Apache Log4j2是对Log4j 1.x的升级,与前一个版本相比提供了显着的改进,例如性能提高、自动重新加载修改的配置文件、Java 8 lambda支持和自定义日志级别。

    1. Log4j2 依赖关系

    1.1 Maven

    要包含Log4j2,请包括最新版本的log4j-core和log4j-api依赖项。请注意,使用Log4j2与SLF4J一起是推荐的方法。

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.20.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.20.0</version>
    </dependency>
    

    1.2 Gradle

    dependencies {
        implementation \'org.apache.logging.log4j:log4j-api:2.20.0\'
        implementation \'org.apache.logging.log4j:log4j-core:2.20.0\'
    }
    

    2. ConsoleAppender – 记录到控制台

    我们可以使用下面的log4j2.xml文件将日志输出到控制台。 它使用ConsoleAppender API。 请注意,如果在初始化Log4j2时找不到配置文件,则将使用DefaultConfiguration。 默认配置将导致日志输出到控制台。

    log4j2.xml:

    <?xml version=\"1.0\" encoding=\"UTF-8\"?>
    <!-- 与Log4j初始化相关的额外日志记录。如果log4j初始化失败,则设置为调试或跟踪。 -->
    <Configuration status=\"warn\">
        <Appenders>
            <!-- Console appender 配置-->
            <Console name=\"console\" target=\"SYSTEM_OUT\">
                <PatternLayout
                    pattern=\"%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n\" />
            </Console>
        </Appenders>
        <Loggers>
            <!-- Root logger 指向 console appender -->
            <Root level=\"info\" additivity=\"false\">
                <AppenderRef ref=\"console\" />
            </Root>
        </Loggers>
    </Configuration>
    

    3. RollingFileAppender – 记录到文件

    我们可以使用下面的log4j2.xml文件将日志输出与基于时间和大小的滚动文件。 给定的RollingFileAppender配置每天滚动日志,或者当日志文件大小大于10 MB时。 它还将删除所有超过30天的旧日志文件。

    log4j2.xml:

    <?xml version=\"1.0\" encoding=\"UTF-8\"?>
    <Configuration status=\"warn\">
        <Properties>
            <Property name=\"basePath\">C:/temp/logs</Property>
        </Properties>
        <Appenders>
            <RollingFile name=\"fileLogger\"
                fileName=\"${basePath}/app.log\"
                filePattern=\"${basePath}/app-%d{yyyy-MM-dd}.log\">
                <PatternLayout>
                    <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
                    </pattern>
                </PatternLayout>
                <Policies>
                    <TimeBasedTriggeringPolicy interval=\"1\" modulate=\"true\" />
                    <SizeBasedTriggeringPolicy size=\"10MB\" />
                </Policies>
                <!-- 每天最多创建 10 个文件 -->
                <DefaultRolloverStrategy max=\"10\">
                    <Delete basePath=\"${basePathr}\" maxDepth=\"10\">
                        <!-- 删除所有30天以上的文件 -->
                        <IfLastModified age=\"30d\" />
                    </Delete>
                </DefaultRolloverStrategy>
            </RollingFile>
        </Appenders>
        <Loggers>
            <Root level=\"info\" additivity=\"false\">
                <appender-ref ref=\"fileLogger\" />
            </Root>
        </Loggers>
    </Configuration>
    

    4. 配置多个Appender

    使用此简单的log4j2.xml进行快速参考以将日志语句记录到多个日志文件中。 此配置使用LevelRangeFilter将不同级别的日志(例如调试,信息等)记录到不同的文件,以便我们的日志清晰且易于分离,从而易于调试和报告。 根据您的需求更改多个appender的配置。

    log4j2.xml:

    <?xml version=\"1.0\" encoding=\"UTF-8\"?>
    <Configuration status=\"WARN\" monitorInterval=\"30\">
        <!-- Logging Properties -->
        <Properties>
            <Property name=\"LOG_PATTERN\">%d{yyyy-MM-dd\'T\'HH:mm:ss.SSSZ} %p %m%n</Property>
            <Property name=\"APP_LOG_ROOT\">c:/temp/logs</Property>
        </Properties>
        <Appenders>
            <!-- Console Appender -->
            <Console name=\"Console\" target=\"SYSTEM_OUT\" follow=\"true\">
                <PatternLayout pattern=\"${LOG_PATTERN}\"/>
            </Console>
            <!-- 根据需要使用File Appenders -->
            <RollingFile name=\"frameworkLog\" fileName=\"${APP_LOG_ROOT}/app-framework.log\"
                filePattern=\"${APP_LOG_ROOT}/app-framework-%d{yyyy-MM-dd}-%i.log\">
                <LevelRangeFilter minLevel=\"ERROR\" maxLevel=\"ERROR\" onMatch=\"ACCEPT\" onMismatch=\"DENY\"/>
                <PatternLayout pattern=\"${LOG_PATTERN}\"/>
                <Policies>
                    <SizeBasedTriggeringPolicy size=\"10MB\" />
                </Policies>
                <DefaultRolloverStrategy max=\"10\"/>
            </RollingFile>
            <RollingFile name=\"debugLog\" fileName=\"${APP_LOG_ROOT}/app-debug.log\"
                filePattern=\"${APP_LOG_ROOT}/app-debug-%d{yyyy-MM-dd}-%i.log\">
                <LevelRangeFilter minLevel=\"DEBUG\" maxLevel=\"DEBUG\" onMatch=\"ACCEPT\" onMismatch=\"DENY\"/>
                <PatternLayout pattern=\"${LOG_PATTERN}\"/>
                <Policies>
                    <SizeBasedTriggeringPolicy size=\"10MB\" />
                </Policies>
                <DefaultRolloverStrategy max=\"10\"/>
            </RollingFile>
            <RollingFile name=\"infoLog\" fileName=\"${APP_LOG_ROOT}/app-info.log\"
                filePattern=\"${APP_LOG_ROOT}/app-info-%d{yyyy-MM-dd}-%i.log\" >
                <LevelRangeFilter minLevel=\"INFO\" maxLevel=\"INFO\" onMatch=\"ACCEPT\" onMismatch=\"DENY\"/>
                <PatternLayout pattern=\"${LOG_PATTERN}\"/>
                <Policies>
                    <SizeBasedTriggeringPolicy size=\"10MB\" />
                </Policies>
                <DefaultRolloverStrategy max=\"10\"/>
            </RollingFile>
            <RollingFile name=\"errorLog\" fileName=\"${APP_LOG_ROOT}/app-error.log\"
                filePattern=\"${APP_LOG_ROOT}/app-error-%d{yyyy-MM-dd}-%i.log\" >
                <LevelRangeFilter minLevel=\"ERROR\" maxLevel=\"ERROR\" onMatch=\"ACCEPT\" onMismatch=\"DENY\"/>
                <PatternLayout pattern=\"${LOG_PATTERN}\"/>
                <Policies>
                    <SizeBasedTriggeringPolicy size=\"10MB\" />
                </Policies>
                <DefaultRolloverStrategy max=\"10\"/>
            </RollingFile>
            <RollingFile name=\"perfLog\" fileName=\"${APP_LOG_ROOT}/app-perf.log\"
                filePattern=\"${APP_LOG_ROOT}/app-perf-%d{yyyy-MM-dd}-%i.log\" >
                <PatternLayout pattern=\"${LOG_PATTERN}\"/>
                <Policies>
                    <SizeBasedTriggeringPolicy size=\"10MB\" />
                </Policies>
                <DefaultRolloverStrategy max=\"1\"/>
            </RollingFile>
            <RollingFile name=\"traceLog\" fileName=\"${APP_LOG_ROOT}/app-trace.log\"
                filePattern=\"${APP_LOG_ROOT}/app-trace-%d{yyyy-MM-dd}-%i.log\" >
                <PatternLayout pattern=\"${LOG_PATTERN}\"/>
                <Policies>
                    <SizeBasedTriggeringPolicy size=\"10MB\" />
                </Policies>
                <DefaultRolloverStrategy max=\"1\"/>
            </RollingFile>
        </Appenders>
        <Loggers>
            <Logger name=\"com.howtodoinjava.app.pref\" additivity=\"false\" level=\"trace\">
                <AppenderRef ref=\"traceLog\" />
                <AppenderRef ref=\"Console\" />
            </Logger>
            <Logger name=\"com.howtodoinjava.app\" additivity=\"false\" level=\"debug\">
                <AppenderRef ref=\"debugLog\" />
                <AppenderRef ref=\"infoLog\"  />
                <AppenderRef ref=\"errorLog\" />
                <AppenderRef ref=\"Console\"  />
            </Logger>
            <Logger name=\"org.framework.package\" additivity=\"false\" level=\"info\">
                <AppenderRef ref=\"perfLog\" />
                <AppenderRef ref=\"Console\"/>
            </Logger>
            <Root level=\"warn\">
                <AppenderRef ref=\"Console\"/>
            </Root>
        </Loggers>
    </Configuration>
    

    5. log4j2.xml 文件的位置

    我们应将log4j2.xml放置在应用程序类路径的任何位置。 Log4j将扫描所有类路径位置以查找此文件并然后加载它。 我们大多可以在’src/main/resources’文件夹中找到此文件。如何配置log4j2.xml文件

    如果我们使用外部的log4j2配置文件,那么我们可以通过应用程序启动参数或系统属性log4j.configurationFile提供配置文件的路径。请注意,此属性值不仅限于本地文件系统上的位置,还可以包含URL。

    -Dlog4j2.configurationFile=file:/home/lokesh/log4j2.xml
    

    一个常见的做法是在junit测试类中标注@BeforeAll的方法中设置log4j.configurationFile属性。这将允许在测试期间使用任意命名的文件。

    6.Demo

    让我们编写一个Java类并写一些日志语句来验证日志是否出现在控制台和日志文件中。它将不同的日志级别记录到不同的日志中。

    6.1 Core Log4j2 API

    import org.apache.logging.log4j.Logger;
    import org.apache.logging.log4j.LogManager;
    public class Main {
        private static final Logger logger = LogManager.getLogger(Main.class);
        public static void main(final String... args)
        {
            logger.debug(\"Debug Message Logged !!!\");
            logger.info(\"Info Message Logged !!!\");
            logger.error(\"Error Message Logged !!!\", new NullPointerException(\"NullError\"));
        }
    }
    

    6.2. Log4j2 with SLF4j

    正如开头所述,建议使用带有SLF4j API的Log4j。

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    public class Main {
        private static final Logger logger = LoggerFactory.getLogger(Main.class);
        public static void main(final String[] args)
        {
            logger.debug(\"Debug Message Logged !!!\");
            logger.info(\"Info Message Logged !!!\");
            logger.error(\"Error Message Logged !!!\", new NullPointerException(\"NullError\"));
        }
    }
    

     

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9552.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号