我写了两个不同的应用程序作为Windows服务运行。每个应用程序代表Windows日志的一个源。 1.)问题: 我希望应用程序将条目写入同一日志,例如my_applications_log。我的动机是监控应用程序采取的操作的顺序。问题是,当我尝试用一个源写入一个条目,然后用另一个源写入同一个日志的另一个条目时,只有注册了最新源的条目被写入日志,另一个没有。我不明白为什么这不可能。我知道一种方法是根据来源分割日志并使用自定义视图让它们“加入”。但我希望有一个指定的日志不是两个或更多..
2。)问题: 在Windows事件查看器中,我可以看到日志可以组织成“目录”,例如:应用程序和服务日志 - > Microsoft-> Windows->音频 - > {CaptureMonitor日志,操作日志}。我找不到任何允许创建此类目录的API以及此目录中的一些日志。这有可能吗?
提前致谢
答案 0 :(得分:1)
如果您尝试跨进程共享日志文件,则需要使用某种锁保护该文件,或者在写入失败时让应用程序重试。两个进程不可能同时写入同一个文件。两个进程可以打开文件进行写入,但如果它们都尝试同时写入,那么您可能会遇到异常。
最简单的方法可能是使用Mutex
。每个应用程序都会在启动时使用相同的名称创建一个名为Mutex
:
Mutex LogLock = new Mutex(false, "LogLock");
然后,当您要写入文件时:
LogLock.WaitOne();
try
{
// write to the file
}
finally
{
LogLock.ReleaseMutex();
}
如果要写入Windows事件日志,请查看System.Diagnostics.EventLog类。我没有任何写入Windows事件日志的经验,所以我不能说这是否适合你。