nicko       2004/11/12 14:36:02

  Modified:    examples/net/1.0/Appenders/SampleAppendersApp/cs/src
                        App.config LoggingExample.cs
  Added:       examples/net/1.0/Appenders/SampleAppendersApp/cs/src/Appender
                        MessageObjectExpanderAppender.cs
  Log:
  Added example appender that used reflection to expand a message object into 
properties
  
  Revision  Changes    Path
  1.1                  
logging-log4net/examples/net/1.0/Appenders/SampleAppendersApp/cs/src/Appender/MessageObjectExpanderAppender.cs
  
  Index: MessageObjectExpanderAppender.cs
  ===================================================================
  #region Copyright & License
  //
  // Copyright 2001-2004 The Apache Software Foundation
  //
  // Licensed 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.Reflection;
  
  using log4net.Core;
  
  namespace SampleAppendersApp.Appender
  {
        /// <summary>
        /// Forwarding Appender that introspects the <see 
cref="LoggingEvent.MessageObject"/>
        /// and extracts all public properties and fields and stores them in the
        /// <see cref="LoggingEvent.Properties"/>
        /// </summary>
        public class MessageObjectExpanderAppender : 
log4net.Appender.ForwardingAppender
        {
                override protected void Append(LoggingEvent loggingEvent)
                {
                        object messageObject = loggingEvent.MessageObject;
  
                        if (messageObject != null && !(messageObject is string))
                        {
                                Type messageType = messageObject.GetType();
  
                                // Get all public instance properties
                                foreach(PropertyInfo propertyInfo in 
messageType.GetProperties(BindingFlags.Instance | BindingFlags.Public))
                                {
                                        if (propertyInfo.CanRead)
                                        {
                                                
loggingEvent.Properties[propertyInfo.Name] = 
propertyInfo.GetValue(messageObject, null);
                                        }
                                }
                                // Get all public instance fileds
                                foreach(FieldInfo fieldInfo in 
messageType.GetFields(BindingFlags.Instance | BindingFlags.Public))
                                {
                                        loggingEvent.Properties[fieldInfo.Name] 
= fieldInfo.GetValue(messageObject);
                                }
                        }
  
                        // Delegate to base class which will forward
                        base.Append(loggingEvent);
                }
        }
  }
  
  
  
  1.2       +15 -0     
logging-log4net/examples/net/1.0/Appenders/SampleAppendersApp/cs/src/App.config
  
  Index: App.config
  ===================================================================
  RCS file: 
/home/cvs/logging-log4net/examples/net/1.0/Appenders/SampleAppendersApp/cs/src/App.config,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- App.config        13 Oct 2004 21:38:23 -0000      1.1
  +++ App.config        12 Nov 2004 22:36:02 -0000      1.2
  @@ -47,10 +47,25 @@
                        <from value="[EMAIL PROTECTED]" />
                        <smtpHost value="my-smtp-server" /> 
                </appender>
  +             
  +             <appender name="ColoredConsoleAppender" 
type="log4net.Appender.ColoredConsoleAppender">
  +                     <layout type="log4net.Layout.PatternLayout" 
value="%date [%thread] %-5level %logger - %properties%newline" />
  +                     <mapping>
  +                             <level value="DEBUG" />
  +                             <backColor value="Blue" />
  +                             <foreColor value="White" />
  +                     </mapping>
  +             </appender>
  +             
  +             <appender name="MessageObjectExpanderAppender" 
type="SampleAppendersApp.Appender.MessageObjectExpanderAppender, 
SampleAppendersApp">
  +                     <appender-ref ref="ColoredConsoleAppender" />
  +             </appender>
  +             
   
                <!-- Setup the root category, add the appenders and set the 
default level -->
                <root>
                        <level value="ALL" />
  +                     <appender-ref ref="MessageObjectExpanderAppender" />
                        <appender-ref ref="ConsoleAppender" />
                        <appender-ref ref="MessageBoxAppender" />
                        <appender-ref ref="FireEventAppender" />
  
  
  
  1.2       +25 -0     
logging-log4net/examples/net/1.0/Appenders/SampleAppendersApp/cs/src/LoggingExample.cs
  
  Index: LoggingExample.cs
  ===================================================================
  RCS file: 
/home/cvs/logging-log4net/examples/net/1.0/Appenders/SampleAppendersApp/cs/src/LoggingExample.cs,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- LoggingExample.cs 13 Oct 2004 21:38:23 -0000      1.1
  +++ LoggingExample.cs 12 Nov 2004 22:36:02 -0000      1.2
  @@ -60,6 +60,9 @@
                        // can make running without logging faster.
                        if (log.IsDebugEnabled) log.Debug("This is a debug 
message");
   
  +                     // Log a custom object as the log message
  +                     log.Warn(new MsgObj(42, "So long and thanks for all the 
fish"));
  +
                        try
                        {
                                Bar();
  @@ -106,6 +109,28 @@
                private static void 
FireEventAppender_MessageLoggedEventHandler(object sender, 
MessageLoggedEventArgs e)
                {
                        System.Diagnostics.Trace.WriteLine("EVENT ****" + 
e.LoggingEvent.RenderedMessage + "****");
  +             }
  +
  +             public class MsgObj
  +             {
  +                     private readonly int _type;
  +                     private readonly string _error;
  +
  +                     public MsgObj(int type, string error)
  +                     {
  +                             _type = type;
  +                             _error = error;
  +                     }
  +
  +                     public int MessageType
  +                     {
  +                             get { return _type; }
  +                     }
  +
  +                     public string ErrorText
  +                     {
  +                             get { return _error; }
  +                     }
                }
        }
   }
  
  
  

Reply via email to