Potyczki z Log4net Cz. 2
using log4net;
using log4net.Config;
public class MyApp
{
private static readonly ILog log = LogManager.GetLogger(typeof(MyApp));
static void Main(string[] args)
{
// BasicConfigurator replaced with XmlConfigurator.
XmlConfigurator.Configure(new System.IO.FileInfo(“log4net.config”));
}
}
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
</layout>
</appender>
I tak każdy appender musi mieć nazwę (name). Potrzebne jest do odwołania się do appendera w konfiguracji loggera. Następnie trzeba zdefiniować layout podając typ i format wiadomości. Dokładną listę wszystkich zmiennych można znaleźć w dokumentacji technicznej log4net. Całą magia polega na tym że potem tylko podajemy treść wiadomości,a reszta jest logowana za nas. Oprócz tego tego niektóre appendery wymagają podania dodatkowych paramterów. Definiuje się ję za pomocą elementu <param> .
Loggery
Ogólnie, istnieją dwa rodzaje loggerów w log4net. Logger nadrzędy – root (opcjonalny), oraz loggery zwykłe które dziedziczą od roota. Żeby zdefiniować loggera trzeba określić minimalny poziom logowania oraz opcjonalnie podać odpowiedni appender:
<logger name="LoggerName">
<level value="DEBUG" />
<appender-ref ref="ConsoleAppender" />
</logger>
Oprócz tego w każdym loggerze można zdefiniować parametr additivity=”true/false” który definiuje czy logger ma dziedziczyć ustawienia z loggerów nadrzędnych.Tak samo jak appender logger może mieć parametry, które definiuje się elementem <param>.
Renderery
<renderer renderingClass="MyClass.MyRenderer"
renderedClass="MyClass.MyFunkyObject" />
Parametry
Parametry są obecne w całej konfiguracji log4neta i ich użycie sprowadza się
do zdefiniowania nazwy parametru (name) i jego wartości (value).
Warto wspomnieć,że możliwy jest też krótszy zapis . Zamiast:<param name="Threshold" value="WARN"/>Można napisać :
<threshold value="WARN"/>Na koniec, żeby to wszystko lepiej ogarnąć chciałbym pokazać,
jak wygląda gotowa konfiguracja.
<?xml version="1.0"?> <log4net debug="false"> <root>
<level value="ALL" />
<appender-ref ref="FileAppender" />
<appender-ref ref="ColoredConsoleAppender" />
</root> <logger name="NHibernate" additivity="false">
<level value="ERROR" />
<appender-ref ref="FileAppender" />
<appender-ref ref="ColoredConsoleAppender" />
</logger> <logger name="NHibernate.SQL">
<level value="ERROR" />
<appender-ref ref="FileAppender" />
</logger> <!-- Logging - Appenders --> <appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<file value="D:LogsLogs.txt" />
<appendToFile value="true" />
<maximumFileSize value="10000KB" />
<maxSizeRollBackups value="100" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d{ISO8601} %-5p %c{1} - %m%n" />
</layout>
</appender> <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
<mapping>
<level value="ERROR" />
<foreColor value="White" />
<backColor value="Red, HighIntensity" />
</mapping>
<mapping>
<level value="WARN" />
<foreColor value="White" />
<backColor value="Yellow" />
</mapping>
<mapping>
<level value="DEBUG" />
<backColor value="Green" />
</mapping>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%m%n" />
</layout>
</appender> </log4net>