C# 启用多个源使用eventlog将条目写入同一日志

C# 启用多个源使用eventlog将条目写入同一日志,c#,windows,event-log,C#,Windows,Event Log,我编写了两个不同的应用程序,它们作为windows服务运行。每个应用程序代表windows日志的一个源。 问题: 我希望应用程序将条目写入同一日志,例如我的应用程序日志。我的动机是监视应用程序执行操作的顺序。问题是,当我尝试将一个源的条目和另一个源的条目写入同一个日志时,只有注册了最新源的条目才会写入日志,而另一个则不会。我不明白为什么这不可能。。我知道一种方法是根据源拆分日志,并使用自定义视图将它们“连接”。但我希望有一个指定的日志,而不是两个或更多 问题: 在Windows事件查看器中,我可

我编写了两个不同的应用程序,它们作为windows服务运行。每个应用程序代表windows日志的一个源。 问题: 我希望应用程序将条目写入同一日志,例如我的应用程序日志。我的动机是监视应用程序执行操作的顺序。问题是,当我尝试将一个源的条目和另一个源的条目写入同一个日志时,只有注册了最新源的条目才会写入日志,而另一个则不会。我不明白为什么这不可能。。我知道一种方法是根据源拆分日志,并使用自定义视图将它们“连接”。但我希望有一个指定的日志,而不是两个或更多

问题: 在Windows事件查看器中,我可以看到日志可以组织到“目录”中,例如:应用程序和服务日志->Microsoft->Windows->音频->{CaptureMonitor日志,操作日志}。我找不到任何允许创建这样一个目录的API以及该目录中的一些日志。这有可能吗


提前感谢

如果您试图跨进程共享日志文件,则需要使用某种锁来保护该文件,或者在写入失败时让应用程序重试。两个进程不可能同时写入同一个文件。两个进程可以打开文件进行写入,但如果它们都试图同时写入,则可能会出现异常

可能最简单的方法是使用
互斥锁。每个应用程序将在启动时使用相同的名称创建一个命名的互斥体:

Mutex LogLock = new Mutex(false, "LogLock");
然后,当您要写入文件时:

LogLock.WaitOne();
try
{
    // write to the file
}
finally
{
    LogLock.ReleaseMutex();
}

如果要写入Windows事件日志,请查看该类。我没有任何写入Windows事件日志的经验,因此我不能说这是否适用于您。

如果您试图跨进程共享日志文件,您需要使用某种锁来保护该文件,或者在写入失败时让应用程序重试。两个进程不可能同时写入同一个文件。两个进程可以打开文件进行写入,但如果它们都试图同时写入,则可能会出现异常

可能最简单的方法是使用
互斥锁。每个应用程序将在启动时使用相同的名称创建一个命名的互斥体:

Mutex LogLock = new Mutex(false, "LogLock");
然后,当您要写入文件时:

LogLock.WaitOne();
try
{
    // write to the file
}
finally
{
    LogLock.ReleaseMutex();
}
如果要写入Windows事件日志,请查看该类。我没有任何写入Windows事件日志的经验,因此我不能说这是否适用于您