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 2005/06/15 19:29:52 UTC

cvs commit: logging-log4net/examples/net/1.0/Appenders/SampleAppendersApp/cs/src/Appender MessageObjectExpanderAppender.cs

nicko       2005/06/15 10:29:52

  Modified:    examples/net/1.0/Appenders/SampleAppendersApp/cs/src/Appender
                        MessageObjectExpanderAppender.cs
  Log:
  Applied patch from Ron Grabowski that adds support for selecting either properties or fields
  
  Revision  Changes    Path
  1.4       +80 -58    logging-log4net/examples/net/1.0/Appenders/SampleAppendersApp/cs/src/Appender/MessageObjectExpanderAppender.cs
  
  Index: MessageObjectExpanderAppender.cs
  ===================================================================
  RCS file: /home/cvs/logging-log4net/examples/net/1.0/Appenders/SampleAppendersApp/cs/src/Appender/MessageObjectExpanderAppender.cs,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- MessageObjectExpanderAppender.cs	15 Jun 2005 16:26:40 -0000	1.3
  +++ MessageObjectExpanderAppender.cs	15 Jun 2005 17:29:51 -0000	1.4
  @@ -1,60 +1,82 @@
  -#region Copyright & License
  -//
  -// Copyright 2001-2005 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)
  +#region Copyright & License
  +//
  +// Copyright 2001-2005 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
  +	{
  +		private bool m_expandProperties = true;
  +		private bool m_expandFields = true;
  +
  +		override protected void Append(LoggingEvent loggingEvent)
  +		{
  +			object messageObject = loggingEvent.MessageObject;
  +
  +			if (messageObject != null && !(messageObject is string))
  +			{
  +				Type messageType = messageObject.GetType();
  +
  +				if (m_expandProperties)
  +				{
  +					// 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);
  +						}
  +					}
  +				}
  +
  +				if (m_expandFields)
  +				{
  +					// Get all public instance fields
  +					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);
  +		}
  +
  +		public bool ExpandProperties
   		{
  -			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 fields
  -				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);
  +			get { return m_expandProperties; }
  +			set { m_expandProperties = value; }
   		}
  -	}
  -}
  +
  +		public bool ExpandFields
  +		{
  +			get { return m_expandFields; }
  +			set { m_expandFields = value; }
  +		}
  +	}
  +}