记录多实例应用程序的最佳实践?

Kug*_*gel 15 .net c# log4net multiple-instances

我终于尝试了我的WPF桌面应用程序的log4net.

我正在努力解决RollingFileAppender没有内置支持多实例应用程序的事实.

我不喜欢将应用程序限制为单个实例只是为了让logger满意.单一的手术技巧都是丑陋的黑客.

在日志文件的文件名中使用进程ID也不够好.这有可能占用无限空间,因为RollingFileAppender在这种情况下是无用的.

一种解决方案可能是将日志发送到不同的进程,这将负责将输出序列化为文件.但这会带来新的麻烦.

你对此有何看法?

Enr*_*lio 17

不使用来自不同进程的多个实例RollingFileAppender进行一个好主意,因为写同一个文件中RollingFileAppender进行不适合该场景.

你有两个选择:

具有最小锁定的多个FileAppender

使用指向同一文件并使用最小锁定配置的多个FileAppender实例.这将允许来自多个进程的并发写入操作:

<appender name="FileAppender" type="log4net.Appender.FileAppender">
    <file value="Log.txt" />
    <appendToFile value="true" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern
            value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
</appender>
Run Code Online (Sandbox Code Playgroud)

多个EventLogAppender

使用写入共享Windows事件源的多个EventLogAppender实例:

<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
    <applicationName value="MyApp" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern
            value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
</appender>
Run Code Online (Sandbox Code Playgroud)

当然,您也可以将日志发送到数据库或运行在不同进程中的远程组件,甚至是不同的计算机,但这些选择需要设置更多的基础结构,因此对于您的方案可能过度.

相关资源: