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.Windows.Application 예외가 발생했습니다 : System.TypeInitializationException' 의 형식 이니셜 는 PresentationFramework.dll
에 추가 정보를 발생 '.
... 클라이언트가 시작되지 않습니다. 어떤 코드에서도 깨지지 않으므로 스택 추적을 볼 수 없으며 내부 예외가 있는지도 확인할 수 없습니다.
노드의 내용을 주석 처리하지만 빈 노드는 그대로두면 예외가 발생하므로 문제가되는 노드의 내용이나 RollingFileAppender가 아닌 것 같습니다.
참조를 확인했으며 두 프로젝트 모두 log4net v2.0.5를 참조했으며 다른 log4net 참조는 없습니다. 두 프로젝트 모두 Ninject를 사용합니다. 비록 어느 프로젝트에 log4net을 주입하지 않아도 관련이 있는지는 잘 모르겠지만 (다음 단계입니다).
내 설정 파일에 appSettings 및 configSections이 없으므로 this SO question에보고 된 문제가 아닙니다. 또한 시작 노드는 항상 파일의 첫 번째 노드였으며 이로 인해 문제가 발생하지 않았습니다. 나는 그것을 끝까지 옮기려고했지만 도움이되지 못했습니다.
누구나 내가 WPF 클라이언트에 log4net을 추가하려고 할 때 충돌하는 이유는 무엇입니까?
흠, 일,하지만 서비스 구성 파일에서 해당이 없습니다. 나는 그것이 왜 여기에서 작동하는지 이해할 수 없다. 그러나 이제는 다른 문제가 있으며 로그 파일이 쓰여지고 있지 않습니다. http://stackoverflow.com/a/1343913/706346에서 코드를 사용하면 Appender 컬렉션이 비어있는 것으로 표시됩니다. 내가 말했듯이, 노드를 서비스 프로젝트에서 직접 복사하여 올바르게 작동시킵니다. 감사합니다 –
흠 파트 II. 나는이 게시 http://stackoverflow.com/a/8138647/706346 Assembly.cs에 선을 추가하는 것이 좋았던 것을 발견했다. 다시 말하지만,이 없이는 서비스 계층에서 로깅이 어떻게 작동하는지 이해할 수 없습니다. –
log4net에 익숙하지 않습니다. 지금까지 서비스가 당신이 없이는 아무것도 추가 할 필요가 없기 때문에 그것은 .net 이미 다양한 섹션을 정의하고 있기 때문에 wcf 그렇게 할 것입니다. 로깅이 어떻게 작동하는지, log4net 로깅 또는 다른 어떤 것에 대한 참조는 실제로 있을지 모릅니다. – Andrew