簡體   English   中英

Log4Net自定義appender:如何記錄使用Custom appender寫入的消息?

[英]Log4Net custom appender : How to logs messages that will wrote using the 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://i57.tinypic.com/qrjcjc .PNG [/ IMG]

我嘗試使用此自定義appender代碼從下面的鏈接編寫日志消息

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自定義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
        {
            /// <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>();

用於type屬性的值是類的完全限定名稱。 這是appender(命名空間+類名)的類的完整路徑,后跟它所在的程序集的名稱。對於你的代碼,這將是(假設你的程序集被稱為WindowsFormsApplication1 - 你可以檢查這個在您的項目的屬性中):

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM