在我的应用程序中,我读入了一个输入文件(例如myFile1.txt)并创建了一个具有相同名称的输出文件(例如myFile2log)。要点是输入文件将在java应用程序中读取,而不是作为命令行参数给出。因此,需要在应用程序中设置一个appender,例如
public class Example {
private static final Logger LOG = Logger.getLogger(Example.class);
public Example() throws IOException {
FileAppender appender = new DailyRollingFileAppender(new PatternLayout(
PatternLayout.DEFAULT_CONVERSION_PATTERN), "yourfilename.log",
"'.'yyyy-MM-dd");
LOG.addAppender(appender);
LOG.setLevel((Level) Level.DEBUG);
LOG.debug("blabla");
new RandomClass();
}
public static void main(String[] args) throws IOException {
new Example();
}
}
public class RandomClass {
private static final Logger LOG = Logger.getLogger(RandomClass.class);
public RandomClass() {
LOG.debug("hello Randomclass");
}
}
问题在于:如果我执行上述操作,则自定义文件appender仅适用于定义了fileappender的特定类,但不适用于任何其他类。因此,“RandomClass”的输出不会写入此日志文件,但这是必需的。我怎样才能做到这一点?
答案 0 :(得分:1)
您可以在类路径中使用log4j.properties文件,然后只需在所有类中初始化logger。
private static final Logger LOG = Logger.getLogger(Example.class);
构造函数中不需要和Appender。您的属性文件应包含
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=yourfilename.log
log4j.appender.R.MaxFileSize=2048KB
答案 1 :(得分:1)
如果您想动态设置appender,您应该尝试将新的appender设置为根记录器:
Logger logger = Logger.getRootLogger();
FileAppender appender = new DailyRollingFileAppender(new PatternLayout(
PatternLayout.DEFAULT_CONVERSION_PATTERN), "yourfilename.log", "'.'yyyy-MM-dd");
logger.addAppender(appender)