zoukankan      html  css  js  c++  java
  • 升级日志系统 log4j2 干货整理

    最新升级日志系统,
    阅读官方文档 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>
  • 相关阅读:
    Poj 2017 Speed Limit(水题)
    Poj 1316 Self Numbers(水题)
    Poj 1017 Packets(贪心策略)
    Poj 1017 Packets(贪心策略)
    Poj 2662,2909 Goldbach's Conjecture (素数判定)
    Poj 2662,2909 Goldbach's Conjecture (素数判定)
    poj 2388 Who's in the Middle(快速排序求中位数)
    poj 2388 Who's in the Middle(快速排序求中位数)
    poj 2000 Gold Coins(水题)
    poj 2000 Gold Coins(水题)
  • 原文地址:https://www.cnblogs.com/c-abc/p/15432706.html
Copyright © 2011-2022 走看看