Kug*_*gel 15 .net c# log4net multiple-instances
我终于尝试了我的WPF桌面应用程序的log4net.
我正在努力解决RollingFileAppender没有内置支持多实例应用程序的事实.
我不喜欢将应用程序限制为单个实例只是为了让logger满意.单一的手术技巧都是丑陋的黑客.
在日志文件的文件名中使用进程ID也不够好.这有可能占用无限空间,因为RollingFileAppender在这种情况下是无用的.
一种解决方案可能是将日志发送到不同的进程,这将负责将输出序列化为文件.但这会带来新的麻烦.
你对此有何看法?
Enr*_*lio 17
它不使用来自不同进程的多个实例RollingFileAppender进行一个好主意,因为写同一个文件中RollingFileAppender进行不适合该场景.
你有两个选择:
使用指向同一文件并使用最小锁定配置的多个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)
使用写入共享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)
当然,您也可以将日志发送到数据库或运行在不同进程中的远程组件,甚至是不同的计算机,但这些选择需要设置更多的基础结构,因此对于您的方案可能过度.
相关资源: