10

接続文字列を確認しました (サーバー エクスプローラーから取得しました)。

log4net config で commandText を確認しました。

データベースのアクセス許可を確認しました (統合セキュリティは問題なく、log4net クラスの外部で動作します)。

リポジトリの構成済みプロパティを確認しました(構成済みで、構成ファイルが正常であることがわかります)。

また、構成ファイルで定義されたフィールドがデータベース内のテーブルの属性 (フィールド サイズなど) と一致することも確認しました。

何か案は?

私がデバッグしているとき、例外は発生せずに、適切なタイミングですべての適切なメソッドを実行しているようです。

<log4net>

  <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
    <bufferSize value="1" />
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <connectionString value="" />
    <commandText value="INSERT INTO dbo.Log4Net ([Date],[Thread],[Level],[Logger],[Message]) VALUES ('01-01-2001', 'test', 'test', 'test', 'test')"/>
    <!--<commandText value="INSERT INTO dbo.Log4Net ([Date],[Thread],[Level],[Logger],[Message],[Exception],[MachineName],[CultureId],[SourcePage],[Details],[Method]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception, @MachineName, @CultureId, @SourcePage, @Details, @Method)" />-->
    <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>

...more parameters

    <securitycontext type="log4net.Util.WindowsSecurityContext">
      <credentials value="Process">
      </credentials>
    </securitycontext>
  </appender>

  <appender name="FileAppender" type="log4net.Appender.FileAppender">
    <param name="File" value="LogTest.txt"/>
    <param name="AppendToFile" value="true"/>
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-2p %c [%x] - %m%n"/>
    </layout>
  </appender>

  <root>
    <appender-ref ref="ADONetAppender"/>
    <appender-ref ref="FileAppender"/>
  </root>

</log4net>

どちらのアペンダーにも書き込みません。

4

7 に答える 7

20

そうです、何時間も髪を引っ張った後、私はそれをひび割れさせました。

この行:

log4net.Config.XmlConfigurator.Configure();

ロギングの前に (まあ、アプリのできるだけ早い段階で) 入れる必要がありました。それでおしまい。それだけでした。これは、私が非常に安心していると同時にイライラしていた問題の1つです.

于 2012-06-13T16:28:18.817 に答える
12

Log4Netデバッグをオンにすることをお勧めします。

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

舞台裏で発生しているエラーがある場合、それはあなたを正しい方向に向けるかもしれません。出力は、IDEまたはコマンドラインのコンソール出力に送信されます。

于 2012-06-13T14:10:22.633 に答える
11
  1. log4net.dll がアプリケーションと同じフォルダーに配置されているかどうかを確認します。
  2. log4net の自己ログ記録を有効にしてみてください。

    <configuration>
     <appSettings>
      <add key="log4net.Internal.Debug" value="true"/>
     </appSettings>
     <system.diagnostics>
      <trace autoflush="true">
       <listeners>
        <add name="textWriterTraceListener"
             type="System.Diagnostics.TextWriterTraceListener"
             initializeData="C:\tmp\log4net.txt" />
       </listeners>
      </trace>
     </system.diagnostics>
    </configuration>
    

公式の log4net FAQも参照してください。

于 2012-06-13T14:15:46.743 に答える
2

ADONetAppender 構成例ごとに:

<commandText value="INSERT INTO dbo.Log4Net 
    ([Date],[Thread],[Level],[Logger],[Message]) 
    VALUES (@log_date, @thread, @log_level, @logger, @message)"/>

これは ADO.NET パラメーター化されたクエリ形式を使用するため、その構文を使用する必要があります。さらに、db 接続に統合セキュリティを使用したくない場合があります (特に、Web サイトまたはサービスを実行している場合)。ファイル アペンダーには、完全修飾パスを使用することをお勧めします。また、ロガーが書き込み可能であることを確認してください。

指定したデータベースに既にテーブルを作成していると思いますか?

: 実際にログを記録していることを確認するために、デバッグ モードでもトレース アペンダーを設定することをお勧めします。

于 2012-06-13T14:08:04.673 に答える