【问题标题】:log4Net - Logging to Entity Framework database located in separate projectlog4Net - 记录到位于单独项目中的实体框架数据库
【发布时间】:2017-06-23 19:34:24
【问题描述】:

我首先使用实体​​框架代码,并尝试让 log4Net 登录到我的 SQL Server 数据库。我将缓冲区大小值设置为 1,并添加了

log4net.Config.XmlConfigurator.Configure(); 

到我的Global.asax 文件。

我也加了

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

但是,仍然没有任何内容输出到我的 SQL Server 数据库。我在一个单独的项目中有我的实体框架的东西,其中有一个 ErrorLog 数据模型。我的 log4Net 设置在我的 web 项目的 web.config 中,并且 web 项目引用了我的 Entity Framework 项目。

这是我在 web.config 中为 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>

我没有收到任何错误。不知道还能做什么。我已经尝试在我的项目的 app.config 中添加那些 log4Net 设置来处理所有实体框架的东西,但没有成功。任何帮助,将不胜感激。谢谢。

【问题讨论】:

    标签: asp.net entity-framework model-view-controller log4net


    【解决方案1】:

    经过一番挖掘,我能够弄清楚这一点。我的连接类型值是

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

    而不是

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

    注意 connectionType 值。更改后它起作用了。希望它可以帮助某人。

    【讨论】:

      【解决方案2】:

      您必须使用委托设置 context.Database.Log,以便 EF 从您的数据库中输出任何内容。

      如果只使用 nLog ,例如:

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

      不知道 log4net 会怎么样,但它是类似的东西

      【讨论】:

      • 感谢您的帮助,埃兰。在您发布几分钟后,我能够弄清楚,这是因为我的 web.config 中的 connectionType 值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      • 2014-06-04
      • 2021-10-01
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多