• 第一步,引入最新的apache log4j 2.15.0的jar包
  • <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
    <dependency>
    	<groupId>org.apache.logging.log4j</groupId>
    	<artifactId>log4j-core</artifactId>
    	<version>2.15.0</version><!--$NO-MVN-MAN-VER$-->
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
    <dependency>
    	<groupId>org.apache.logging.log4j</groupId>
    	<artifactId>log4j-api</artifactId>
    	<version>2.15.0</version><!--$NO-MVN-MAN-VER$-->
    </dependency>
    
  • log4j2的配置文件
  • <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="WARN">
        <!--全局参数-->
        <Properties>
            <Property name="pattern">%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n</Property>
            <Property name="logDir">/data/logs/dust-server</Property>
        </Properties>
        <Loggers>
            <Root level="INFO">
                <AppenderRef ref="console"/>
                <AppenderRef ref="rolling_file"/>
            </Root>
        </Loggers>
        <Appenders>
            <!-- 定义输出到控制台 -->
            <Console name="console" target="SYSTEM_OUT" follow="true">
                <!--控制台只输出level及以上级别的信息-->
                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
                <PatternLayout>
                    <Pattern>${pattern}</Pattern>
                </PatternLayout>
            </Console>
            <!-- 同一来源的Appender可以定义多个RollingFile,定义按天存储日志 -->
            <RollingFile name="rolling_file"
                         fileName="${logDir}/dust-server.log"
                         filePattern="${logDir}/dust-server_%d{yyyy-MM-dd}.log">
                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
                <PatternLayout>
                    <Pattern>${pattern}</Pattern>
                </PatternLayout>
                <Policies>
                    <TimeBasedTriggeringPolicy interval="1"/>
                </Policies>
                <!-- 日志保留策略,配置只保留七天 -->
                <DefaultRolloverStrategy>
                    <Delete basePath="${logDir}/" maxDepth="1">
                        <IfFileName glob="dust-server_*.log" />
                        <IfLastModified age="7d" />
                    </Delete>
                </DefaultRolloverStrategy>
            </RollingFile>
        </Appenders>
    </Configuration>
    
  • 编写一个测试类
  • public class Log4j2Demo {
        private static  final Logger LOGGER=LogManager.getLogger();
        public static void main(String[] args) {
            String username="${java:os}";
            LOGGER.info("Hello, {}",username);
    

    log4j2快速修复的措施

  • 临时解决方案
  • 设置jvm参数 “-Dlog4j2.formatMsgNoLookups=true”
    设置“log4j2.formatMsgNoLookups=True”
    系统环境变量“FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS”设置为“true”
    关闭对应应用的网络外连,禁止主动外连
    
  • 举一个设置环境变量的方法
  • # vi /etc/proflie
    // 在最后追加
    # export FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS=true
    // 保存退出
    #  esc + wq
    // 让环境变量立即生效需要执行如下命令
    # source /etc/proflie
    // 一般需要重新注销系统才能生效,最后可以通过echo命令测试一下:  
    # echo $PATH
    

    https://blog.csdn.net/lumingzhu111/article/details/121871114
    https://jingyan.baidu.com/article/b87fe19e6b408852183568e8.html