首页 文章

当我打开/编辑文件时,Log4j停止登录文件(文件附加程序)?

提问于
浏览
0

我在我的java应用程序中使用log4j .

我的log4j配置文件

设置根 Logger 级别 . log4j.rootLogger = WARN,logfile log4j.appender.logfile.MaxFileSize = 20MB备份文件log4j.appender.logfile.MaxBackupIndex = 2 log4j.appender.logfile = org.apache.log4j.RollingFileAppender log4j.appender.logfile.File = $ log4j.appender.logfile.layout = org.apache.log4j.PatternLayout log4j.appender.logfile.layout.ConversionPattern =% - 5p%d [%t]%c {2}:%m%n

log.output.File refers to the logging File .

我在一个程序中运行多个线程,该程序将日志记录条目定期写入输出文件 . 如果我在程序运行时手动打开文件并编辑文件内容.log4j会停止记录 . 我不希望伐木停止;我是Log4j的新手 .

1 回答

  • 2

    根据编辑器的不同,有两种方法可以保存文件:

    • 新文件内容首先保存到临时文件中,当所有内容都成功保存后,新文件将重命名为真实文件 . 这样做的好处是,如果出现IO错误,旧内容仍然存在 . 如果其他进程在中间读取原始文件,它将永远不会看到旧内容和新内容的混合 .

    • 打开原始文件,新内容直接写入文件 . 这样可以减少磁盘空间(因为不需要临时文件) . 缺点是另一个进程可能在附加模式下打开了相同的文件(可能用于记录),因此当新内容被写入多个部分时,写入可能会重叠,并且文件内容已损坏 .

    还有很多其他后果依赖于这两种不同的方式,我现在懒得写下来 .

    由于这些考虑,gedit似乎选择了第一种方式 . 当然,你可以做两件事:

    • 检查gedit的源代码,尤其是将缓冲区保存到文件的函数 .

    • 运行 strace -o strace.out gedit logfile.log ,编辑文件中的内容并保存文件 . 退出gedit,看看文件 strace.out . 搜索日志文件的名称,并查看在保存操作期间发生的系统调用(读取,打开,关闭,重命名,写入,统计,fstat) .

相关问题