1

Log4Net can have many loggers, and I wounder how I can do the same with Serilog. I read about writing to different files depending on log level or a filter expression, but did not found anything about using different log names.

public class Logger
{
    public static ILog Log
    {
        get
        {
            return LogManager.GetLogger("DomainLog");
        }
    }

    public static ILog LogUltimo
    {
        get
        {
            return LogManager.GetLogger("UtlimoDomainLog");
        }
    }

    public static ILog CriticalErrorLog
    {
        get
        {
            return LogManager.GetLogger("CriticalBusinessErrorLog");
        }
    }
}

This is the xml configuration:

    <?xml version="1.0" encoding="utf-8" ?>
<log4net>

<logger name="DomainLog">
    <level value="INFO"/>
    <appender-ref ref="DomainLogAppender"/>
</logger>

<appender name="DomainLogAppender" type="log4net.Appender.RollingFileAppender">
    <file value="Logs\DomainLog.log" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="50" />
    <maximumFileSize value="10MB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%d [%t]%-5p- %m%n" />
    </layout>
</appender>

<logger name="UtlimoDomainLog">
    <level value="INFO"/>
    <appender-ref ref="UtlimoDomainLogAppender"/>
</logger>

<appender name="UtlimoDomainLogAppender" type="log4net.Appender.RollingFileAppender">
    <file value="Logs\DomainLog.ultimo.log" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="50" />
    <maximumFileSize value="5MB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%d [%t]%-5p- %m%n" />
    </layout>
</appender>

<logger name="CriticalBusinessErrorLog">
    <level value="ALL"/>
    <appender-ref ref="CriticalBusinessErrorLogAppender"/>
</logger>

<appender name="CriticalBusinessErrorLogAppender" type="log4net.Appender.RollingFileAppender">
    <file value="Logs\CriticalBusinessError.log" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="5MB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%d [%t]%-5p- %m%n" />
    </layout>
</appender>

<logger name="NHibernate.SQL">
    <level value="ALL"/>
    <appender-ref ref="NHibernateAppender"/>
</logger>

<appender name="NHibernateAppender" type="log4net.Appender.RollingFileAppender">
    <file value="Logs\NHibernate.log" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="5MB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%d [%t]%-5p- %m%n" />
    </layout>
</appender>

</log4net>
Martin Andersen
  • 2,460
  • 2
  • 38
  • 66

1 Answers1

2

The usual ways of having separate loggers with Serilog are either with sub-loggers using filters or via Serilog.Sinks.Map, using context properties to decide which logger will include or exclude certain messages.

You can see more detailed answers and examples on these other questions here on SO:


That said, nowadays it's common to have all the logs be sent to a central logging server that you can filter, map correlations, etc. and instead of separate logs, you would "tag" log messages with different SourceContexts (or a different property that you name/know about) which would allow you to easily filter the logs in the central server.

You might want to look at Exceptionless, Seq, Sentry, and similar.

C. Augusto Proiete
  • 24,684
  • 2
  • 63
  • 91
  • 1
    Thanks, very good answer. Our goal is to log to EleaticSearch I havde don that on other projects. But right now I am trying to move all projects to Serilog and prepare it for ElasticSearch – Martin Andersen Feb 16 '21 at 10:19