【问题标题】:Log some information no matter what using log4net无论如何使用 log4net 记录一些信息
【发布时间】:2011-08-21 10:37:14
【问题描述】:

情况是 log4net 的级别被配置为“错误”,但在“无论如何”条件下我需要写一些信息 例如

"登录已开始" 如果仅启用“错误”或“致命”,我无法将其记录在错误或致命中,因为它只是信息

除了将记录器的级别更改为信息,写入日志然后更改回级别之外,我还有什么办法可以做到这一点,因为这就像一种解决方法而不是解决方案

并且不使用标题,因为它们只出现在开头

编辑:在 Appender 中

StringMatchFilter stringFilter = new StringMatchFilter();
stringFilter.AcceptOnMatch = true;
stringFilter.StringToMatch = "successfully";
stringFilter.ActivateOptions();
appender.AddFilter(stringFilter);

DenyAllFilter deny = new DenyAllFilter();
deny.ActivateOptions();
appender.AddFilter(deny);

添加到附加程序并将级别“全部”设置为根并管理附加程序中的级别,但我仍然无法编写任何包含“成功”的消息 但请注意,当我将附加程序级别设置为信息过滤器开始工作时

【问题讨论】:

  • 您没有使用 log4net 的配置文件有什么原因吗?
  • n 个附加程序,用于 n 个日志记录文件,全部创建新的 DateTime 附加到文件名的 n 个类初始化

标签: c# logging log4net


【解决方案1】:

我认为这完全是因为您不喜欢使用 .FatalFormat 的想法,因为它并不是真正的错误。

我不确定您将如何以编程方式执行此操作,但如果您使用的是配置文件,您可以添加类似的部分

    <logger name="ALWAYS">
        <level value="DEBUG" />
        appender-ref ref="RollingFileAppender" />
    </logger>

这意味着您可以像这样记录您的消息

   log4net.LogManager.GetLogger("Always").InfoFormat( ... );

或者你可以创建一个静态的

   static readonly log4net.ILog alwaysLogger  = log4net.LogManager.GetLogger("Always");

并通过登录。

   alwaysLogger.InfoFormat(....);

【讨论】:

  • 你是想说我应该有一个文件和多个记录器吗?
  • 你可以,我就是这样做的,但如果你不想这样做,你就不需要这样做。定义另一个记录器的正常用途是增加或减少一个特定类的记录。例如,在我的应用程序中,我可以将 root 设置为级别错误并将另一个记录器添加到我的配置文件中,例如 MyCompany.Customer.Statements 并将其级别设置为调试,这意味着我将获得此类的调试消息,没有为我的应用程序的其余部分获取调试消息。如果您使用的是配置文件,则无需重新启动应用即可更新此文件。
  • 嗯,我想我没有其他选择:(
【解决方案2】:

我的建议是创建一个过滤器,它首先查看字符串匹配,然后查看级别。这样你就可以有一个在消息中传递的密钥字符串(比如“AppInfo”或者是唯一的并且在错误中找不到的东西)。然后,即使您在 INFO 级别记录它,您的过滤器也会选择并记录它,但过滤器会忽略所有其他不是 ERROR 或 FATAL 的消息。我在 CodeProject 上写了一篇文章,将向您展示如何像这样进行复杂的过滤:

http://www.codeproject.com/KB/dotnet/Log4net_Tutorial.aspx

这里的一个关键是,您可能不需要在根中为这个特定的附加程序指定过滤,因为如果我没记错的话,根会取代附加程序。

【讨论】:

  • 啊,我在看你的那篇文章,我们可以在 root 中添加过滤器吗?因为我在运行时使用所有日志记录,即以编程方式
  • 问题是在根级别应用日志记录阈值,如果级别为“错误”,则永远不会应用信息过滤器
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多