#region Apache License // // Licensed to the Apache Software Foundation (ASF) under one or more // contributor license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright ownership. // The ASF licenses this file to you under the Apache License, Version 2.0 // (the "License"); you may not use this file except in compliance with // the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #endregion using System; using System.IO; using System.Windows.Forms; using log4net.Appender; using log4net.Core; using log4net.Layout; using log4net.Util; namespace SampleAppendersApp.Appender { /// /// Displays messages as message boxes /// /// /// Displays each LoggingEvent as a MessageBox. The message box is UI modal /// and will block the calling thread until it is dismissed by the user. /// public class MessageBoxAppender : AppenderSkeleton { private PatternLayout m_titleLayout; private LevelMapping m_levelMapping = new LevelMapping(); public MessageBoxAppender() { } public void AddMapping(LevelIcon mapping) { m_levelMapping.Add(mapping); } public PatternLayout TitleLayout { get { return m_titleLayout; } set { m_titleLayout = value; } } override protected void Append(LoggingEvent loggingEvent) { MessageBoxIcon messageBoxIcon = MessageBoxIcon.Information; LevelIcon levelIcon = m_levelMapping.Lookup(loggingEvent.Level) as LevelIcon; if (levelIcon != null) { // Prepend the Ansi Color code messageBoxIcon = levelIcon.Icon; } string message = RenderLoggingEvent(loggingEvent); string title = null; if (m_titleLayout == null) { title = "LoggingEvent: "+loggingEvent.Level.Name; } else { StringWriter titleWriter = new StringWriter(System.Globalization.CultureInfo.InvariantCulture); m_titleLayout.Format(titleWriter, loggingEvent); title = titleWriter.ToString(); } MessageBox.Show(message, title, MessageBoxButtons.OK, messageBoxIcon); } public override void ActivateOptions() { base.ActivateOptions(); m_levelMapping.ActivateOptions(); } public class LevelIcon : LevelMappingEntry { private MessageBoxIcon m_icon; public MessageBoxIcon Icon { get { return m_icon; } set { m_icon = value; } } } } }