2

I want to configure log4net to have multiple files and each file stores for each dll...

How can I configure that?

<log4net>
<appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="logs/mylog.log"/>
  <appendToFile value="true"/>
  <rollingStyle value="Size"/>
  <maximumFileSize value="10MB"/>
  <staticLogFileName value="true"/>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss.fff},[%thread],%-5level,%logger,[%ndc],%message%newline"/>
  </layout>
</appender>
 <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
  <mapping>
    <level value="ERROR"/>
    <foreColor value="Red"/>
  </mapping>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss.fff} [%thread] %-5level %logger - %message%newline"/>
  </layout>
</appender>
<root>
  <level value="INFO"/>
  <appender-ref ref="FileAppender"/>
  <appender-ref ref="ColoredConsoleAppender"/>
</root>
</log4net>

Let's say I have 3 dlls, Test.Scan.dll, Test.Warn.dll and Test.Processor.dll. Should I configure as the dll name or the Namespace?

I know there is "filter" in "appender" level. But how should I do that?

king jia
  • 692
  • 8
  • 20
  • 43

1 Answers1

1

If you use the standard logger naming convention, it won't be necessary to use a filter: the names of the loggers. Just add loggers that are named after the common root you want to use and set the distinct appenders in these loggers

<appender name="FileAppender.Test.Scan" type="log4net.Appender.RollingFileAppender">
    ...
</appender>

<appender name="FileAppender.Test.Warn" type="log4net.Appender.RollingFileAppender">
    ...
</appender>

<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
    ...
</appender>

<!-- Set root logger level to DEBUG and its only appender to A1 -->
<root>
    <level value="DEBUG" />
    <appender-ref ref="ColoredConsoleAppender" />
</root>

<logger name="Test.Scan">
    <level value="INFO" />
    <appender-ref ref="FileAppender.Test.Scan" />
</logger>

<logger name="Test.Warn">
    <level value="INFO" />
    <appender-ref ref="FileAppender.Test.Warn" />
</logger>

The loggers with a name starting with Test.Warn will pick the <logger name="Test.Warn"> configuration node appenders. Of course, if you were to have a logger named "Test" its configuration would be applied to all loggers whose name start with "Test"

samy
  • 14,832
  • 2
  • 54
  • 82