log4j如何根据变量动态生成文件名

网友投稿 749 2022-09-06


log4j如何根据变量动态生成文件名

目录根据变量动态生成文件名简单的log4j设置简单实例log4j动态文件名一、按照用户ID来生成log二、在batch程序中,通过一个设定来实现每个batch三、在batch程序中,通过多个设定来实现每个batch

根据变量动态生成文件名

简单的log4j设置

一般情况下,log4j配置文件简单的设置为:

log4j.rootLogger=debug,stdout,R

log4j.appender.R=org.apache.log4j.DailyRollingFileAppenhttp://der

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需求。

如果需要根据程序中的变量,将日志打http://到不同的文件中时,(如:根据某个ID,这样对于大量日志时更加容易查找到想要的日志)

只需在java代码中过去到所配置的FileAppender,然后serFile来修改文件名。

java代码如下:

FileAppender appender = (FileAppender) log.getRootLogger().getAppender("R");

appender.setFile(filePath/fileName);

appender.activateOptions();

日志打印前,设置以上代码,即可。

注意:加上 appender.activateOptions(); 可以使得后面打印的日志不会将之前的日志覆盖。

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定义

value="%d{yyyy-MMM-dd HH:mm:ss,SSS}\t[%-5p]\t(%c:%L)\t%m%n"/>

log4j可以接受自定义环境变量,注意下面行【${tuhan.crm.log.name}】就是自定义环境变量

那么环境变量如何设置呢,有2种方法

1.Java中设定(在使用配置文件之前, 要在程序中声明这些变量):

System.setProperty("tuhan.crm.log.name", "batch001");

2.在JVM设定

java -Xmx512M -Dtuhan.crm.log.name=batch001 com.stu.TestBTOzvDwBuatch001

三、在batch程序中,通过多个设定来实现每个batch

文件名不同的设定。

动态的配置文件路径: (log4j可以接受URL)

java.net.URL URL = consandpatt.class.getResource("/com/test/java/log/config/log4jConfig.properties");

PropertyConfigurator.configure(URL);


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:python 数据类型-字符串-对象和方法(python和java哪个更值得学)
下一篇:three.js obj转js
相关文章

 发表评论

暂时没有评论,来抢沙发吧~