Aoguye
Aoguye

Reputation: 71

log4Net - Logging to Entity Framework database located in separate project

I'm using Entity Framework code-first, and trying to get log4Net to log to my SQL Server database. I have my buffer size value set to 1, and added

log4net.Config.XmlConfigurator.Configure(); 

to my Global.asax file.

I've also added

<section name="log4net" 
         type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />  

However, there's still nothing outputting to my SQL Server database. I have my Entity Framework stuff in a separate project with an ErrorLog data model in there. My log4Net settings are in the web.config for my web project, and the web project has a reference to my Entity Framework project.

Here's what I have in my web.config for log4Net

<log4net>
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
        <bufferSize value="1" />
        <threshold value="ALL" />
        <connectionType value="System.Data.EntityClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <connectionString value="data source=(LocalDb)\MSSQLLocalDB;initial catalog=AutoForms;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" />
        <commandText value="INSERT INTO ErrorLog ([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>
        <appender-ref ref="AdoNetAppender" />
    </root>
</log4net>

I'm not getting any errors. Not sure what else to do. I've tried added those log4Net settings in the app.config of my project that handles all of the Entity Framework stuff with no success. Any help would be appreciated. Thanks.

Upvotes: 4

Views: 2613

Answers (2)

eran otzap
eran otzap

Reputation: 12533

You have to set context.Database.Log with a delegate to EF output any thing from your DB.

if for one use nLog , for example :

    context.Database.Log = s=> LogManager.GetLogger("myLogger").Info(s);

Don't know how it would be with log4net but it's something similar

Upvotes: 0

Aoguye
Aoguye

Reputation: 71

I was able to figure this out after digging around for a bit. My value for connection type was

<connectionType value="System.Data.EntityClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

instead of

<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

Notice the connectionType value. It worked after changing this. Hope it helps someone.

Upvotes: 2

Related Questions