私は、WCFサービスのセットを公開するサービスレイヤーとそれらを消費するWPFクライアントを含むVS2015ソリューションを持っています。私はlog4netを設定し、サービスレイヤーでうまく動作していますlog4netを設定しようとするとTypeInitializationExceptionが発生する
クライアントでlog4netを使用したいので、log4net NuGetパッケージを追加して、サービスレイヤーの設定ファイルからそのノードをコピーしたApp.configファイルにノードをコピーしました。クライアント。完全なファイルは
<?xml version="1.0"
encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0"
sku=".NETFramework,Version=v4.5.2" />
</startup>
<log4net>
<appender name="RollingFileAppender"
type="log4net.Appender.RollingFileAppender">
<param name="File"
value="PhysioDiary.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="2" />
<maximumFileSize value="1MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-7level %logger - %message%newline%exception" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="LargeMessageBehavior">
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<customBinding>
<binding name="CustomBindingDefault"
closeTimeout="00:59:00"
openTimeout="00:59:00"
receiveTimeout="00:59:00"
sendTimeout="00:59:00">
<binaryMessageEncoding>
<readerQuotas maxDepth="6400"
maxStringContentLength="100000000"
maxArrayLength="2147483647" />
</binaryMessageEncoding>
<httpTransport maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647"
bypassProxyOnLocal="true"
keepAliveEnabled="false"
maxBufferSize="2147483647">
<extendedProtectionPolicy policyEnforcement="Never" />
</httpTransport>
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="http://localhost:5448/AppointmentsService.svc"
behaviorConfiguration="LargeMessageBehavior"
binding="customBinding"
bindingConfiguration="CustomBindingDefault"
contract="AppointmentsServiceReference.AppointmentsService"
name="CustomBinding_AppointmentsService" />
<!-- Other WCF services here, snipped for clarity -->
</client>
</system.serviceModel>
</configuration>
、私は例外を取得しても、私は今、クライアントを実行しようとした場合、どこにでもlog4netのを使用する前に...タイプの
未処理の例外 "...このようになりますSystem.TypeInitializationException ' がPresentationFramework.dllで発生しました
追加情報: の型の初期化子' System.Windows.Application 'が例外をスローしました。
...クライアントが起動しません。どのコードでも壊れませんので、スタックトレースを見ることができず、内部例外があるかどうかも確認できません。
ノードの内容をコメントにして空のノードを残しても、まだ例外が発生するため、ノードの内容や問題のRollingFileAppenderではないようです。
私は参照をチェックしましたが、両方のプロジェクトではlog4net v2.0.5が参照されており、他のlog4net参照はありません。どちらのプロジェクトでもNinjectを使用していますが、どちらのプロジェクトにもlog4netを注入していないので、それが適切かどうかはわかりませんが(それは次のステップです)。
this SO questionで報告されている問題はありません。設定ファイルにはappSettingsもconfigSectionsもありません。また、起動ノードは常にファイル内の最初のノードであり、これは問題を引き起こしたことはありません。私はそれを最後まで動かしてみましたが、助けにはなりませんでした。
WPFクライアントにlog4netを追加しようとするとクラッシュする理由は何ですか?
うーん、働いていたが、私は、サービス設定ファイルにそれを持っていません。私はなぜそれがここではなく動作するのか理解できません。しかし、今は別の問題があり、それはログファイルが書き込まれていないということです。 http://stackoverflow.com/a/1343913/706346のコードを使用すると、Appendersコレクションが空であると表示されます。私が言ったように、私はノードをサービスプロジェクトから直接コピーして正常に動作します。ありがとう –
HmmパートII。私はこの記事を見つけましたhttp://stackoverflow.com/a/8138647/706346 Assembly.csにラインを追加することを提案しました。これはうまく動作します。繰り返しますが、これがなくてもサービスレイヤでどのようにロギングが機能するのか分かりません。 –
log4netにはそれほど詳しいことはありません。あなたが何も追加する必要がないサービスは、.netが既にさまざまなセクションを定義しており、wcfのためにそうしているからです。ロギングがどのように機能しているのかよくわからないのですが、実際にはlog4netのロギングやその他の情報が参考になります。 – Andrew