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
メソッドでの呼び出しだけだったことがわかりました。私が提供した他のすべての「証拠」は正常な動作であり、ローカルでログ メッセージが表示されなかった理由は、ローカル データベースと本番データベースの間のログ テーブル スキーマの意図しないわずかな違いでした。