views:

1571

answers:

2

I'm having trouble getting Spring.Net to log, using Log4Net. I'm particulary interested in seeing logging around the Aspects. I'm using a pretty simple log config, similar to that of the MovieFinder example app:

...
<logger name="Spring">
  <level value="DEBUG" /> <!-- Have tried INFO as well, no different -->
  <appender-ref ref="SpringAppender"/>
</logger> 

<appender name="SpringAppender" type="log4net.Appender.RollingFileAppender">
  <file value="..\Log\Spring_Log.txt"/>
  <appendToFile value="true"/>
  <maximumFileSize value="100MB"/>
  <maxSizeRollBackups value="2"/>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date %-5level [%thread] %logger - %message%newline"/>
  </layout>
</appender>
...

The file "Spring_Log.txt" is created, but nothing is logged to it (i.e. empty file). Log4Net is currently logging correctly for NHibernate and our custom app logging. I'm using Spring.Net v1.2.0.20313 and Log4Net v1.2.10.0.

Has anybody else had this problem that they were able to resolve? Many thanks for any help, cheers.

+1  A: 

Spring.NET uses Common.Logging. Did you configure Common.Logging to log to log4net? See http://netcommon.sourceforge.net/documentation.html for the documentation

hth, Erich

Erich Eichinger
+2  A: 

As Erich said, you need to configure Common.Logging. Your log4net configuration file is fine. Here is what I’ve got using your configuration file:

2009-05-02 19:08:40,890 DEBUG [10] Spring.Objects.Factory.Support.AbstractObjectDefinitionReader - Loading XML object definitions from config [C:\Documents and Settings\pczapla\My Documents\Visual Studio 2008\Projects\TimeLogger\TimeLogger\bin\Debug\TimeLogger.exe.config#spring/objects]
2009-05-02 19:08:40,905 DEBUG [10] Spring.Objects.Factory.Support.AbstractObjectDefinitionReader - Using the following XmlReader implementation : System.Xml.XsdValidatingReader
2009-05-02 19:08:40,921 DEBUG [10] Spring.Objects.Factory.Xml.DefaultObjectDefinitionDocumentReader - Loading object definitions.
2009-05-02 19:08:40,921 DEBUG [10] Spring.Objects.Factory.Xml.ObjectDefinitionParserHelper - Loading object definitions...

Here is a quick guide how to configure Common.Logging:

Add Common.Logging & Common.Logging.Log4Net assemblies they are shipped with spring in lib folder (C:\Program Files\Spring.NET 1.2.0\lib\Net\2.0\). Then Add the following configuration to your app.config:

<configuration>
 </configSections>
  ...
  <sectionGroup name="common">
   <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
  </sectionGroup>
 </configSections>
 ...
 <common>
  <logging>
   <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4net">
    <!-- Common Logging assumes that log4net is initialized -->
    <arg key="configType" value="EXTERNAL"/>
    <!-- Or it can configure log4net for you
    <arg key="configType" value="FILE-WATCH" />
    <arg key="configFile" value="path\to\your\log4net.config" />
    -->
   </factoryAdapter>
  </logging>
 </common>
</configuration>

That is it. Now you should get debug messages from spring.

Piotr Czapla