我有一个应用程序从不同的来源接收消息(聊天室和私人聊天室)。可以打开应用程序的多个实例,最终结果应该类似于以下场景:

目前,每个应用程序都将日志保存在一个目录中,该目录的名称是用于登录聊天服务器的帐户;虽然私有聊天源(对于每个应用程序实例都是唯一的)没有问题,但是将相同的日志保存多次(涉及公共聊天室)是无用的。日志以纯文本格式保存,因此可以在不通过应用程序路由的情况下访问和读取日志。
如果我不将日志保存在单独的文件夹中,我可能会因为同时从多个进程访问同一个文件而获得I/O异常,并且需要验证即将保存的行是否已经被其他应用程序写入。我需要优化整个操作并努力维护代码的可读性。
此外,我目前的写作方法如下:
public void Write(string message)
{
using (var writer = new StreamWriter(_fileName, File.Exists(_fileName)))
writer.WriteLine(message);
}考虑到日志是不断写入的,这可能不是最有效的解决方案。
总之,我的问题是:
StreamWriter并不是一个合适的解决方案,因为应用程序要运行很长时间。谢谢。
发布于 2011-12-21 15:11:16
我会想出一个简单的解决方案,这可能适合您的需要,但不完全确定。
我的方法是为每个聊天会话/聊天室使用一个文件。如果启动了这样的会话,应用程序将尝试创建/打开该文件,并为该文件创建一个写锁。如果它获得一个IOException (因为文件被锁定),它可以完全跳过日志记录。
发布于 2011-12-21 14:57:58
老实说,如果我是您,我会考虑已经存在的开源框架,例如NLog。它足够快,并且支持异步日志记录,所以它应该做您想要的事情。
发布于 2011-12-21 15:05:19
不确定,我是否应该写这个作为回答或评论,但可能需要房间:
您提到了显示所需结果的草图,但正如我说过的,如果不对实例进行耦合,这将阻止您脱钩。以下是我的建议:
https://stackoverflow.com/questions/8591652
复制相似问题