1

log4net を使用する Web アプリケーションがあります。私の Web アプリケーションは Azure にデプロイされ、そこで完全に動作します。ただし、VS2013 (アップデート 4) を介してローカルで実行すると、log4net はAdoNetAppender.

スローされたすべての例外を中断して例外をチェックしましたが、何もスローされず、内部 log4net デバッグをアクティブにしましたが、デバッグ出力に例外は何も表示されませんでした。

また、何も追加<trust level="Full"/>しませんでしたweb.config...

これも Azure では機能しますが、ローカルでは機能しません。何か案は?ありがとう!

EDITこれが私のweb.configものです(関連する行のみ)

<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=**********;Integrated Security=SSPI" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <log4net debug="true">
    <appender name="ADONetAppender" type="log4net.Appender.AdoNetAppender">
      <bufferSize value="1" />
      <connectionStringName value="DefaultConnection" />
      <commandText value="INSERT INTO Log ([StoreId],[Date],[Thread],[Level],[Logger],[Message],[Exception],[User]) VALUES (@store, @log_date, @thread, @log_level, @logger, @message, @exception, @user)" />
      <parameter>...</parameter>
      ...
    </appender>
    <appender name="DebugAppender" type="log4net.Appender.DebugAppender">
      <immediateFlush value="true" />
      <layout type="log4net.Layout.SimpleLayout" />
    </appender>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="ADONetAppender" />
      <appender-ref ref="DebugAppender" />
    </root>
  </log4net>
  <appSettings>
    <add key="log4net.Internal.Debug" value="true" />
    <add key="log4net.Config" value="log4net.simple.config"/>
    <add key="log4net.Config.Watch" value="True"/>
  </appSettings>
  <system.web>
    <authentication mode="None" />
    <compilation debug="true" targetFramework="4.5.1" />
    <httpRuntime targetFramework="4.5.1" maxRequestLength="1048576" />
    <customErrors mode="Off" />
    <trust level="Full"/>
  </system.web>
</configuration>

更新 2

適切に構成されていlog4netますが、呼び出すLogManager.GetLogger("...")とアペンダーのないロガーが返されることがわかりました。AdoNetAppenderただし、階層をさらに調べると、そこに自分が表示され、XmlConfigurator.Configure()実行すると次のように出力されますlog4net: Adding appender named [ADONetAppender] to logger [root]....

したがって、問題は、返されたオブジェクトにLogManager.GetLogger(...)アペンダーが含まれていないことに要約されます (これはローカルでのみ発生し、本番環境では発生しません)。

解決した

以下の受け入れられた回答を参照してください。私が本当に欠けていたのはXmlConfigurator.Configure()、私のApplication_Startメソッドでの呼び出しだけだったことがわかりました。私が提供した他のすべての「証拠」は正常な動作であり、ローカルでログ メッセージが表示されなかった理由は、ローカル データベースと本番データベースの間のログ テーブル スキーマの意図しないわずかな違いでした。

4

1 に答える 1

2

Global.asax で log4net を構成できます。

public class WebApiApplication : HttpApplication
{
    protected void Application_Start()
    {
        XmlConfigurator.Configure();

これは、Azure とローカルで機能します。

于 2015-05-01T15:42:24.257 に答える