首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RollingFileAppender以编程方式设置RollingPolicy

RollingFileAppender以编程方式设置RollingPolicy
EN

Stack Overflow用户
提问于 2011-05-03 06:13:07
回答 5查看 11.1K关注 0票数 7

出于某些原因,我不得不以编程方式配置一个log4j附加器。

我想使用RollingFileAppender,这样我就可以控制保存在周围的最大文件数。

另外,我想将这个附加器设置为使用TimeBasedRollingPolicy,因为它将自动负责压缩滚动的文件。

问题是我看不到一种通过代码设置它的方法。通常通过属性文件设置RollingFileAppender时,您将拥有:

代码语言:javascript
复制
log4j.appender.LOGFILE.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy

必须有一种方法来设置这个...?有没有人可以通过javadoc和类方法的基本月食反射来揭示一些问题的解决方案:

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-05-03 06:21:23

要使用rolling.RollingFileAppender,您可能需要log4j伴奏/附加组件。

http://logging.apache.org/log4j/companions/index.html

编辑:

下面是允许您设置滚动策略的api参考。

http://logging.apache.org/log4j/companions/apidocs/org/apache/log4j/rolling/RollingFileAppender.html

票数 4
EN

Stack Overflow用户

发布于 2011-11-24 01:13:08

下面是我如何覆盖log4j.xml文件,为名为"TheLoggerName“的记录器设置一个新的文件名,该记录器的RollingFileAppender名为"TheAppenderName”。您可能可以基于此作为您的解决方案的基础。

代码语言:javascript
复制
import org.apache.log4j.Logger;
import org.apache.log4j.rolling.RollingFileAppender;
import org.apache.log4j.rolling.TimeBasedRollingPolicy;

...

private static void afunction(String pTheNewFileName) {

Logger logger = Logger.getLogger("TheLoggerName");
RollingFileAppender rfappender = (RollingFileAppender) logger.getAppender("TheAppenderName");
TimeBasedRollingPolicy timeBasedRollingPolicy = (TimeBasedRollingPolicy) rfappender.getRollingPolicy();
timeBasedRollingPolicy.setFileNamePattern("newfilename%d{yyyy-MM}");
timeBasedRollingPolicy.activateOptions();
rfappender.activateOptions();
}
票数 5
EN

Stack Overflow用户

发布于 2013-09-26 20:34:51

这是基于cquezel的答案。更改活动文件名上的文件名以及策略文件名模式为我做了这件事。如果不更改活动文件名,则在发生轮换之前,当前日志是不可见的。在本例中,我只是将日志文件的名称从"Launcher“改为”Launcher“。

代码语言:javascript
复制
private static final String LOG4J_ROLLING_FILE_NAME_TOKEN = "Launcher";

/*
 * Change the name of the the log file as configured through log4j.xml
 * by replacing the placeholder file name token ("Launcher") with the
 * a new "actionName".
 */
private static void log4jConfig(String actionName) {

    org.apache.log4j.Logger rootLogger = LogManager.getRootLogger();
    RollingFileAppender fileAppender = (RollingFileAppender)rootLogger.getAppender("fileAppender");

    // <param name="FileNamePattern" value="/var/log/Launcher.log.%d{yyyy-MM-dd}.gz"/>
    String currentLogFile = fileAppender.getFile();
    String newLogPattern = currentLogFile.replace(LOG4J_ROLLING_FILE_NAME_TOKEN, actionName);
    fileAppender.setFile(newLogPattern);

    TimeBasedRollingPolicy timeBasedRollingPolicy = (TimeBasedRollingPolicy) fileAppender.getRollingPolicy();
    String fileNamePattern = timeBasedRollingPolicy.getFileNamePattern();
    String newFileNamePattern = fileNamePattern.replace(LOG4J_ROLLING_FILE_NAME_TOKEN, actionName);;
    timeBasedRollingPolicy.setFileNamePattern(newFileNamePattern);
    timeBasedRollingPolicy.activateOptions();

    fileAppender.activateOptions();

    LOG.info("  Redirected launcher log output to log pattern: " + newFileNamePattern);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5863054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档