Thanks Loren. However, it still doesn't work. I looked into the source for
the remote appender and at no point I see the channel registration. What is
version of log4net ar you using? When you sub-classes the appender, did you
handle the .net remoting connection (channel services and remoting
configuration) yourself?
Loren Keagle wrote:
>
> With a buffer of 95, you won't see anything on the remote appender until
> 95 log events have been queued. I ended up subclassing the appender to
> add a timer to flush automatically every N seconds. Try setting the
> buffer length down to 1 or disable it entirely.
>
> ~Loren
>
> ppden wrote:
>> Greetings,
>>
>> I have been using log4net for a while and I think it rocks! It has
>> allowed
>> me to focus on the business functionality and have provided a very
>> reliable
>> and elegant platform for logging. So thanks to the people who maintain
>> it.
>>
>> I have been trying all day to get the remote appender to work. I have
>> looked
>> for examples but didn't find anything other than going into the source
>> code
>> and checking out the unit tests.
>>
>> Here is my client class:
>>
>> using System;
>> using System.Collections.Generic;
>> using System.Text;
>> using System.Runtime.Remoting;
>> using System.Runtime.Remoting.Channels;
>> using System.Runtime.Remoting.Channels.Tcp;
>>
>> using log4net.Core;
>> using IRemoteLoggingSink =
>> log4net.Appender.RemotingAppender.IRemoteLoggingSink;
>>
>> namespace Miner.Responder.MultiSpeakInterfaces.Common
>> {
>> public class RemoteLoggingSinkImpl : MarshalByRefObject,
>> IRemoteLoggingSink
>> {
>> public static readonly RemoteLoggingSinkImpl Instance =
>> new
>> RemoteLoggingSinkImpl();
>> public LoggingEvent[] Events = null;
>> private TcpChannel m_remotingChannel;
>>
>> #region Public Instance Constructors
>> private RemoteLoggingSinkImpl()
>> {
>> }
>>
>> #endregion Public Instance Constructors
>>
>> public void RegisterRemotingServerChannel()
>> {
>> if (m_remotingChannel == null)
>> {
>> m_remotingChannel = new TcpChannel(8085);
>>
>> // Setup remoting server
>> try
>> {
>>
>> ChannelServices.RegisterChannel(m_remotingChannel);
>> }
>> catch(Exception)
>> {
>> }
>>
>> // Marshal the sink object
>>
>> RemotingServices.Marshal(RemoteLoggingSinkImpl.Instance,
>> "LoggingSink", typeof(IRemoteLoggingSink));
>> }
>> }
>> #region Implementation of IRemoteLoggingSink
>>
>> /// <summary>
>> /// Logs the events to the repository.
>> /// </summary>
>> /// The events to log.
>> /// <remarks>
>> /// The events passed are logged to the <see
>> cref="LoggerRepository"/>
>> /// </remarks>
>> public void LogEvents(LoggingEvent[] events)
>> {
>> Events = events;
>> }
>>
>> #endregion Implementation of IRemoteLoggingSink
>>
>> #region Override implementation of MarshalByRefObject
>>
>> /// <summary>
>> /// Obtains a lifetime service object to control the
>> lifetime
>> /// policy for this instance.
>> /// </summary>
>> /// <returns>
>> /// <c>null</c> to indicate that this instance should
>> live
>> /// forever.
>> /// </returns>
>> public override object InitializeLifetimeService()
>> {
>> return null;
>> }
>>
>> #endregion Override implementation of MarshalByRefObject
>> }
>> }
>>
>>
>> Pretty simple, correct?
>>
>> My server is also very simple. Here is the configuration:
>>
>> <?xml version="1.0" encoding="utf-8" ?>
>> <configuration>
>>
>> <configSections>
>> <section name="log4net"
>> type="System.Configuration.IgnoreSectionHandler"
>> />
>> </configSections>
>> <log4net>
>> <root>
>> <level value="ERROR" />
>> <appender-ref ref="EventLogAppender" />
>> <appender-ref ref="FileAppender" />
>> <appender-ref ref="RemotingAppender"/>
>> <level value="INFO"/>
>> <appender-ref ref="FileAppender" />
>> <appender-ref ref="RemotingAppender"/>
>> </root>
>>
>> <appender name="TraceAppender" type="log4net.Appender.TraceAppender">
>> <layout type="log4net.Layout.PatternLayout">
>> <conversionPattern
>> value="%date [%thread] %-5level %logger [%property{NDC}] -
>> %message%newline" />
>> </layout>
>> </appender>
>>
>> <appender name="ConsoleAppender"
>> type="log4net.Appender.ConsoleAppender">
>> <layout type="log4net.Layout.PatternLayout">
>> <conversionPattern
>> value="%date [%thread] %-5level %logger [%property{NDC}] -
>> %message%newline" />
>> </layout>
>> </appender>
>>
>> <appender name="FileAppender" type="log4net.Appender.FileAppender">
>> <file value="c:\\Log\\log-file.txt" />
>> <appendToFile value="true" />
>> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
>> <layout type="log4net.Layout.PatternLayout">
>> <conversionPattern
>> value="%date [%thread] %-5level %logger [%property{NDC}] -
>> %message%newline" />
>> </layout>
>> </appender>
>>
>> <appender name="EventLogAppender"
>> type="log4net.Appender.EventLogAppender" >
>> <applicationName value="Test Service" />
>> <layout type="log4net.Layout.PatternLayout">
>> <conversionPattern value="%date [%thread] %-5level %logger
>> [%property{NDC}] - %message%newline" />
>> </layout>
>> </appender>
>>
>> <appender name="RemotingAppender"
>> type="log4net.Appender.RemotingAppender" >
>> <sink value="tcp://localhost:8085/LoggingSink" />
>> <lossy value="false" />
>> <bufferSize value="95" />
>> <onlyFixPartialEventData value="true" />
>> </appender>
>>
>>
>>
>> </log4net>
>>
>> </configuration>
>>
>> and my server code:
>>
>> using System;
>> using System.Collections.Generic;
>> using System.ComponentModel;
>> using System.Data;
>> using System.Drawing;
>> using System.Linq;
>> using System.Text;
>> using System.Threading;
>> using System.Windows.Forms;
>>
>> namespace WindowsFormsApplication1
>> {
>> public partial class Form1 : Form
>> {
>> private static readonly log4net.ILog _log =
>> log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
>> public Form1()
>> {
>> InitializeComponent();
>> }
>>
>> private void button1_Click(object sender, EventArgs e)
>> {
>> while (true)
>> {
>> _log.Info(DateTime.Now.ToLongTimeString());
>> Thread.Sleep(1000 * 10);
>> }
>> }
>> }
>> }
>>
>>
>> I can see the remoting listener start but a connection is never made. The
>> server is generating the messages, I can see then on the event log. Any
>> ideas?
>>
>> Cheers,
>>
>> PP
>>
>>
>> ------------------------------------------------------------------------
>>
>>
>> No virus found in this incoming message.
>> Checked by AVG - www.avg.com
>> Version: 8.5.339 / Virus Database: 270.12.33/2120 - Release Date:
>> 05/18/09 06:28:00
>>
>>
>
>
>
--
View this message in context:
http://www.nabble.com/Remote-Appender-tp23605546p23607353.html
Sent from the Log4net - Users mailing list archive at Nabble.com.