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代码从下面的链接编写日志消息
我的目标是单击一个按钮,日志消息将写入自定义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; } } } }
-
我不确定app.config中的这一行是否正确 – 得到了解答
约定是
type="namespace + custom appender class name, custom appender class name>
[编辑]我添加到我的代码:
var errors = LogManager.GetRepository().ConfigurationMessages.Cast();
用于type属性的值是类的完全限定名称。 这是appender(命名空间+类名)的类的完整路径,后跟它所在的程序集的名称。对于您的代码,这将是(假设您的程序集名为WindowsFormsApplication1
– 您可以检查此在项目的属性中):