Member Menu
 
 Monthly JBoss newsletter:
 
Hibernate Books
CaveatEmptor

Configuring log4net for use with NHibernate

For more information about Log4Net, check out its official homepage.

NOTE: Beginning with NHibernate 1.0-rc1 you need to enable log4net logging manually - this means calling log4net.XmlConfigurator.Configure (or BasicConfigurator.Configure) at the start of your application. Previous versions of NHibernate did this internally, but the call was removed to give the user more control over logging configuration.

Here is an example of log4net configuration in App.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
        <configSections>
            <section name="nhibernate"
            type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, 
            PublicKeyToken=b77a5c561934e089" />
            <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
    </configSections>
    
    <nhibernate>
        <!-- Put your nhibernate configuration here -->
    </nhibernate>

    <!-- This section contains the log4net configuration settings -->
    <log4net debug="false">

        <!-- Define some output appenders -->
        <appender name="trace" type="log4net.Appender.TraceAppender, log4net">
            <layout type="log4net.Layout.PatternLayout,log4net">
                <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
            </layout>
        </appender>

        <appender name="console" type="log4net.Appender.ConsoleAppender, log4net">
            <layout type="log4net.Layout.PatternLayout,log4net">
                <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
            </layout>
        </appender>

        <appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net" >
            
            <param name="File" value="log.txt" />
            <param name="AppendToFile" value="true" />
            <param name="RollingStyle" value="Date" />
            <param name="DatePattern" value="yyyy.MM.dd" />
            <param name="StaticLogFileName" value="true" />

            <layout type="log4net.Layout.PatternLayout,log4net">
                <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
            </layout>
        </appender>

        <!-- Setup the root category, add the appenders and set the default priority -->
        
        <root>
            <priority value="INFO" />
            <appender-ref ref="console" />
        </root>
    </log4net>
</configuration>

This defines several appenders (log message destinations), but uses only one of them. Any messages with priority INFO or higher are output to the console. This makes for a lot of messages which are mostly only useful when debugging, so in production the minimum priority would be raised to WARN or ERROR.

Here's another example, a .NET 2.0 web.config file:

<?xml version="1.0"?>

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
    <configSections>
        <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, 
            Version=2.0.0.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
    </configSections>
    <nhibernate>
        <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
        <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
        <add key="hibernate.connection.connection_string" 
            value="Server=servername; Database=dbname; User=username; Password=secret;" />
        <add key="hibernate.connection.isolation" value="ReadCommitted" />
        <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
    </nhibernate>

    <log4net>
        <appender name="NHibernateFileLog" type="log4net.Appender.RollingFileAppender">
            <file value="Logs/nhibernate.txt" />
            <appendToFile value="true" />
            <rollingStyle value="Size" />
            <maxSizeRollBackups value="10" />
            <maximumFileSize value="100KB" />
            <staticLogFileName value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n"  />
            </layout>
        </appender>

        <appender name="GeneralLog" type="log4net.Appender.RollingFileAppender">
            <file value="Logs/general.txt" />
            <appendToFile value="true" />
            <maximumFileSize value="100KB" />
            <rollingStyle value="Size" />
            <maxSizeRollBackups value="5" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n"  />
            </layout>
        </appender>
        <appender name="DataLog" type="log4net.Appender.RollingFileAppender">
            <file value="Logs/data.txt" />
            <appendToFile value="true" />
            <maximumFileSize value="100KB" />
            <rollingStyle value="Size" />
            <maxSizeRollBackups value="5" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n"  />
            </layout>
        </appender>

        <!-- levels: DEBUG, INFO, WARN, ERROR, FATAL -->
        
        <root>
            <level value="DEBUG"/>
            <appender-ref ref="GeneralLog" />
        </root>
        
        <logger name="NHibernate" additivity="false">
            <level value="DEBUG"/>
            <appender-ref ref="NHibernateFileLog"/>
        </logger>
        <logger name="Pushable.Data" additivity="false">
            <level value="DEBUG"/>
            <appender-ref ref="DataLog"/>
        </logger>
    </log4net>
</configuration>

  NEW COMMENT

Enabling log4net 25 Jan 2008, 07:10 jacobcoens
The call to initialize log4net should be
log4net.Config.XmlConfigurator.Configure();
in stead of log4net.XmlConfigurator.Configure.
 
© Copyright 2006, Red Hat Middleware, LLC. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc. [Privacy Policy]