我在我的java应用程序中使用log4j。
我的log4j配置文件
设置根记录器级别。
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 = $ {log.output.file}
log4j.appender.logfile.layout = org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern =% - 5p%d [%t]%c {2}: %米%N
log.output.File是指日志文件。
我在一个程序中运行多个线程,该程序将日志记录条目定期写入输出文件。如果我在程序运行时手动打开文件并编辑文件内容.log4j会停止记录。我不希望伐木停止; 我是Log4j的新手。
答案 0 :(得分:2)
根据编辑器的不同,有两种方法可以保存文件:
新文件内容首先保存到临时文件中,当所有内容都成功保存后,新文件将重命名为真实文件。这样做的好处是,如果出现IO错误,旧内容仍然存在。如果其他一些进程在中间读取原始文件,它将永远不会看到旧内容和新内容的混合。
打开原始文件,新内容直接写入文件。这样可以减少磁盘空间(因为不需要临时文件)。缺点是另一个进程可能在附加模式下打开了相同的文件(可能用于日志记录),因此当新内容被写入多个部分时,写入可能会重叠,并且文件内容已损坏。
还有很多其他后果依赖于这两种不同的方式,我现在懒得写下来。
由于这些考虑因素,gedit似乎选择了第一种方式。当然,你可以做两件事:
strace -o strace.out gedit logfile.log
,编辑文件中的内容并保存文件。退出gedit,查看文件strace.out
。搜索日志文件的名称,并查看在保存操作期间发生的系统调用(读取,打开,关闭,重命名,写入,统计,fstat)。