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; }

  +             }
  +     }
  +}
  
  
  

Reply via email to