我无法让log4net实际将任何内容记录到我的数据库中。首先,我将log4net添加到我的项目(MVC)。 然后我在AssemblyInfo.cs
中添加了这个[assembly: log4net.Config.XmlConfigurator(Watch = true)]
在Global.asax.cs Application_Start中,我用
结束方法 log4net.GlobalContext.Properties["ApplicationName"] = "MvcApp";
log.Debug("Application started");
我添加了以下模型:
public class Log
{
[Key]
[DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
[Display(Name="Date")]
public DateTime Description { get; set; }
[Required, StringLength(255)]
[Display(Name="Thread")]
public string Thread { get; set;}
[Required, StringLength(50)]
[Display(Name = "Level")]
public string Level { get; set; }
[Required, StringLength(255)]
[Display(Name = "Logger")]
public string Logger { get; set; }
[Required, StringLength(4000)]
[Display(Name = "Message")]
public string Message { get; set; }
[Required, StringLength(2000)]
[Display(Name = "Exception")]
public string Exception { get; set; }
}
我将此添加到ApplicationDbContext:
public System.Data.Entity.DbSet<Models.Log> Logs { get; set; }
在web.config中,我在configSections元素中添加了它:
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
然后我创建了这个作为web.config中配置元素的子元素:
<log4net debug="true">
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="100" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="Server=windflower.arvixe.com;Initial Catalog=coralys;User Id=coralysdb;Password=CoughUp_23;Application Name=CoralysInternet;" />
<commandText value="INSERT INTO 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="DEBUG"/>
<appender-ref ref="AdoNetAppender" />
</root>
但即使使用log.Debug条目也不会附加任何内容。我尝试将缓冲区设置为5作为测试,但没有结果。然后我添加了一个方法来刷新缓冲区,没有结果。并且级别设置为最大值(DEBUG)。
我还缺少什么?
答案 0 :(得分:1)
终于有效了。有帮助的是在log4net上启用内部调试,并将其记录到内部调试到文本文件,如
中所述Log4net with Entity Framework 5 and MVC4
事实证明,SQL语句错误,我的日志表有不同的名称,而且我错误地将Date列命名为Description。所有这些错误都出现在内部调试中。
解决了这个问题后,它发挥了作用。