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

一、修改启动项

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

二、设置log4j2.xml

  ${main:0}

  

lo4j2.xml 代码如下

 <?xml version="1.0" encoding="UTF-8"?>

 <!--
status : 这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出
monitorInterval : Log4j能够自动检测修改配置文件和重新配置本身, 设置间隔秒数。
-->
<Configuration status="DEBUG" monitorInterval="6000"> <Properties>
<!-- 配置日志文件输出目录 -->
<Property name="LOG_HOME" value="log/log_${main:0}" />
<Property name="LOG_NAME">http</Property>
</Properties> <Appenders> <!--这个输出控制台的配置-->
<Console name="Console" target="SYSTEM_OUT">
<!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 输出日志的格式 -->
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</Console> <!-- DEBUG日志格式 -->
<RollingFile name="service_debug_appender" fileName="${LOG_HOME}/${LOG_NAME}.log"
filePattern="${LOG_HOME}/${LOG_NAME}.log.%d{yyyy-MM-dd}-%i" append="true" immediateFlush="true">
<Filters>
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<!--
%d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间
%p : 日志输出格式
%c : logger的名称
%m : 日志内容,即 logger.info("message")
%n : 换行符
%C : Java类名
%L : 日志输出所在行数
%M : 日志输出所在方法名
hostName : 本地机器名
hostAddress : 本地ip地址
-->
<PatternLayout>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M -- %msg%xEx%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="500 MB"/>
</Policies>
</RollingFile> <!-- ERROR日志格式 -->
<RollingFile name="service_error_appender" fileName="${LOG_HOME}/${LOG_NAME}.error"
filePattern="${LOG_HOME}/${LOG_NAME}.error.%d{yyyy-MM-dd}-%i" append="true" immediateFlush="true">
<Filters>
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<PatternLayout>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M -- %msg%xEx%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="500 MB"/>
</Policies>
</RollingFile>
</Appenders> <Loggers>
<!-- 配置日志的根节点 -->
<Root level="debug">
<appender-ref ref="Console"/>
<appender-ref ref="service_debug_appender"/>
<appender-ref ref="service_error_appender"/>
</Root> <!-- 第三方日志系统 -->
<logger name="org.springframework" level="INFO"/>
<logger name="io.netty" level="warn"/>
<logger name="org.apache.http" level="warn"/>
<logger name="org.mongodb.driver" level="INFO"/>
<logger name="org.jboss.netty" level="warn"/>
<logger name="org.springframework.data.redis" level="INFO"/> </Loggers> </Configuration>

三、结果

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

动态配置log4j2.xml日志输出文件的位置的更多相关文章

  1. 使用java代码动态配置与xml文件结合的方式使用mybatis-generator生成代码配置

    1.使用java代码动态配置与xml文件结合的方式使用mybatis-generator生成代码配置 2.上代码:在resources目录下新建:generatorConfiguration.xml文 ...

  2. Java自定义日志输出文件

    Java自定义日志输出文件 日志的打印,在程序中是必不可少的,如果需要将不同的日志打印到不同的地方,则需要定义不同的Appender,然后定义每一个Appender的日志级别.打印形式和日志的输出路径 ...

  3. log4j2.xml日志文件设置文件路径

    笔者最近的项目里使用了spring,spring通过web.xml配置监听器,在web启动时web.root系统变量,以供其他变量使用,例如 在属性文件里使用${web.root}以取得完整路径,项目 ...

  4. flask配置日志输出文件

    1.flask可以通过日志库来指点日志输出的路径, 配置日志输出的连接:www.gaodin.com

  5. 使用Log4j2实现日志输出

    一.说明 如果是使用slf4j规范的,请先引用: <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-s ...

  6. SpringBoot 6.SpringBoot使用 Log4j2 实现日志输出

    一.添加 Log4j2 的依赖 <!-- 引入 log4j2 必须排除 logging --> <dependency> <groupId>org.springfr ...

  7. 一次鞭辟入里的 Log4j2 异步日志输出阻塞问题的定位

    一次鞭辟入里的 Log4j2 日志输出阻塞问题的定位 问题现象 线上某个应用的某个实例突然出现某些次请求服务响应极慢的情况,有几次请求超过 60s 才返回,并且通过日志发现,服务线程并没有做什么很重的 ...

  8. Qt之日志输出文件

    在Qt开发过程当中经常使用qDebug等一些输出来调试程序,但是到了正式发布的时候,都会被注释或者删除,采用日志输出来代替.     做过项目的童鞋可能都使用过日志功能,以便有异常错误能够快速跟踪.定 ...

  9. Qt 日志输出文件

    在Qt开发过程当中经常使用qDebug等一些输出来调试程序,但是到了正式发布的时候,都会被注释或者删除,采用日志输出来代替.     做过项目的童鞋可能都使用过日志功能,以便有异常错误能够快速跟踪.定 ...

随机推荐

  1. How to solve multi-version conflict of OpenCV or PCL on ROS kinetic?

    Solve multi-version conflict prepare: make sure you know which version is in your machine: dpk-confi ...

  2. 快速找出故障机器(single number)

    简单起见,假设每个机器存储一个标号为ID的记录(ID是小于十亿的整数),假设每份数据都保存两个备份,这样就有两个机器储存了同样的数据. 1.在某个时间,如果得到一个数据文件ID的列表,是否能够快速地找 ...

  3. 牛客国庆集训day5 G 贵族用户 (模拟)

    链接:https://www.nowcoder.com/acm/contest/205/G来源:牛客网 题目描述 终于活成了自己讨厌的样子. 充钱能让你变得更强. 在暖婊这个游戏里面,如果你充了x元钱 ...

  4. POJ1664 放苹果 (母函数)

    放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 37515   Accepted: 23090 Description ...

  5. anglarJs分页

    首先在页面引入分页插件 <script src="../plugins/angularjs/pagination.js"></script> <lin ...

  6. react 中文文档案例七 (温度计)

    const scaleNames = { c: 'Celsius', f: 'Fahrenheit' }; function toCelsius(fahrenheit) { ) * / ; } fun ...

  7. SprimgMVC学习笔记(六)—— 全局异常的处理

    一.处理思路 springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑. 系统中异常包括两类:预期异常和运行时异常RuntimeExcept ...

  8. Mysql tips 功能...

    1. mysql  GROUP_CONCAT() 使用 排序... SELECT shop.id, shop.name, shop.user_id, shop.address, shop.map_lo ...

  9. IDEA 文档注释 乱码 终极... 解决方案

    idea bin 目录 下           phpstorm64.exe.vmoptions  最后一行添加  : -Dfile.encoding=UTF-8

  10. Python的主要应用领域及应用场景

    参考链接:https://www.cnblogs.com/kaid/p/9016673.html 正文: Python简介 Python(英国发音:/ˈpaɪθən/美国发音:/ˈpaɪθɑːn/), ...