是否可以使用log4net将2个应用程序写入同一个日志文件?
MinimalLock部分解决了这个问题(正如@Mark提到的那样),但是如果你使用的是RollingFileAppender,你会遇到其他问题.当文件滚动时,您可能会发现自己处于竞争状态,其中一个进程会覆盖另一个进程的新创建的日志文件.
其他选项包括RemoteLogger,您可以在其中设置一个简单的服务器来接收和记录其他进程发送的日志记录事件.同样,您可以登录到SQL数据库.我写了一个简单的附加内容,记录到Redis; 你需要一个简单的应用程序来从Redis读取并记录到文件.这些方法的问题在于它们都引入了一个失败点.当某些东西不能正常工作时,往往需要最多的日志,然后它们可能无法使用.
所以我的解决方案是通过让每个进程记录到自己的文件来完全避免这个问题.这很容易改变配置.在您的(Rolling)FileAppender
配置中,使用:
进程ID成为文件名的一部分.是的,这意味着您现在有几个日志文件要梳理,但是像Graylog,Splunk或Logscape这样的日志文件聚合器可以提供帮助.
他们可以,但是如果一个应用程序正在写文件,那么另一个应用程序很可能会遇到错误,如果它需要写入日志,因为第一个应用程序将保持文件打开以进行写入.最好为您的应用程序提供专用的日志记录源 - 如果您需要共享日志,请使用数据库,因为它旨在处理并发写入.
这是在开发过程中在您的机器上运行良好的事情之一,因为您不太可能创建足够的并发写入日志文件以发现任何问题.一旦您的应用程序开始体验更多负载,问题就会开始显现,并且在那时它可能会以奇怪的方式表现出来.我肯定会尝试另一种解决方案.
这取决于FileAppender的LockingModel.如果是ExclusiveLock,则另一个进程无法打开文件进行写入.另一种选择是MinimalLock,但它并不是为了这个目的.它旨在允许其他进程移动或删除该文件.