Log4Net自定义附加程序:如何使用自定义附加程序记录消息

本文关键字:程序 自定义 记录 消息 何使用 Log4Net | 更新日期: 2023-09-27 18:29:22

问题已经解决-我用正确的代码编辑了这篇文章

我正在尝试编写"main"函数,初始化log4net logger+到自定义附加程序的附件并发送消息。这是我的尝试(没有成功,不幸的是)

初始化(下面的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");
        }
    }

错误消息-异常={"无法加载文件或程序集"MessageBoxAppender"或其依赖项之一。系统找不到指定的文件。":"MessageBoxAppander"}[IMG]http://i57.tinypic.com/qrjcjc.png[/IMG]

我尝试从下面的链接中用这个自定义的附加程序代码编写日志消息

http://www.alteridem.net/2008/01/10/writing-an-appender-for-log4net/

我的目标是点击一个按钮,一条日志消息会写下自定义的appender

我有3个文件/类。

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

2."MessageBoxAppender.cs"-从"AppenderSkeleton"继承的自定义附加

3.app.config-用于log4net配置

app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net"
    type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <appender name="MessageBoxAppender"
        type="WindowsFormsApplication1.MessageBoxAppender, WindowsFormsApplication1">
      <layout type="log4net.Layout.PatternLayout">
        <ConversionPattern value="%m" />
      </layout>
    </appender>
    <root>
      <level value="ALL"/>
      <appender-ref ref="MessageBoxAppender" />
    </root>
  </log4net>
</configuration>

MessageBoxAppender自定义附加程序

    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
        {
            /// <summary>
            /// Writes the logging event to a MessageBox
            /// </summary>
            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();
                }
            }
            /// <summary>
            /// This appender requires a <see cref="Layout"/> to be set.
            /// </summary>
            override protected bool RequiresLayout
            {
                get { return true; }
            }
        }
    }
  1. 我不确定app.config中的这一行是否正确-已被回答

    <appender name="MessageBoxAppender"
    type="WindowsFormsApplication1.MessageBoxAppender, MessageBoxAppender">
    </appender>
    

惯例是吗

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

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

var errors = LogManager.GetRepository().ConfigurationMessages.Cast<log4net.Util.LogLog>();

Log4Net自定义附加程序:如何使用自定义附加程序记录消息

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

<appender name="MessageBoxAppender"
    type="WindowsFormsApplication1.MessageBoxAppender, WindowsFormsApplication1">
</appender>