Feedback

C# - MessageBox Appender für LOG4NET

Veröffentlicht von am 08.12.2008
(1 Bewertungen)
Diese Appender zeigt für die Fehlermeldungen aus log4net eine MessageBox an. Die Klasse wird wie folgt in der app.config eingebunden:


<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>

<log4net>
<appender name="MessageBoxAppender" type="Softwareküche.Common.MessageBoxAppender,[NAME OF THE DLL]">
<layout type="log4net.Layout.PatternLayout" value="%message"/>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR" />
<levelMax value="FATAL" />
</filter>
</appender>

<root>
<level value="INFO"/>
<appender-ref ref="MessageBoxAppender" />
</root>

</log4net>

</configuration>

GFU-Schulungen  [Anzeige]

VB.NET Komplett

Sie stehen vo der Aufgabe, individuelle Anwendungen für Windows zu schreiben. Hier ist VB.NET die optimale Sprache. Sie erlernt sich recht leicht und passt sich komplett in die .NET Umgebung von Microsoft ein. Nach der Schulung entwickeln Sie anwenderfreundliche Programme in VB.NET . Mit den objektorientierten Modellen in VB.NET erzeugen Sie außerdem wiederverwendbare Komponenten.

Visual Studio Team Foundation Server 2017/2015 (TFS) für Administratoren - Kompakt

Nach dieser Schulung beherrschen Sie die Grundlagen des TFS. Sie erledigen administrative Aufgaben schnell und sicher.

using System;
using System.Text;

namespace Softwareküche.Common
{
    using System.Globalization;
    using System.IO;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    using log4net.Appender;
    using log4net.Core;
    using log4net.Layout;
    using log4net.Util;

    /// <summary>
    /// MessageBox für log4net zum Anzeigen von "Error" und "Fatal" Fehlermeldungen.
    /// </summary>
    [ComVisible(false)]
    public class MessageBoxAppender : AppenderSkeleton
    {
        private PatternLayout _titleLayout;
        private readonly LevelMapping _LevelMapping = new LevelMapping();

        /// <summary>
        /// Überschreibt die Methode zum Anzeigen und durchreichen der Fehlermeldung
        /// </summary>
        /// <param name="loggingEvent">Logging Event der Append Methode</param>
        protected override void Append(LoggingEvent loggingEvent)
        {
            MessageBoxIcon messageBoxIcon = MessageBoxIcon.Information;

            LevelIcon levelIcon = (LevelIcon) this._LevelMapping.Lookup(loggingEvent.Level);

            if (levelIcon != null)
            {
                messageBoxIcon = levelIcon.Icon;
            }

            // Fehlermessage generieren
            string message;
            if (loggingEvent.ExceptionObject != null)
            {
                // Fall eine Exception diese ausgeben,
                message = loggingEvent.ExceptionObject.Message;
            }
            else
            {
                // Ansonsten die ersten 300 Zeichen
                message = this.RenderLoggingEvent(loggingEvent);

                if (message.IndexOf(Environment.NewLine) > 0)
                {
                    message = message.Substring(0, message.IndexOf(Environment.NewLine) - 1);
                }

                if (message.Length > 300)
                {
                    message = message.Substring(0, 300) + " ...";
                }
            }

            // Titel ist der Fehlerlevel
            string title;
            if (this._titleLayout == null)
            {
                title = loggingEvent.Level.Name;
            }
            else
            {
                StringWriter titleWriter = new StringWriter(CultureInfo.InvariantCulture);
                this._titleLayout.Format(titleWriter, loggingEvent);
                title = titleWriter.ToString();
                titleWriter.Dispose();
            }

            // Fehler anzeigen
            MessageBox.Show(message, title, MessageBoxButtons.OK, messageBoxIcon, MessageBoxDefaultButton.Button1, 0);
        }

        /// <summary>
        /// Überschreiben und durchreichen der Methode.
        /// </summary>
        /// <param name="mapping">Das Mapping</param>
        public void AddMapping(LevelIcon mapping)
        {
            this._LevelMapping.Add(mapping);
        }

        /// <summary>
        /// Überschreiben und durchreichen der Methode.
        /// </summary>
        public PatternLayout TitleLayout
        {
            get { return this._titleLayout; }
            set { this._titleLayout = value; }
        }

        /// <summary>
        /// Überschreiben und durchreichen der Methode.
        /// </summary>
        public override void ActivateOptions()
        {
            base.ActivateOptions();
            this._LevelMapping.ActivateOptions();
        }
    }

    /// <summary>
    /// Icon, das angezeigt wird.
    /// </summary>
    [ComVisible(false)]
    public class LevelIcon : LevelMappingEntry
    {
        /// <summary>
        /// Überschreiben und durchreichen der Methode.
        /// </summary>
        public LevelIcon()
            : base()
        {
            this._icon = MessageBoxIcon.None;
        }

        private MessageBoxIcon _icon;

        /// <summary>
        /// Icon für die Message Box
        /// </summary>
        public MessageBoxIcon Icon
        {
            get { return this._icon; }
            set { this._icon = value; }
        }
    }
}
Abgelegt unter log4net, MessageBox, Appender.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!