• 动态配置log4j2.xml日志输出文件的位置


    目标:根据启动jar时传进main()的参数动态修改日志位置

    一、修改启动项 

    MainMapLookup.setMainArguments(args);
    注:不要在lookup设置之前初始化log(如:
    private static final Logger log = LoggerFactory.getLogger(HttpServer.class);)
     1   public static void main(String[] args) throws InterruptedException, ServletException {
     2         // 设置log文件夹
     3         MainMapLookup.setMainArguments(args);
     4 
     5         // 读配置文件并启动
     6         try {
     7             String confPathName = args[0];
     8             // 读取jar外的配置文件
     9             InputStream in = new BufferedInputStream(new FileInputStream(confPathName+ "/conf.properties"));
    10             config.load(in);
    11         } catch (Exception e) {
    12             e.printStackTrace();
    13         }
    14         new HttpServer().start();
    15     }

    二、设置log4j2.xml

      ${main:0}

      

    lo4j2.xml 代码如下

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 
     3 <!--
     4     status : 这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出
     5     monitorInterval : Log4j能够自动检测修改配置文件和重新配置本身, 设置间隔秒数。
     6 -->
     7 <Configuration status="DEBUG" monitorInterval="6000">
     8 
     9     <Properties>
    10         <!-- 配置日志文件输出目录 -->
    11         <Property name="LOG_HOME" value="log/log_${main:0}" />
    12         <Property name="LOG_NAME">http</Property>
    13     </Properties>
    14 
    15     <Appenders>
    16 
    17         <!--这个输出控制台的配置-->
    18         <Console name="Console" target="SYSTEM_OUT">
    19             <!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
    20             <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
    21             <!-- 输出日志的格式 -->
    22             <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
    23         </Console>
    24 
    25         <!-- DEBUG日志格式 -->
    26         <RollingFile name="service_debug_appender" fileName="${LOG_HOME}/${LOG_NAME}.log"
    27                      filePattern="${LOG_HOME}/${LOG_NAME}.log.%d{yyyy-MM-dd}-%i" append="true" immediateFlush="true">
    28             <Filters>
    29                 <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
    30             </Filters>
    31             <!--
    32                 %d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间
    33                 %p : 日志输出格式
    34                 %c : logger的名称
    35                 %m : 日志内容,即 logger.info("message")
    36                 %n : 换行符
    37                 %C : Java类名
    38                 %L : 日志输出所在行数
    39                 %M : 日志输出所在方法名
    40                 hostName : 本地机器名
    41                 hostAddress : 本地ip地址
    42              -->
    43             <PatternLayout>
    44                 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M -- %msg%xEx%n</pattern>
    45             </PatternLayout>
    46             <Policies>
    47                 <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
    48                 <SizeBasedTriggeringPolicy size="500 MB"/>
    49             </Policies>
    50         </RollingFile>
    51 
    52 
    53         <!-- ERROR日志格式 -->
    54         <RollingFile name="service_error_appender" fileName="${LOG_HOME}/${LOG_NAME}.error"
    55                      filePattern="${LOG_HOME}/${LOG_NAME}.error.%d{yyyy-MM-dd}-%i" append="true" immediateFlush="true">
    56             <Filters>
    57                 <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
    58             </Filters>
    59             <PatternLayout>
    60                 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M -- %msg%xEx%n</pattern>
    61             </PatternLayout>
    62             <Policies>
    63                 <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
    64                 <SizeBasedTriggeringPolicy size="500 MB"/>
    65             </Policies>
    66         </RollingFile>
    67     </Appenders>
    68 
    69     <Loggers>
    70         <!-- 配置日志的根节点 -->
    71         <Root level="debug">
    72             <appender-ref ref="Console"/>
    73             <appender-ref ref="service_debug_appender"/>
    74             <appender-ref ref="service_error_appender"/>
    75         </Root>
    76 
    77         <!-- 第三方日志系统 -->
    78         <logger name="org.springframework" level="INFO"/>
    79         <logger name="io.netty" level="warn"/>
    80         <logger name="org.apache.http" level="warn"/>
    81         <logger name="org.mongodb.driver" level="INFO"/>
    82         <logger name="org.jboss.netty" level="warn"/>
    83         <logger name="org.springframework.data.redis" level="INFO"/>
    84 
    85     </Loggers>
    86 
    87 </Configuration>
    View Code

    三、结果

      log 文件夹下产生log_${main:0} 文件夹,下面放着系统的日志

  • 相关阅读:
    day2-元组 列表-赋值和深浅拷贝
    day1-bytes类型 三元运算 进制
    DAY02
    DAY02
    Python格式化、显示颜色
    DAY02
    DAY02
    DAY02
    DAY02
    DAY02
  • 原文地址:https://www.cnblogs.com/milicool/p/8656264.html
Copyright © 2020-2023  润新知