出于某些原因,我不得不以编程方式配置一个log4j附加器。
我想使用RollingFileAppender,这样我就可以控制保存在周围的最大文件数。
另外,我想将这个附加器设置为使用TimeBasedRollingPolicy,因为它将自动负责压缩滚动的文件。
问题是我看不到一种通过代码设置它的方法。通常通过属性文件设置RollingFileAppender时,您将拥有:
log4j.appender.LOGFILE.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy必须有一种方法来设置这个...?有没有人可以通过javadoc和类方法的基本月食反射来揭示一些问题的解决方案:
发布于 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
发布于 2011-11-24 01:13:08
下面是我如何覆盖log4j.xml文件,为名为"TheLoggerName“的记录器设置一个新的文件名,该记录器的RollingFileAppender名为"TheAppenderName”。您可能可以基于此作为您的解决方案的基础。
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();
}发布于 2013-09-26 20:34:51
这是基于cquezel的答案。更改活动文件名上的文件名以及策略文件名模式为我做了这件事。如果不更改活动文件名,则在发生轮换之前,当前日志是不可见的。在本例中,我只是将日志文件的名称从"Launcher“改为”Launcher“。
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);
}https://stackoverflow.com/questions/5863054
复制相似问题