我有一个应用程序接收来自不同来源(聊天室和私人聊天)的消息。可以打开应用程序的多个实例,最终结果应类似于以下方案:
目前,每个应用程序将日志保存在一个目录中,该目录的名称是用于登录聊天服务器的帐户;虽然私有聊天源(每个应用程序实例都是唯一的)不是问题,但是对于常见的聊天室而言,保存多次相同的日志是没有用的。日志以纯文本格式保存,因此可以访问和读取日志,而无需通过应用程序进行路由。
如果我不将日志保存在单独的文件夹中,由于从多个进程同时访问同一文件,我可能会得到I / O异常,并且我需要验证要保存的行是否没有已经由其他应用程序编写。我需要优化整个操作并尝试维护代码可读性。
此外,我目前的写作方法如下:
public void Write(string message)
{
using (var writer = new StreamWriter(_fileName, File.Exists(_fileName)))
writer.WriteLine(message);
}
考虑到不断编写日志,可能不是最有效的解决方案。
总结一下,我的问题是:
StreamWriter
将不是一个合适的解决方案,因为应用程序应该运行很长时间。谢谢。
答案 0 :(得分:1)
我会想出一个简单的解决方案,它可能适合您的需求,但并不完全确定。
我的方法是为每个聊天会话/会议室使用单个文件。如果启动了此类会话,应用程序将尝试创建/打开该文件并为该文件创建写锁定。如果它获得IOException(因为文件被锁定),它可以简单地完全跳过日志记录。
答案 1 :(得分:0)
老实说,如果我是你,我会考虑已经存在的开源框架,例如: NLog。它足够快并支持异步日志记录,因此它应该完全符合您的要求。
答案 2 :(得分:0)
不确定,如果我应该把它写成答案或评论,但可能需要房间:
你提到你的草图显示了所需的结果,但正如我所说,如果你不结合实例,这将阻止你进行重复数据删除。所以这就是我的建议:
答案 3 :(得分:0)
或许更改您的应用程序设计,使记录器连接到聊天室而不是用户。
当用户进入聊天室时,聊天室会将记录器对象传递给用户。
这样所有用户都将使用相同的记录器。然后问题变成:1个消费者(记录器)和多个生产者(所有那些想要记录的用户)。
请参阅此帖子的my reply:
这里