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>
  • 相关阅读:
    cas改造随笔
    数字证书KeyTool使用(第二篇)
    debug.keystore文件不存在解决办法
    SSL安全解决方案(转)
    CAS SSO:汇集配置过程中的错误解决方法
    sso笔记
    获取指定月 获取指定日期是星期几
    协同过滤推荐算法总结
    Java动态代理深入解析
    分享一个前后端分离的轻量级内容管理框架
  • 原文地址:https://www.cnblogs.com/c-abc/p/15432706.html
Copyright © 2011-2022 走看看