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