问题描述
我在写一个对log4net进行性能测试的程序,现在出了个问题:多进程写Log时,会产生文件锁被独占无法访问的异常(其他进程使用中),但是程序不会退出,而是继续写后面的Log。最终结果是发生错误的Log内容丢失,但已输出的log内容显示已经是多进程在交替写log.(当然,我已经配置了最小锁定模型<lockingModeltype="log4net.Appender.FileAppender+MinimalLock"/>),不知道我叙述清除没有,想听听各位高见。
解决方案
解决方案二:
“文件锁被独占无法访问”说明出现了死锁啊,“程序不会退出”在出现异常时application.end(),排除死锁后在继续写log防止部分内容丢失
解决方案三:
不需要退出程序,希望实现多进程并发写lOG,而不产生资源争用的异常,我感觉lOG4net的实现有些问题,希望大家给指点一下。。
解决方案四:
采用阻塞读,或者阻塞写独占方式操作文件lock创建一个写入队列。启动线程考虑CPU,读文件和写文件,多线程不一定能更快把文件的内容放在数据库中,操作数据库,需要的文件的时候再生成文件。
解决方案五:
我也碰到这个问题,改动一下lockingmode,就可以解决这个问题。把LockingModel设置成MinimalLock如下:<appendername="FileAppender"type="log4net.Appender.FileAppender"><filevalue="${TMP}log-file.txt"/><appendToFilevalue="true"/><lockingModeltype="log4net.Appender.FileAppender+MinimalLock"/><layouttype="log4net.Layout.PatternLayout"><conversionPatternvalue="%date[%thread]%-5level%logger[%property{NDC}]-%message%newline"/></layout></appender>