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.