Log4j2介绍和特性实例(七)--代码中指定日志文件的名字

有的时候,可能会希望通过程序代码,动态指定日志文件的名字。

在下面的例子中,我使用JS脚本文件的名字来命名日志文件

	/**
	 * 日志名字根据JS文件名,动态指定
	 * 
	 * @param JSName 是JS脚本的名字
	 * @param configPath log4j2.xml的路径
	 * 
	 */
	public void setLogName(String JSName, String configPath){
		String userPath = System.getProperty("user.dir");
//		System.out.println(userPath);
		System.setProperty("logFileName", userPath + "\\" + JSName + ".log");//logFileName在log4j2.xml中使用
		System.out.println(System.getProperty("logFileName").toString());
		
		LoggerContext ctx = (LoggerContext)LogManager.getContext(false);
		
		File filePath = new File(configPath);
		URI configURI = filePath.toURI();
		System.out.println("configURI = " + configURI.toString());//configURI = file:/E:/workspace4J2EE/KMSTool/log4j2.xml
		ctx.setConfigLocation(configURI);

//		ctx.reconfigure();//如果log4j2.xml在默认路径(src目录)下的情况,就不用获取xml文件的路径了
	}
上面的代码是针对配置文件log4j2.xml不在配置文件默认路径src目录下情况;如果配置文件在src目录下的话,只需要简单的设置一下ctx.reconfigure()就可以完成日志文件名的动态指定。


在log4j2.xml配置文件中,文件名fileName= "${sys:logFileName}"

<?xml version="1.0" encoding="UTF-8"?> 
<configuration status="error" monitorInterval="30"> 
<Properties>
	<Property name="log.path">.</Property>
</Properties>

<appenders>
	<RollingFile name="debugLog" fileName= "${sys:logFileName}"
	             filePattern="${sys:logFileName}-%i.log">
        <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
		<PatternLayout pattern="[%-5level][%d{yyyy-MM-dd HH:mm:ss}][%F:%L] - %m%n" />
		
		<SizeBasedTriggeringPolicy size="100MB" />
		<!-- DefaultRolloverStrategy 中的参数max,可以限制 SizeBasedTriggeringPolicy中size超出后,只保留max个存档-->
		<DefaultRolloverStrategy max="20"/>
	</RollingFile>
		
</appenders> 

<loggers>
	<root level="trace">
		<appender-ref ref="debugLog" />
	</root>  
</loggers>
</configuration> 
下一篇将介绍log4j2暂时不支持的内容。


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值