Java 每次在log4j中重写相同的日志文件
我有一个产品,我使用它运行我的应用程序(我已经编写)。它是一个访问单个日志文件的多线程应用程序。我面临的问题是,每次启动应用程序时,都会附加日志文件。只有在重新启动产品时,才会创建新的日志文件。但我希望每次应用程序运行时,我只希望日志文件中有新内容 下面是代码Java 每次在log4j中重写相同的日志文件,java,logging,log4j,Java,Logging,Log4j,我有一个产品,我使用它运行我的应用程序(我已经编写)。它是一个访问单个日志文件的多线程应用程序。我面临的问题是,每次启动应用程序时,都会附加日志文件。只有在重新启动产品时,才会创建新的日志文件。但我希望每次应用程序运行时,我只希望日志文件中有新内容 下面是代码 //Log4j initialization public void initLog4j() throws MyException { if (logfile != null ){ myLog4j = Logge
//Log4j initialization
public void initLog4j() throws MyException {
if (logfile != null ){
myLog4j = Logger.getLogger("MY_LOG");
try {
appender = new FileAppender(new PatternLayout("%m%n"),logfile.getAbsolutePath(),false);
appender.setAppend(false);
myLog4j.addAppender(appender);
myLog4j.setLevel((Level) Level.DEBUG);
} catch (IOException e) {
throw new MyException(104, logfile.getAbsolutePath());
}
}
//Stopping to write to log4j
public void stop() {
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
writeToLog4j(INFO,new StringBuilder(name).append(" stop: ").append(dateFormat.format(new Date())).toString(),true);
}
到目前为止,我一直在尝试删除该文件,但由于FileDescriptor未发布,因此没有删除该文件。所以我在stop()函数中添加了以下代码
生成此新文件或覆盖现有文件后。但每次我的应用程序运行时,每次我尝试写入日志文件时都会收到下面的消息
log4j:尝试附加到名为[null]的已关闭附加程序时出错
请有人帮我解决这个问题。错误消息表明您必须在关闭appender后删除它。
log4j似乎不会自动执行此操作。以编程方式配置log4j有什么原因吗?没有具体原因。我觉得很容易。我不太了解属性文件以及如何在log4j中使用它们。用属性文件可以解决这个问题吗??如果是,如何创建?仍然不清楚何时创建新的日志文件。“当我重新启动产品”和“每次我的应用程序运行”之间的区别是什么……我有一个插件产品,我为它编写了一个插件。现在我正在测试我的插件。要运行我的应用程序,我需要启动插件产品。如果每次创建新日志文件时都重新启动此插件产品。但不是在我刚运行插件(应用程序)时,您在调用close()并将其添加到myLog4j后启动了一个新的appender吗?另外,我想你应该在关闭appender后将其移除。不太确定,因此评论,不回答。
if(null != appender) {
appender.close();
}