0

The question is a continuation of Configure Log4net to write to multiple files, please treat that topic as a reference.

So I have a service running in 2 modes:

  • it is running 24/7 as a Windows service
  • it is triggered on demand from time to time and runs as a Console application

It has a single log4net.config (2 appenders for WinService, 1 appender for console):

<log4net>
<root>
    <level value="INFO" />
    <appender-ref ref="ConsoleAppender" />
    <appender-ref ref="WinService" />
</root>
<logger additivity="false" name="ConsoleService">
    <level value="INFO"/>
    <appender-ref ref="ConsoleService" />
</logger>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    ...
</appender>
<appender name="WinService" type="log4net.Appender.RollingFileAppender">
    ...
</appender>
<appender name="ConsoleService" type="log4net.Appender.RollingFileAppender">
    ...
</appender>

and the log configuration fragment goes like this

  • win service part:
var hostBuilder = Host.CreateDefaultBuilder(args)
            .ConfigureLogging((context, builder) =>
            {
                builder.ClearProviders();
                builder.AddLog4Net();
                builder.AddEventLog();
            })
            ...
            .UseWindowsService();
  • console part:
    new ServiceCollection()
                    .AddSingleton(_ => config)
                    .AddLogging((configure) =>
                    {
                        configure.ClearProviders();
                        configure.AddLog4Net();
                        configure.AddEventLog();
                    })

so as you see in both cases the log4net config is done by calling configure.AddLog4Net();

Question: how to configure the .AddLog4Net() so that the console part could use the ConsoleService logger and the win service part could use the WinService? I need to split the service and console logs into different files.

Sergey Shafiev
  • 3,936
  • 4
  • 23
  • 33

0 Answers0