You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4net-dev@logging.apache.org by ni...@apache.org on 2004/11/12 23:36:02 UTC

cvs commit: logging-log4net/examples/net/1.0/Appenders/SampleAppendersApp/cs/src App.config LoggingExample.cs

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="me@me.co.uk" />
   			<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; }
  +			}
   		}
   	}
   }