gpt4 book ai didi

java - 将 Log4j 重定向到特定文件

转载 作者:行者123 更新时间:2023-12-02 05:37:55 25 4
gpt4 key购买 nike

在读取和解析多个文件的批处理应用程序中,规范要求我分别输出每个文件的日志。

我该怎么做?

示例:

for(File f : allFiles) {
//TODO after this line all log should be output to "<f.getName()>.log"

LOGGER.debug('Start processing '+f.getName());

// process the file by calling librairies (JPA, spring, whatever ...)

LOGGER.debug('End processing '+f.getName());
}

因此,如果我有 3 个文件要处理,最终我想要 3 个日志文件。

到目前为止我所做的是以下类(class)。

import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;

public final class LoggerHelper {

/**
* Functional logger
*/
private static final Logger LOGGER = Logger.getLogger("BATCH_LOGGER");

/**
* Pattern for the layout of the logger
*/
private static final String PATTERN_LAYOUT = "%d{yyyy-MM-dd [HH:mm:ss]} %m%n";

/**
* Constructor
*/
private LoggerHelper() {
}

/**
* Initialize the loggers
*
* @param filename
* the name of the file where the logs will be written
* @throws IOException
* if a problem occur when instantiate a file appender
*/
public static void initLoggers(String filename) throws IOException {
// change functional appender
LOGGER.removeAllAppenders();
LOGGER.addAppender(new FileAppender(new PatternLayout(PATTERN_LAYOUT), filename));
LOGGER.setLevel(Level.DEBUG);
}

/**
* Get the batch logger
*
* @return the batch Logger
*/
public static Logger getLogger() {
return LOGGER;
}
}

但我必须用 LoggerHelper.getLogger().debug(...) 替换所有 LOGGER 调用。使用此解决方案,我无法记录框架日志。

for(File f : allFiles) {
//TODO after this line all log should be output to "<f.getName()>.log"
LoggerHelper.initLoggers(f.getName());

LoggerHelper.getLogger().debug('Start processing '+f.getName());

// process the file by calling librairies (JPA, spring, whatever ...)

LoggerHelper.getLogger().debug('End processing '+f.getName());
}

我该怎么做?

最佳答案

您已经走上了正轨。我猜你的错误是创建新的记录器。解决方案可能是将不同的附加程序添加到同一个记录器。因此,您的记录器助手只需替换附加程序(就像您在代码中所做的那样):

private static final class LoggerHelper {

private static final String PATTERN_LAYOUT = "%d{yyyy-MM-dd [HH:mm:ss]} %m%n";

private static final Layout LAYOUT = new PatternLayout(PATTERN_LAYOUT);

public static final void setFileOutputOfLogger(Logger log, String fileName) throws IOException {
log.removeAllAppenders();
log.addAppender(new FileAppender(LAYOUT, fileName));
}
}

您可以在循环中调用一次。

Logger log = Logger.getLogger(FileStuff.class);

for(File f : allFiles) {
LoggerHelper.setFileOutputOfLogger(log, f.getName());

所有框架输出都不会被触及。

关于java - 将 Log4j 重定向到特定文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24806855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com