問題解決了 - 我用正確的代碼編輯這篇文章。Log4Net自定義appender:如何記錄將使用自定義appender編寫的消息?
我試圖寫的「主」函數初始化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; }
}
}
}
我不知道這條線在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的設計,如果配置無效不是拋出一個錯誤,但是你可以通過調用'VAR誤差= LogManager.GetRepository()ConfigurationMessages查詢配置錯誤。在調用'XmlConfigurator.Configure();' – stuartd 2014-11-07 00:37:41
後調用();謝謝,我補充一下。得到這個錯誤「Exception = {」無法加載文件或程序集「MessageBoxAppender」或它的一個依賴項。系統找不到指定的文件。「:」MessageBoxAppender「}」 –
shay12
2014-11-07 07:56:14