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>
  • 相关阅读:
    中国大概能用的NTPserver地址
    在asp.net mvc中使用PartialView返回部分HTML段
    我的学习笔记_Windows_HOOK编程 2009-12-03 11:19
    素数推断算法(高效率)
    No matching code signing identity found
    Android Bundle类
    D3D 练习小框架
    Python标准库:内置函数dict(iterable, **kwarg)
    微凉大大,教你一步一步在linux中正确的安装Xcache加速php。
    背景图片定位
  • 原文地址:https://www.cnblogs.com/c-abc/p/15432706.html
Copyright © 2011-2022 走看看