3
votes

I have a library that has my DAL. In it, I use CastleWindsor and have logging configured.

The DAL is used by a WCF service. In the WCF service, I have the log4net.config:

<log4net>
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
        <bufferSize value="100" />
        <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <connectionString value="data source=MYMACHINE\SQLEXPRESS;initial catalog=GEMS;integrated security=true;persist security info=True" />
        <commandText value="INSERT INTO Application_Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
        <parameter>
            <parameterName value="@log_date" />
            <dbType value="DateTime" />
            <layout type="log4net.Layout.RawTimeStampLayout" />
        </parameter>
        <parameter>
            <parameterName value="@thread" />
            <dbType value="String" />
            <size value="255" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%thread" />
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@log_level" />
            <dbType value="String" />
            <size value="50" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%level" />
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@logger" />
            <dbType value="String" />
            <size value="255" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%logger" />
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@message" />
            <dbType value="String" />
            <size value="4000" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%message" />
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@exception" />
            <dbType value="String" />
            <size value="2000" />
            <layout type="log4net.Layout.ExceptionLayout" />
        </parameter>
    </appender>
    <root>
        <level value="INFO" />
        <appender-ref ref="AdoNetAppender" />
    </root>
</log4net>

I actually use this exact config file in the app that consumes the WCF service and it works just fine (using Castle Windsor w/Log4net), so I'm pretty sure it's okay. The log4net.config file is located in the root of the WCF project and is deployed into the root of the WCF service in IIS.

In my DAL, I have a LoggerInstaller:

public class LoggerInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.AddFacility<LoggingFacility>(f => f.UseLog4Net());
    }
}

In an example class, I simply have a property as so:

public ILogger Logger { get; set; }

The value of Logger is getting set to a valid logger by Castle, but nothing is getting logged to the DB, except from the main application that consumes the WCF service.

I can't figure out what I've got messed up.

1

1 Answers

2
votes

Maybe try specifying your config file:

f => f.UseLog4Net(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile)