Log 4Net RemotingAppender для регистрации файлов на удаленном компьютере - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь создать RemoteAppenderSink, который будет находиться на компьютере в сети. Цель этого состоит в том, чтобы сделать фактическое ведение журнала (с помощью приложения Rolnding file Appender) на этом компьютере, в то время как журналы создаются на другом компьютере и передаются через удаленный Appender. Я успешно смог создать создать Sink и получать сообщения. Однако, когда я пытаюсь добавить Rolling file Appender в Sink, он не работает. (Rolling File не создается). Я получаю сообщения и могу распечатать их на консоли. Так что удаленный appender и snk как таковой работоспособны. Часть 2, где я хочу использовать другие приложения на Snk - это то, что не работает. Я открыт для любых идей, которые помогли бы выполнить sh ведение журнала (в файл).

Проблема, объясненная на диаграмме здесь

Give below is the source and config. i am not sure if this is the correct way to do it.

public partial class RemoteAppenderSink : MarshalByRefObject, RemotingAppender.IRemoteLoggingSink, IRemoteAppenderSnk
    {
        public event EventHandler<LoggingSinkEventArgs> MessageRecieved;
        public void LogEvents(LoggingEvent[] events)
        {
            var Mr = MessageRecieved;
            if (null == Mr)    {  return;   }
            MessageRecieved(this, new LoggingSinkEventArgs { LoggingEvents = events });
        }
    }
 public class Listner
    {
        private RemoteAppenderSink RemoteSnk = null;
        private static readonly log4net.ILog log = LogManager.GetLogger(typeof(Listner));
        public Listner()
        {
            log.Info("Inside Listner");
            RemoteSnk = new RemoteAppenderSink();
            RemotingConfiguration.Configure("RemoteListner.exe.config", false);
            RemotingServices.Marshal(RemoteSnk, "RemoteLogger");
            RemoteSnk.MessageRecieved += RemoteSnk_MessageRecieved;
        }

        private void RemoteSnk_MessageRecieved(object sender, RemoteAppenderSink.LoggingSinkEventArgs e)
        {
            foreach (var ev in e.LoggingEvents)
            {
                Console.WriteLine($"Message is {ev.RenderedMessage} Type {ev.Level} Thread {ev.ThreadName} ");
                log.Info(ev.RenderedMessage); ///Does not work
            }
        }
     }

App Config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.config.Log4NetConfigurationSectionHandler, log4net" />
   </configSections>
  <system.runtime.remoting>
    <application name="RemoteLogger">
      <channels>
        <channel name="logging sink" ref="tcp server" port="8888"/>
      </channels>
    </application>
  </system.runtime.remoting>
  <log4net>
  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="D:\RemoteRollinglogFile.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="10MB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date{ABSOLUTE}  [%logger] [%thread] %level [%M %C] - %message%newline%exception"/>
    </layout>
  </appender>
  <root>
    <level value="ALL" />
     <appender-ref ref="RollingFileAppender"/>
  </root>
  </log4net>
   <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
   </startup>
</configuration>
...