【发布时间】:2015-01-03 07:36:10
【问题描述】:
问题已解决 - 我用正确的代码编辑了这篇文章。
我正在尝试编写初始化 log4net 记录器 + 附件到自定义附加程序并发送消息的“主”函数 - 这是我的尝试(不幸的是没有成功)
我的初始化(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]
我尝试使用下面链接中的自定义附加程序代码编写日志消息
http://www.alteridem.net/2008/01/10/writing-an-appender-for-log4net/
我的目标是单击一个按钮,然后一条日志消息将写入自定义附加程序。
我有 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; }
}
}
}
-
我不确定 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 被设计成在配置无效的情况下不会抛出错误,但是您可以在调用
XmlConfigurator.Configure();之后通过调用var errors = LogManager.GetRepository().ConfigurationMessages.Cast<LogLog>();来查询配置错误 -
谢谢,我加了。收到此错误“Exception = {”无法加载文件或程序集'MessageBoxAppender'或其依赖项之一。系统找不到指定的文件。":"MessageBoxAppender"}"
标签: c# .net xml log4net log4net-appender