0

log4net을 실제로 데이터베이스에 기록 할 수 없습니다. 먼저 log4net을 프로젝트 (MVC)에 추가했습니다.log4net 용 SQL appender가 MVC5 응용 프로그램에서 작동하지 않습니다.

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; } 
} 

I 첨가 : 그러면 I 내가 다음 모델에 추가

log4net.GlobalContext.Properties["ApplicationName"] = "MvcApp"; 
log.Debug("Application started"); 

와 방법을 종료 Global.asax.cs 위해 Application_Start에서의 AssemblyInfo.cs

[assembly: log4net.Config.XmlConfigurator(Watch = true)] 

이 추가 this to 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

bufferSize를 1 (ONE)로 변경했지만 여러 log.Debug() 호출에도 불구하고 아무 것도 기록되지 않습니다. 나는 IsConfigured를 체크했고 그것은 사실이다. 왜 기록되지 않습니까? –

답변

1

마지막으로 작동합니다. 어떤 도움이하는 log4net에 내부 디버그를 활성화하고는 SQL 문이 잘못된 것을 판명 할 데

Log4net with Entity Framework 5 and MVC4

에 설명 된대로 텍스트 파일 내부 디버그 로그 것이 었습니다, 내 로그 테이블이 가진 다른 이름을 사용하고 실수로 Date 열의 이름을 Description으로 지정했습니다. 이러한 모든 오류는 내부 디버그에 나타납니다.

그걸 수정하면 효과가있었습니다.

관련 문제