ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

升级日志系统 log4j2 干货整理

2021-10-21 12:04:48  阅读:203  来源: 互联网

标签:name 配置文件 log4j2 rollingFileAppender 干货 context 日志 config


最新升级日志系统,
阅读官方文档 https://logging.apache.org/log4j/2.x/index.html
参考了一些百度资料,整理一些使用技巧 干货记录

目前流行应用化,服务化,所以未做web上调试。
**需求,指定log4j2的配置文件启动, 修改某些Appender, 一份log4j2配置文件 多应用使用变更日志文件。**

一,java代码指定配置文件有几种方式  

方式一:需要在所有 logger申明前处理

ConfigurationSource source = new ConfigurationSource(new FileInputStream(path));  
 Configurator.initialize(null, source);

方式二:推荐使用 没有方式一不生效的问题

 LoggerContext context=(LoggerContext)LogManager.getContext(false);
            context.setConfigLocation(new File(path).toURI());//这将强制重新配置

二,程序初始时指定 Appender的日志文件

初始化前设置变量名, 配置文件使用  ${main:0:-} 0为参数下标 -后接默认值

MainMapLookup.setMainArguments(String.valueOf(port));
<property name="API_NAME">${main:0:-}name</property>

 

 

其他方式 重context中获取 在修改,不建议使用。 使用后 monitorInterval监测配置的功能估计 用不了。

          Configuration config=context.getConfiguration();
            if (config.getAppender("API") != null) {
                RollingRandomAccessFileAppender rollingFileAppender = (RollingRandomAccessFileAppender)config.getAppender("API");
                rollingFileAppender.stop();
                
                config.getLoggers().forEach((key,value)->{value.removeAppender("API"); });//从logger 中移除
                
                RollingRandomAccessFileAppender appender = RollingRandomAccessFileAppender.newBuilder()
                        .setName("API")
                        .withFileName (rollingFileAppender.getFileName().replace("name.log","name"+port+".log"))
                        .withFilePattern(rollingFileAppender.getFilePattern().replace("name-","name"+port+"-"))
                        .withPolicy(rollingFileAppender.getManager().getTriggeringPolicy())
                        .setLayout(rollingFileAppender.getLayout())
                        .build();
                appender.start();
                //重新加入logger
                config.getLoggers().forEach((key,value)->{
                    value.addAppender(appender, config.getRootLogger().getLevel(), null);
                });
                context.updateLoggers(config);
            }

 

 

 

三,使用。

  1. 采用java 指定xml配置文件初始化log4j2
  2. 开启 monitorInterval 便于生产修改日志级别,等。
  3. 初始化前 使用 ${main:0:-} 动态指定日志文件名。
  4. 开启异步日志后 includeLocation 设置false 性能会好很多。 需要时再修改配置文件 通过monitorInterval  来生效
<?xml version="1.0" encoding="UTF-8"?>
<!-- #   1. DEBUG 2. INFO 3. WARN 4. ERROR 5. FATAL (the most serious) -->
<Configuration status="WARN" monitorInterval="60" >

    <properties>
        <property name="LOG_HOME">/data/xxxx/logs</property>
        <property name="API_NAME">${main:0:-}xxx</property>
    </properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%date{HH:mm:ss.SSS} [%thread] %level %logger:%line %msg%n" />
        </Console>
         
        <RollingRandomAccessFile name="API" fileName="${LOG_HOME}/${API_NAME}.log" filePattern="${LOG_HOME}/${API_NAME}-%d{yyyy-MM-dd}-%i.log.gz">
            <PatternLayout pattern="%date{HH:mm:ss.SSS} [%thread] %level %logger:%line %msg%n" />
            <Policies>
                <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
            </Policies>
            <DefaultRolloverStrategy max="20" />
        </RollingRandomAccessFile>
    </Appenders>

    <Loggers>
        <AsyncRoot level="DEBUG" ><!-- includeLocation="true" 慢 30-100倍 -->
            <AppenderRef ref="Console" />
            <AppenderRef ref="API" />
        </AsyncRoot>
        <Logger name="org.apache.http"  level="info" additivity="false">
            <AppenderRef ref="API" />
        </Logger>
         
    </Loggers>
</Configuration>

 

标签:name,配置文件,log4j2,rollingFileAppender,干货,context,日志,config
来源: https://www.cnblogs.com/c-abc/p/15432706.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有