c# - 带有 Entity Framework 5 和 MVC4 的 Log4net

标签 c# entity-framework asp.net-mvc-4 entity-framework-5 log4net

所以我开始这个新项目并想使用 Log4net 登录到数据库。我将 EF 用于其他用途,并且连接正常。出于某种原因,L4N 没有记录任何内容,但也没有抛出任何错误。只是想知道我可能缺少哪些步骤,希望有人能指出。我需要以某种方式“保存”到数据库吗?提前致谢。

我的 web.config:

<log4net> 
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
  <bufferSize value="100" />
  <connectionType value="System.Data.EntityClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  <connectionString value="data source=myserver;initial catalog=Reporting;integrated security=false;persist security info=True;User ID=myid;Password=mypassword" />
  <commandText value="INSERT INTO [myschema].[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="LogFileAppender" />
</root>

和我的 Controller :

 ...
 using log4net;
 using System.Reflection;

namespace MyNames.Controllers
{
  public class ClientController : Controller
  {    
     ReportingEntities db = new ReportingEntities();
     private readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

     public ActionResult Index()
     {  
         this.log.Debug("Sample message to log to Db");
         return View();
     }
   }
 }

编辑:所以我做了 gorilly 建议的模组,但仍然不起作用。刚好检查输出窗口,即使我启用了调试它仍然显示这个 . enter image description here . 尝试了来自 here 的调试建议但没有抛出任何错误。

来 self 的 log4net 内部调试文件:

log4net: Assembly [DotNetOpenAuth.Core, Version=4.1.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246] Loaded From [C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\bf082a83\4eb20e9a\assembly\dl3\c62a3103\e01aa9f6_fda1cf01\DotNetOpenAuth.Core.dll]
log4net: Assembly [DotNetOpenAuth.Core, Version=4.1.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246] does not have a RepositoryAttribute specified.
log4net: Assembly [DotNetOpenAuth.Core, Version=4.1.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246] using repository [log4net-default-repository] and repository type [log4net.Repository.Hierarchy.Hierarchy]
log4net: Creating repository [log4net-default-repository] using type [log4net.Repository.Hierarchy.Hierarchy]
log4net: Shutdown called on Hierarchy [log4net-default-repository]

最佳答案

将此行添加到 Global.asax.cs(在 Application_Start() 中):

log4net.Config.XmlConfigurator.Configure();

另外,您可以打开 log4net 调试,通过将此行添加到 Web.config 中的 <appSettings> 下来帮助您找出问题所在。 :

编辑: 下面有 value="false" , 但应该是 value="true" .

<add key="log4net.Internal.Debug" value="true"/>

编辑:

您可以通过将以下内容添加到您的 Web.config 来将 log4net 的内部调试日志记录发送到一个文件(参见官方解释 here ):

  <system.diagnostics>
    <trace autoflush="true">
      <listeners>
        <add
            name="textWriterTraceListener"
            type="System.Diagnostics.TextWriterTraceListener"
            initializeData="C:\mylogdirectory\log4net_debug.txt" />
      </listeners>
    </trace>
  </system.diagnostics>

关于c# - 带有 Entity Framework 5 和 MVC4 的 Log4net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25272842/

相关文章:

c# - 复制一个 mongodb 集合

c# - 当我引发事件时,它始终为null

entity-framework - EF 4.1 在多对多关系上映射继承

C# Entity Framework 4 导航属性导致提交时性能下降

c# - MVC 4 具有不同 View 文件夹的相同逻辑

jquery - 使用 ICanHaz 从 JSON 渲染 HTML 字符串

asp.net-mvc - 升级到 ASP.NET MVC 5 和 Web API 2 后如何解决 nuget DLL hell

c# - 如何在 Linux 上将 DNX 'console app' 作为后台服务运行?

c# - C# 中的 Mongodb $near 查询?

entity-framework - IdentityServer 3 + Asp.net Identity : Scopes, 声明和客户端 - 澄清