nicko       2005/05/31 07:15:32

  Modified:    examples/net/1.0/Appenders/SampleAppendersApp/cs/src
                        App.config
  Added:       examples/net/1.0/Appenders/SampleAppendersApp/cs/src/Appender
                        MsmqAppender.cs
  Log:
  Added simple example of MSMQ appender
  
  Revision  Changes    Path
  1.3       +9 -1      
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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- App.config        12 Nov 2004 22:36:02 -0000      1.2
  +++ App.config        31 May 2005 14:15:32 -0000      1.3
  @@ -61,16 +61,24 @@
                        <appender-ref ref="ColoredConsoleAppender" />

                </appender>

                

  +             <appender name="MsmqAppender" 
type="SampleAppendersApp.Appender.MsmqAppender, SampleAppendersApp">

  +                     <queueName value=".\Private$\log-test" />

  +                     <labelLayout value="LOG [%level] %date" />

  +                     <layout type="log4net.Layout.PatternLayout" 
value="%date [%thread] %-5level %logger - %message%newline" />

  +             </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" />

                        <appender-ref ref="SimpleSmtpAppender" />

  +                     <appender-ref ref="MsmqAppender" />

                </root>

                

        </log4net>

  -</configuration>
  \ No newline at end of file
  +</configuration>

  
  
  
  1.1                  
logging-log4net/examples/net/1.0/Appenders/SampleAppendersApp/cs/src/Appender/MsmqAppender.cs
  
  Index: MsmqAppender.cs
  ===================================================================
  #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.Messaging;

  

  using log4net.Core;

  

  namespace SampleAppendersApp.Appender

  {

        public class MsmqAppender : log4net.Appender.AppenderSkeleton

        {

                private MessageQueue m_queue;

                private string m_queueName;

                private log4net.Layout.PatternLayout m_labelLayout;

  

                public MsmqAppender()

                {

                }

  

                public string QueueName

                {

                        get { return m_queueName; }

                        set { m_queueName = value; }

                }

  

                public log4net.Layout.PatternLayout LabelLayout

                {

                        get { return m_labelLayout; }

                        set { m_labelLayout = value; }

                }

  

                override protected void Append(LoggingEvent loggingEvent) 

                {

                        if (m_queue == null)

                        {

                                if (MessageQueue.Exists(m_queueName))

                                {

                                        m_queue = new MessageQueue(m_queueName);

                                }

                                else

                                {

                                        ErrorHandler.Error("Queue 
["+m_queueName+"] not found");

                                }

                        }

  

                        if (m_queue != null)

                        {

                                Message message = new Message();

  

                                message.Label = RenderLabel(loggingEvent);

  

                                using(System.IO.MemoryStream stream = new 
System.IO.MemoryStream())

                                {

                                        System.IO.StreamWriter writer = new 
System.IO.StreamWriter(stream, new System.Text.UTF8Encoding(false, true));

                                        base.RenderLoggingEvent(writer, 
loggingEvent);

                                        writer.Flush();

                                        stream.Position = 0;

                                        message.BodyStream = stream;

  

                                        m_queue.Send(message);

                                }

                        }

                }

  

                private string RenderLabel(LoggingEvent loggingEvent)

                {

                        if (m_labelLayout == null)

                        {

                                return null;

                        }

  

                        System.IO.StringWriter writer = new 
System.IO.StringWriter();

                        m_labelLayout.Format(writer, loggingEvent);

  

                        return writer.ToString();

                }

        }

  }

  
  
  

Reply via email to