0

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) に設定されます。

ここで他に何が欠けていますか?

4

1 に答える 1

1

それは最終的に動作します。助けになったのは、log4net で内部デバッグを有効にし、内部デバッグをテキスト ファイルに記録することでした。

Entity Framework 5 および MVC4 を使用した Log4net

SQL ステートメントが間違っていることが判明したため、ログ テーブルには別の名前が付けられ、誤って Date 列に [説明] という名前を付けていました。これらのエラーはすべて、内部デバッグで表示されました。

それを修正したところ、うまくいきました。

于 2014-12-18T23:04:30.197 に答える