Log4Net自定义appender:如何记录使用Custom appender写入的消息?

问题解决了 – 我用正确的代码编辑这篇文章。

我正在尝试编写“main”函数,初始化log4net记录器+自定义appender附件并发送消息认为它 – 这是我的尝试(没有成功,不幸)

我的初始化有什么问题(下面的Form1.cs)?

namespace WindowsFormsApplication1 { public partial class Form1 : Form { ILog log = LogManager.GetLogger(typeof(Form1)); public Form1() { log4net.Config.XmlConfigurator.Configure(); InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { log.Info("Creating log"); } } 

错误消息-Exception = {“无法加载文件或程序集’MessageBoxAppender’或其依赖项之一。系统找不到指定的文件。”:“MessageBoxAppender”} [IMG] http://sofzh.miximages.com/c%23/qrjcjc .png [/ IMG]

我尝试使用此自定义appender代码从下面的链接编写日志消息

Writing An Appender For log4net

我的目标是单击一个按钮,日志消息将写入自定义appender。

我有3个文件/类。

1.Form1.cs windows窗体 – 只包含一个应该写一条消息和初始化的按钮。

2.“MessageBoxAppender.cs” – 从“AppenderSkeleton”inheritance的自定义附加内容

3.app.config – 用于log4net配置

的app.config

    

MessageBoxAppender自定义appender

  using log4net.Appender; using log4net.Core; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication1 { public class MessageBoxAppender : AppenderSkeleton { ///  /// Writes the logging event to a MessageBox ///  override protected void Append(LoggingEvent loggingEvent) { string title = string.Format("{0} {1}", loggingEvent.Level.DisplayName, loggingEvent.LoggerName); string message = string.Format( "{0}{1}{1}{2}{1}{1}(Yes to continue, No to debug)", RenderLoggingEvent(loggingEvent), Environment.NewLine, loggingEvent.LocationInformation.FullInfo); DialogResult result = MessageBox.Show(message, title, MessageBoxButtons.YesNo); if (result == DialogResult.No) { Debugger.Break(); } } ///  /// This appender requires a  to be set. ///  override protected bool RequiresLayout { get { return true; } } } } 
  1. 我不确定app.config中的这一行是否正确 – 得到了解答

       

约定是

  type="namespace + custom appender class name, custom appender class name> 

[编辑]我添加到我的代码:

 var errors = LogManager.GetRepository().ConfigurationMessages.Cast(); 

用于type属性的值是类的完全限定名称。 这是appender(命名空间+类名)的类的完整路径,后跟它所在的程序集的名称。对于您的代码,这将是(假设您的程序集名为WindowsFormsApplication1 – 您可以检查此在项目的属性中):