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