log4j动态文件名
在项目中,对log的输出有多种多样的要求,下面具体分析一下动态log文件名输出的。
一,按照用户ID来生成log,这种情况,可以根据每个用户ID来动态生成logger。
代码如下:
import org.apache.log4j.FileAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.RollingFileAppender;
public class LoggerUtil {
public static Logger getLoggerByName(String name) {
// 生成新的Logger
// 如果已經有了一個Logger實例返回現有的
Logger logger = Logger.getLogger(name);
// 清空Appender。特別是不想使用現存實例時一定要初期化
logger.removeAllAppenders();
// 設定Logger級別。
logger.setLevel(Level.DEBUG);
// 設定是否繼承父Logger。
// 默認為true。繼承root輸出。
// 設定false後將不輸出root。
logger.setAdditivity(true);
// 生成新的Appender
FileAppender appender = new RollingFileAppender();
PatternLayout layout = new PatternLayout();
// log的输出形式
String conversionPattern = "[%d] %p %t %c - %m%n";
layout.setConversionPattern(conversionPattern);
appender.setLayout(layout);
// log输出路径
// 这里使用了环境变量[catalina.home],只有在tomcat环境下才可以取到
String tomcatPath = java.lang.System.getProperty("catalina.home");
appender.setFile(tomcatPath + "/logs/" + name + ".log");
// log的文字码
appender.setEncoding("UTF-8");
// true:在已存在log文件后面追加 false:新log覆盖以前的log
appender.setAppend(true);
// 适用当前配置
appender.activateOptions();
// 将新的Appender加到Logger中
logger.addAppender(appender);
return logger;
}
}
二,在batch程序中,通过一个设定来实现每个batch,文件名不同的设定。
log.xml定义
<param name="file" value="/opt/tuhan.crm/batch/log/${tuhan.crm.log.name}.log" />
<param name="threshold" value="debug"/>
<param name="DatePattern" value="yyyyMMdd"/>
<param name="append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MMM-dd HH:mm:ss,SSS}\t[%-5p]\t(%c:%L)\t%m%n"/>
</layout>
</appender>
log4j可以接受自定义环境变量,注意下面行【${tuhan.crm.log.name}】就是自定义环境变量
那么环境变量如何设置呢,有2种方法
1.Java中设定(在使用配置文件之前, 要在程序中声明这些变量):
2.在JVM设定
三,在batch程序中,通过多个设定来实现每个batch,文件名不同的设定。
动态的配置文件路径: (log4j可以接受URL)
PropertyConfigurator.configure(URL);
最新文章
- 前端:js
- React的第一步
- C语言中常量
- GSS4 2713. Can you answer these queries IV 线段树
- ORA-07217: sltln: environment variable cannot be evaluated及RMAN-06059
- 微服务API Gateway
- nyoj_3:多边形重心问题(计算几何)
- Effective Java 第三版——16.在公共类中使用访问方法而不是公共属性
- 使用autoc js生成文章目录(侧边)导航栏
- 自动化脚本测试,postman使用沉淀
- jmeter的几种参数化使用方法
- Perl输出复杂数据结构:Data::Dumper,Data::Dump,Data::Printer
- 如何合并列表中key相同的字典?
- luogu3188/bzoj1190 梦幻岛宝珠 (分层背包dp)
- java中的ElasticSearch搜索引擎介绍。
- .NET小笔记-NPOI读取excel内容到DataTable
- 第13月第25天 ios11 uitableview reloaddata contentsize
- Linux下onvif客户端获取ipc摄像头 GetStreamUri:rtsp地址(h264、h265)
- python中多进程+协程的使用以及为什么要用它
- vue项目创建
热门文章
- poj1419 求最大独立集
- ssi,服务器端包含,<;include file=";";>;
- bzoj 1150: [CTSC2007]数据备份Backup【链表+堆】
- centos6.5 系统-搭建lamp(php7)环境--(yum在线安装)
- Veeam对于新病毒防御的建议
- logstash | logstash &;&; logstash-input-jdbc 安装
- Median Value
- 尺取法 POJ 3601 Subsequence
- home键拦截
- url传值的长度限制解决办法