Я пытаюсь создать 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>