java-log4j-xml配置 category、logger、boot 标签使用

本文详细介绍了如何使用Log4j的XML配置文件来设置不同级别的日志输出,包括root、logger和category节点的配置方法,并通过实际示例展示了如何在Java应用中应用这些配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


java-log4j-xml配置 category、logger、boot 标签使用

一、节点说明:

root:基础日志配置、包括使用的输出器、日志级别等;
logger:自定义输出配置;
category:自定义输出配置;


logger、category 用法一致,可以配置通过 additivity 属性标记是否集成 root 配置;


二、maven 依赖:
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>






log4j 配置:demo/src/main/resources/core/log4j.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>


    <!-- 控制台输出 -->
    <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %p [%c] - %m%n"/>
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <!--最小级别-->
            <param name="LevelMin" value="INFO"/>
        </filter>
    </appender>


    <!-- 系统启动日志输出文件 -->
    <appender name="fileAppender" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="Encoding" value="UTF-8"/>
        <param name="File" value="/logs/test_log4j_logs/system.log"/>
        <param name="DatePattern" value="'.'yyyy-MM-dd"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %p [%c] - %m%n"/>
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <!--最小级别-->
            <param name="LevelMin" value="INFO"/>
        </filter>
    </appender>


    <!-- 测试 category 配置节 -->
    <appender name="testCategoryAppender" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="/logs/test_log4j_logs/test_category_logs.log"/>
        <param name="DatePattern"  value="'.'yyyy-MM-dd-HH'.log'" />
        <layout  class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %p [%c] - %m%n"/>
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <!--最小级别-->
            <param name="LevelMin" value="INFO" />
        </filter>
    </appender>


    <!-- 测试 logger 配置节 -->
    <appender name="testAppender" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="/logs/test_log4j_logs/test_logger_logs.log"/>
        <param name="DatePattern"  value="'.'yyyy-MM-dd-HH'.log'" />
        <layout  class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %p [%c] - %m%n"/>
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <!--最小级别,小于 error 级别错误将不输出-->
            <param name="LevelMin" value="ERROR" />
        </filter>
    </appender>


    <!--自定义日志输出配置,additivity=是否继承 root 配置-->
    <category name="testCategoryLogger" additivity="false">
        <level value="INFO"></level>
        <appender-ref ref="testCategoryAppender"></appender-ref>
        <appender-ref ref="stdout"></appender-ref>
    </category>
    <!--自定义日志输出配置,additivity=是否继承 root 配置-->
    <logger name="testLogger" additivity="false">
        <!--级别-->
        <level value="INFO"></level>
        <!--输出器-->
        <appender-ref ref="testAppender"></appender-ref>
        <appender-ref ref="stdout"></appender-ref>
    </logger>


    <!--基础日志输出配置-->
    <root>
        <level value="INFO"/>
        <!--输出器-->
        <appender-ref ref="stdout"/>
        <appender-ref ref="fileAppender"/>
    </root>


</log4j:configuration>





三、测试代码:demo/src/test/java/com/example/demo/TestLog4j.java
package com.example.demo;


import org.apache.log4j.Logger;
import org.junit.Before;
import org.junit.Test;
import org.springframework.util.Log4jConfigurer;


import java.io.FileNotFoundException;


/**
 * @author xiaojing.xie
 * @create 2017-09-18
 **/
