Python 官方文档:入门教程 => 点击学习
目录根据变量动态生成文件名简单的log4j设置简单实例log4j动态文件名一、按照用户ID来生成log二、在batch程序中,通过一个设定来实现每个batch三、在batch程序中,
一般情况下,log4j配置文件简单的设置为:
log4j.rootLogger=debug,stdout,R
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=test.log
log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.DatePattern = '.'yyyy-MM-dd
log4j.appender.R.layout=ex.log4j.ExPatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %c %5p - %m%n
log4j.appender.R.MaxBackupIndex=1
java代码如下:
public class LogTest {
static Logger log = Logger.getLogger(LogTest.class);
public static void main(String[] args) throws IOException {
PropertyConfigurator.configure("log4j.properties");
log.debug("helo");
}
}
一般如上设置即可满足简单的log4j需求。
如果需要根据程序中的变量,将日志打到不同的文件中时,(如:根据某个ID,这样对于大量日志时更加容易查找到想要的日志)
只需在java代码中过去到所配置的FileAppender,然后serFile来修改文件名。
java代码如下:
FileAppender appender = (FileAppender) log.getRootLogger().getAppender("R");
appender.setFile(filePath/fileName);
appender.activateOptions();
日志打印前,设置以上代码,即可。
注意:加上 appender.activateOptions(); 可以使得后面打印的日志不会将之前的日志覆盖。
在项目中,对log的输出有多种多样的要求,下面具体分析一下动态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;
}
}
文件名不同的设定。
log.xml定义
<appender name="daily" class="org.apache.log4j.DailyRollingFileAppender">
<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}】就是自定义环境变量
<param name="file" value="/opt/tuhan.crm/batch/log/${tuhan.crm.log.name}.log" />
那么环境变量如何设置呢,有2种方法
1.Java中设定(在使用配置文件之前, 要在程序中声明这些变量):
System.setProperty("tuhan.crm.log.name", "batch001");
2.在JVM设定
java -Xmx512M -Dtuhan.crm.log.name=batch001 com.stu.TestBatch001
文件名不同的设定。
动态的配置文件路径: (log4j可以接受URL)
java.net.URL URL = consandpatt.class.getResource("/com/test/java/log/config/log4jConfig.properties");
PropertyConfigurator.configure(URL);
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
--结束END--
本文标题: log4j如何根据变量动态生成文件名
本文链接: https://lsjlt.com/news/160968.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0