首先为什么会有多进程同时记录日志到同一个文件夹同一个文件里呢,每个项目肯定有每个项目的特殊性,我这里.net的BS项目,主要是因为在IIS里,应用程序池,最大工作进程设置成2,就会出现2个w3p什么的进程同时运行你的代码,设置成多个进程这样可以最大发挥服务器的性能。这样就会多进程同时往相同的地方写日志。网上搜的话,基本上都是说给配置文件里的锁定模型上设置成最小锁,这样多进程可以同时写同一个日志。
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
但这样写是可以写,但经常会丢失部分日志,尤其是日志文件满了需要滚动的时候,经常就把旧的文件给滚没了。尝试了更新到最新的log4net也不能解决。搜索有类似问题的log4j的大神自己修改源代码解决
https://blog.csdn.net/somechange/article/details/80895507
大概看了下log4net的源代码,也不敢瞎改呀。然后研究看官网文档看到这么一段:
Apache log4net – Apache log4net: Frequently Asked Questions - Apache log4nethttps://logging.apache.org/log4net/release/faq.html#single-file
意思是就不支持多进程往同一地方写,肯定是解决不了这问题,建议是使用RemotingAppender。这个RemotingAppender大概就类似AdoAppender一样,把日志发送到远程的端口,远程的程序接收到以后再做处理写日志什么的。官网的例子里就有代码,不需要改动,直接可以运行,就是一个exe程序,运行起来后就会监听配置的端口,bS端配置文件里加个remotingappender就行了,全部按例子的复制粘贴就行,非常简单。运行了几日,没问题。终于解决了多进程日志丢失的问题!