public class TestLog4j {
    @Before
    public void before(){
        try {
            Log4jConfigurer.initLogging("classpath:core/log4j.xml");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
    @Test
    public void test3(){
        Logger log = Logger.getLogger("testLogger");
        log.info("info");
        log.debug("debug");
        log.error("error");
        log.warn("warn");
        log.trace("trace");
    }
    @Test
    public void test2(){
        Logger log = Logger.getLogger("testCategoryLogger");
        log.info("info");
        log.debug("debug");
        log.error("error");
        log.warn("warn");
        log.trace("trace");
    }
    @Test
    public void test1(){
        Logger log = Logger.getLogger("testAppender");
        log.info("info");
        log.debug("debug");
        log.error("error");
        log.warn("warn");
        log.trace("trace");
    }
}



四、测试说明:

主要观察 /logs/test_log4j_logs/ 路径下system.log、test_category_logs.log、test_logger_logs.log 三个文件的内容写入。





<think>好的,我现在需要帮助用户了解如何使用Log4j2的加密Appender。首先,我得回忆一下Log4j2的相关知识,特别是关于Appender和加密的部分。用户提到了加密Appender,可能是指将日志内容加密后再存储或传输的Appender。 根据引用内容,用户提供的参考资料中有提到在Spring Boot使用Log4j2进行日志脱敏,例如加密密码字段。引用[3]提到使用Spring Security的加密算法和配置脱敏策略。这可能涉及到自定义的Appender或者使用现有的加密插件。 首先,我需要确认Log4j2是否内置了加密的Appender,或者是否需要通过插件实现。根据引用[1],Log4j2有插件系统,可以通过@Plugin来扩展功能。因此,用户可能需要自己实现一个加密的Appender,或者使用现有的第三方插件。 接下来,配置步骤。根据引用[2],添加Log4j2依赖是第一步,用户需要确保项目中有正确的依赖,比如使用Maven或Gradle引入Log4j2核心和相关扩展。然后,配置log4j2.xmllog4j2.properties文件,定义Appender和加密方式。 在引用[3]中,提到了使用安全字段配置,比如logbook.secure-fields来指定需要加密的字段,并使用加密算法如SHA-512。这可能涉及到在日志事件中识别特定字段并进行加密处理。不过,这更多是日志内容的脱敏,而不是整个Appender的加密。因此,用户可能需要一个将日志输出到文件或网络时进行整体加密的Appender,例如使用SSL/TLS加密传输,或者对日志文件进行加密存储。 可能的解决方案包括使用SSL Socket Appender来加密传输日志,或者使用自定义的EncryptedFileAppender,在写入文件前对日志内容加密。例如,使用AES加密算法,将日志内容加密后写入文件,读取时再解密。 配置示例部分,我需要展示如何在log4j2.xml配置这样的Appender。可能需要引用自定义的插件类,或者使用现有的配置参数。例如,配置一个File Appender,并指定加密的Layout,或者使用Filter和Converter来处理加密。 另外,用户可能需要了解如何实现自定义的Appender。引用[1]提到@Plugin的使用,需要创建一个继承自AbstractAppender的类,并重写append方法,在其中加入加密逻辑。然后,在配置文件中引用这个插件。 还需要考虑密钥管理的问题,比如如何安全地存储加密密钥,避免密钥泄露。可能需要在配置使用环境变量或外部化配置来获取密钥,而不是硬编码在配置文件中。 最后,测试配置是否正确,例如写一个测试日志,查看输出文件是否被加密,或者通过日志查看器验证加密是否生效。可能还需要处理异常情况,比如加密失败时的回退机制。 总结步骤:添加依赖、创建自定义加密Appender(或使用现有插件)、配置XML文件、处理密钥管理、测试验证。同时,结合引用中的内容,确保引用相关部分,如插件使用和依赖添加。</think>### Log4j2加密Appender配置指南 #### 一、依赖配置 1. **添加Log4j2核心库**:通过Maven引入基础组件[^2] ```xml <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.20.0</version> </dependency> ``` 2. **添加加密扩展包**(示例使用Bouncy Castle): ```xml <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.70</version> </dependency> ``` #### 二、自定义加密Appender实现 ```java @Plugin(name = "EncryptedFile", category = Core.CATEGORY_NAME, elementType = Appender.ELEMENT_TYPE) public class EncryptedFileAppender extends AbstractAppender { private final Cipher cipher; private final FileOutputStream fileStream; protected EncryptedFileAppender(String name, Filter filter, Layout<?> layout, String filePath, String secretKey) { super(name, filter, layout); // 初始化加密组件 cipher = Cipher.getInstance("AES/GCM/NoPadding"); SecretKeySpec keySpec = new SecretKeySpec(secretKey.getBytes(), "AES"); cipher.init(Cipher.ENCRYPT_MODE, keySpec); fileStream = new FileOutputStream(filePath); } @Override public void append(LogEvent event) { byte[] logData = getLayout().toByteArray(event); byte[] encryptedData = cipher.doFinal(logData); fileStream.write(encryptedData); } } ``` #### 三、XML配置示例 ```xml <Configuration status="WARN"> <Appenders> <EncryptedFile name="SecureLog" fileName="logs/secure.log" secretKey="${env:LOG_KEY}" layout="PatternLayout"> <Pattern>%d %p %c{1.} [%t] %m%n</Pattern> </EncryptedFile> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="SecureLog"/> </Root> </Loggers> </Configuration> ``` #### 四、密钥安全管理 使用环境变量注入密钥: ```bash # Linux/Mac export LOG_KEY=yourencryptionkey123 # Windows set LOG_KEY=yourencryptionkey123 ``` #### 五、日志脱敏增强 结合字段级加密[^3]: ```java logger.info("用户登录: username={} password={}", maskUsername("admin"), encryptField("P@ssw0rd")); ``` #### 六、验证步骤 1. 生成测试日志 2. 使用openssl验证文件加密状态: ```bash file logs/secure.log # 应显示加密数据 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值