我在我的控制台应用程序中使用log4net,我log.Error("Message to log");在if/else结构中多次使用.
我的应用程序必须返回一个代码,该代码指定在应用程序运行期间是否发生错误(0→ok,1→至少发生1个错误).
有没有办法询问log4net是否记录了错误,例如:
bool b = LogManager.AtLeastOneErrorHasBeenLogged;
Run Code Online (Sandbox Code Playgroud)
如果您使用自定义appender,它的唯一目的是跟踪是否发生错误,这似乎很简单.
这个(未经测试的)示例使用仅在使用a时日志级别为Error的情况下调用appender的技术,LevelRangeFilter但您可以轻松地在Append方法或根记录器配置中检查日志级别(或其他条件).该示例假设您使用的是XML配置而不是编程配置,但可以以编程方式添加appender,以便所有记录器都可以使用它们.
追加者:
public namespace MyApp
{
public class ErrorFlagAppender : AppenderSkeleton
{
public bool ErrorOccurred { get; set; }
protected override void Append(LoggingEvent loggingEvent)
{
ErrorOccurred = true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
配置:
<appender name="ErrorFlagAppender" type="MyApp.ErrorFlagAppender,MyApp" >
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR"/>
<levelMax value="ERROR"/>
</filter>
</appender>
<root>
<appender-ref ref="[your existingappender]" />
<appender-ref ref="ErrorFlagAppender" />
</root>
Run Code Online (Sandbox Code Playgroud)
然后你可以有一个扩展方法来查看是否发生了错误:
public static class LogManagerExtensions
{
public static bool AtLeastOneErrorHasBeenLogged(this LogManager logManager)
{
var flagAppenders = logManager.GetRepository()
.GetAppenders()
.OfType<ErrorFlagAppender>();
return flagAppenders.Any(f => f. ErrorOccurred);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3248 次 |
| 最近记录: |