【问题标题】:enabling multiply sources writing entries to the same log using eventlog使用 eventlog 启用多个源将条目写入同一日志
【发布时间】:2011-03-11 16:40:03
【问题描述】:

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

2.) 问题: 在 Windows 事件查看器中,我可以看到日志可以组织到“目录”中,例如:Application and Services Logs->Microsoft->Windows->Audio->{CaptureMonitor log, Operational log}。我找不到任何 API 允许创建这样的目录和该目录中的一些日志。这有可能吗??

提前致谢

【问题讨论】:

    标签: c# windows event-log


    【解决方案1】:

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

    可能最简单的方法是使用Mutex。每个应用程序都会在启动时创建一个名为Mutex,并使用相同的名称:

    Mutex LogLock = new Mutex(false, "LogLock");
    

    然后,当你想写入文件时:

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

    如果您想写入 Windows 事件日志,请查看 System.Diagnostics.EventLog 类。我没有任何写入 Windows 事件日志的经验,所以我不能说这是否适合你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多