gpt4 book ai didi

c# - log4net 为每次调用 log.info 写入单个文件

转载 作者:太空宇宙 更新时间:2023-11-03 15:55:53 24 4
gpt4 key购买 nike

我一直在使用 log4net 来捕获在我的应用程序运行期间发生的任何异常,它工作得很好,然后我创建了我自己的静态方法,它负责捕获失败的 XML 对象,该对象旨在提供进一步的阅读以补充日志条目。

public static void WriteReceiptToXml(Exception ex, string XmlReceipt)
{
if (XmlReceipt != null)
{
string filename = ConfigurationManager.AppSettings["XmlReceiptPath"] + "/ReceiptXml" + DateTime.Now.ToString("ddMMyyhhmmss") + ".xml";
File.WriteAllText(filename, XmlReceipt);
Logger.Error(string.Format("The Xml Receipt was written to {0}", filename));
}

else
Logger.Error("The Xml Receipt was empty so no document was created. Please reference the Payment request XML");
}

这很有效,但是一位更有经验的同事建议这有点代码味道并且我实际上是在重新发明轮子,因为我已经在使用 log4net 这个任务应该被处理也是如此。

此时,我在 Web.config 文件(如下)中创建了一个新的附加程序,并在 INFO 级别对其进行了过滤,然后我意识到,只要我运行该应用程序,log4net 就会创建 XML 文件,而不管catch block 是否捕获了异常,如果没有错误发生,是否将其留空,这显然不是我想要的。

<appender name="ReceiptXmlAppender" type="log4net.Appender.FileAppender" >
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<file type="log4net.Util.PatternString" value="App_Data/ReceiptXml/Receipt-%date{yyyy-MM-dd_HH-mm-ss}.xml"/>
<appendToFile value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%m" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO"/>
<param name="LevelMax" value="INFO"/>
</filter>
</appender>

总而言之,我想要的是:

  • log4net 仅在我的 catch block 中调用 INFO 方法时创建 XML
  • 每次调用 LOG.INFO 时创建 1 个文件
  • 文件必须有日期时间戳记
  • 我需要知道创建的 XML 文档的文件名,以便我可以将其附加到实际的日志文件中作为堆栈跟踪的补充。

最佳答案

如果您使用基本的 FileAppender 或其衍生产品之一,那您就不走运了;一旦在 ActivateOptions() 方法中初始化了 appender,就会创建该文件。据我所知,您需要一个自定义 FileAppender 来处理您的所有业务规则。它需要

  • 覆盖默认的 ActivateOptions 方法以防止创建文件
  • 覆盖 Append 方法以在记录消息时创建一个新的时间戳文件
  • 使用 LoggingEvent 类中传递的数据(类中有一些可用的属性)来检索文件名;您必须在记录之前确定文件名。

除非您想从它已经实现的行为中受益(例如模拟),否则我建议您跳过 FileAppender 类的继承并直接从 TextWriterAppender 类继承.

关于c# - log4net 为每次调用 log.info 写入单个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23631850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com