【发布时间】:2018-06-12 11:34:10
【问题描述】:
是否有可能为 log4net 提供一个附加程序,如果它达到阈值级别,它会将信息记录到两个文件中。它是 INFO 级别,如果它是调试,它将写入除调试之外的所有内容,它写入包括调试在内的所有内容,并只保留这两个。我可以使用两个附加程序来做到这一点,但是我希望只有一个变量可以根据日志文件写入的阈值级别、仅一个或两者来计算。
<appender name="Name"
type="log4net.Appender.RollingFileAppender,log4net">
<file value="Path" />
<treshold value="info" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="2000KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<Header value="[Start] " />
<Footer value="[End] " />
<ConversionPattern value="%-5level %message%newline" />
</layout>
</appender>
【问题讨论】:
-
正如您提到的,人们通常使用两个附加程序来执行此操作,每个附加程序都有自己的文件名和阈值级别。如果您的情况由于某种原因限制您只能使用一个 appender,那么一种方法是编写自己的 appender 类。从 AppenderSkeleton 派生,并让您的类拥有两个 RollingFileAppender 实例。重写 Append() 方法以将事件传递给适当的附加程序。
-
我不能使用两个附加程序的原因是,在那种情况下,我必须在每个地方写两个 log.Foo() 语句如果我想登录到文件。为什么?因为我们的情况要求我们有两个独立的日志文件。一个用于开发人员,另一个用于 IT 支持团队。所以我选择了Nlog。我可能应该关闭这个问题?
-
你可以让一个 log.Foo() 出现在任意数量的 appender 中。我们在我的公司有相同类型的设置,一个用于技术支持人员的日志文件,另一个用于技术支持人员。如果有帮助,我可以发布一个示例作为答案,请告诉我。
-
是的,那肯定对我有帮助。 :)