【问题标题】:log4net appenders to database with different bufferSizelog4net appenders 到具有不同 bufferSize 的数据库
【发布时间】:2017-10-30 15:23:05
【问题描述】:

我有两个不同级别的同一数据库记录器。我想为每个记录器设置不同的 bufferSize。 一种方法是让两个附加程序到同一个数据库,只有 bufferSize 元素不同,但它是复制粘贴。 是否可以扩展已经定义的 appender 并更改它的 bufferSize 属性? 例如:

 <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
  <bufferSize value="20" />
      ...other elements
</appender>
<appender name="AdoNetAppenderChild" extends="AdoNetAppender">
  <bufferSize value="1" />
</appender>

    <logger name="Fatal" additivity="false">
  <level value="FATAL"/>
  <appender-ref ref="AdoNetAppenderChild" />
</logger>
    <logger name="Common" additivity="false">
  <level value="INFO"/>
  <appender-ref ref="AdoNetAppender" />
</logger>

我要避免的是有两个具有相同元素和属性的附加程序,只有不同的值是 bufferSize

【问题讨论】:

  • “它是复制粘贴” 配置经常是,而且是烦人的冗长和重复。在这种情况下,在配置中加倍可能是你最好的选择- 您真的不想在运行时更改缓冲区大小,唯一的另一种选择是编写代码来复制附加程序(或创建一个新的附加程序等),然后需要对其进行记录、测试等。
  • 谢谢。还有一个问题,是否可以为每个 MVC 控制器设置一个静态记录器,并在该记录器中添加一些来自会话的额外信息。具体来说,如果我将 log4net.LogicalThreadContext.["sessionVariable"] 从会话中放入,我可以确定它不会被覆盖还是应该在每个请求上创建新的记录器实例?
  • 对于静态记录器,我不会 100% 有信心。 log4net 缓存记录器,因此在每个请求上创建一个新的 on 会更安全。

标签: c# logging log4net log4net-configuration log4net-appender


【解决方案1】:

当你有错误消息时,你可以创建一个 appender 并使用 evaluator 来记录:

<evaluator type="log4net.Core.LevelEvaluator">
    <threshold value="ERROR"/>
</evaluator>

Evaluator 是一个可插入的对象,由 BufferingAppenderSkeleton 确定日志事件是否不应该 被缓冲,而是立即写入/发送。如果评估员 决定该事件很重要,然后该事件的全部内容 当前缓冲区将与事件一起发送。通常一个 SmtpAppender 将设置为在发送之前缓冲事件作为成本 发送电子邮件的概率可能相对较高。如果有重要事件 到达,说一个错误,我们希望立即交付 而不是等待缓冲区变满。这就是 Evaluator 进来,因为它允许我们说:“当一个重要事件 到达不用担心缓冲,只需发送您的所有内容 现在有”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多