是否有可能使用log4net将2个应用程序写入同一个日志文件?log4net,可以将2个应用程序写入同一个日志文件吗?
回答
他们可以,但如果一个应用程序被写入该文件的其他应用程序将最有可能的经验,如果它需要写入日志以及由于第一应用将举行打开文件写入错误。最好为您的应用程序提供专用的日志记录源 - 如果您需要共享日志,请使用数据库,因为它旨在处理并发写入。
这是那些东西,将工作非常好你的机器上,当你正在开发的,因为你不可能创造足够的并发写入日志文件,以发现任何问题之一。一旦你的应用程序开始经历更多的负载,这个问题就会开始显现,并且在这一点上它可能会以奇怪的方式表现出来。我肯定会尝试另一种解决方案。
这取决于FileAppender的LockingModel。如果它是ExclusiveLock,则另一个进程无法打开该文件进行写入。替代方案是MinimalLock,但它不是为此目的。它旨在允许其他进程移动或删除文件。
MinimalLock部分地解决了这个问题(如@马克提到),但如果你正在使用RollingFileAppender进行,你会遇到其他问题。当文件滚动时,您可能会发现自己处于竞争状态,其中一个进程覆盖另一个进程的新创建的日志文件。
其他选项包括RemoteLogger,那就是你有一个简单的服务器设置为接收和其他进程发送记录的日志记录事件。同样,您可以登录到SQL数据库。我写了一个简单的附加日志给Redis;您需要一个简单的应用程序才能从Redis中读取并记录到文件中。这些方法的问题是它们都引入了一个失败点。当某些工作不正常时,往往需要记录最多的时间,然后可能无法使用。
所以我的解决办法是通过使每个进程日志到它自己的文件完全避免问题。配置变化很容易实现。在你(Rolling)FileAppender
配置,使用:
<file type="log4net.Util.PatternString" value="c:\mylog-[%processid].txt" />
进程ID将成为文件名的一部分。是的,这意味着您现在有几个日志文件需要梳理,但像Graylog,Splunk或Logscape这样的日志文件聚合器可以提供帮助。
或者您可以使用Mutex锁定公共资源,因此可以同步访问来自不同进程的通用日志文件。
是的,这是可能的,如上所述,但我现在已经对这种情况做了一些压力测试。
的设置是相当简单:
- Web项目1成立了一个页面,记录在 URL的单个条目+按钮 是衬托出1000个请求到同一页面,用一个计数器(由日志声明拾取)。
- Web项目2在相同的日志文件中设置相同。
当两个按钮被同时点击时,日志条目将散布在整个日志中。 但是,这是一个很大的GOTCHA,根据伴随的请求计数器来判断,显然存在竞争条件。 几乎每次一个Web项目成功记录其条目时,另一个都会失败(该条目被跳过)。
因此,对于这种常见日志,体面的流量,你基本上不能保证哪些日志语句实际上最终在日志中。 结论是总是有项目特定的日志文件,看来。
测试是使用默认的“MinimalLock”完成的。 我用“ExclusiveLock”重新测试了测试,结果发现第一个配置记录器的Web项目“获胜”,基本上锁定了所有其他请求记录。所以很明显,这是一个不好的做法。
- 1. Log4net可以有多个appender写入同一个文件吗?
- 2. 在Windows窗体应用程序log4Net不写日志文件
- 3. 两个log4j文件夹可以写入同一个文件吗?
- 4. 无法写入日志文件log4net
- 5. 多个线程可以同时将数据写入文件吗?
- 6. 是否可以使用Log4Net在CLR存储过程中写入日志文件?
- 7. log4net - 只创建一个日志文件
- 8. 程序可以在另一个文件中写入东西吗?
- 9. 如何从同一个python程序写入两个单独的日志文件?
- 10. 我在哪里可以将我的log4net日志文件写入ClickOnce下?
- 11. Log4Net无法写入日志
- 12. 2个应用程序2个时区,我可以编程吗?
- 13. 我们可以使用akka.event.Logging在文件中写入日志吗?
- 14. 如何让同一个应用程序日志的不同实例与log4net到不同的文件?
- 15. log4net c#,已安装的程序无法将日志写入文件
- 16. 配置log4net根据日志级别写入不同的文件
- 17. 可以写入日志文件严重减慢你的应用程序?
- 18. Log4Net或日志应用程序块
- 19. 将日志写入文件
- 20. log4net何时将日志写入或提交到文件?
- 21. 从python程序写入日志文件
- 22. 我可以写入一个新文件,然后在同一个C程序中读取该文件吗?
- 23. 将消息写入应用程序事件日志
- 24. log4net不会写日志条目,直到应用程序关闭
- 25. Lua:我可以使用IO同时写入两个文件吗?
- 26. log4net日志文件没有被写入使用Quartz.net + Common.Logging
- 27. 写事件日志不写入应用程序日志(注册优先源后)
- 28. Log4j 2个不同的日志每个线程的文件
- 29. 如何从同一应用程序的两个实例安全地写入日志文件?
- 30. 可以将Windows应用程序中的文件直接写入Android SD卡吗?
有没有人有经验分享这种方法? – SandRock 2012-01-16 11:02:51