尝试配置 log4net 时出现 TypeInitializationException
TypeInitializationException when trying to config log4net
我有一个 VS2015 解决方案,其中包括一个服务层,它公开了一组 WCF 服务,以及一个使用它们的 WPF 客户端。我配置了 log4net 并在服务层工作正常
我现在想在客户端使用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 之前,如果我现在尝试 运行 客户端,我会得到一个异常...
An unhandled exception of type 'System.TypeInitializationException'
occurred in PresentationFramework.dll
Additional information: The type initializer for
'System.Windows.Application' threw an exception.
...客户端无法启动。它不会中断任何代码,所以我看不到堆栈跟踪,也看不到是否存在内部异常。
如果我注释掉节点的内容,但将空节点留在那里,我仍然会遇到异常,所以问题似乎不是节点的内容,也不是 RollingFileAppender。
我检查了参考资料,两个项目都引用了 log4net v2.0.5,但都没有任何其他 log4net 参考资料。这两个项目都使用 Ninject,尽管我不确定这是否相关,因为我没有在任何一个项目中注入 log4net(但是,这是下一步)。
这不是 this SO question 中报告的问题,因为我的配置文件没有 appSettings 或 configSections。另外,启动节点一直是文件中的第一个,这从来没有引起过问题。我试过把它移到最后,但没有用。
有人知道我尝试将 log4net 添加到 WPF 客户端时为什么会崩溃吗?
我认为它需要在配置部分注册一个类型——类似于:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
我有一个 VS2015 解决方案,其中包括一个服务层,它公开了一组 WCF 服务,以及一个使用它们的 WPF 客户端。我配置了 log4net 并在服务层工作正常
我现在想在客户端使用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 之前,如果我现在尝试 运行 客户端,我会得到一个异常...
An unhandled exception of type 'System.TypeInitializationException' occurred in PresentationFramework.dll
Additional information: The type initializer for 'System.Windows.Application' threw an exception.
...客户端无法启动。它不会中断任何代码,所以我看不到堆栈跟踪,也看不到是否存在内部异常。
如果我注释掉节点的内容,但将空节点留在那里,我仍然会遇到异常,所以问题似乎不是节点的内容,也不是 RollingFileAppender。
我检查了参考资料,两个项目都引用了 log4net v2.0.5,但都没有任何其他 log4net 参考资料。这两个项目都使用 Ninject,尽管我不确定这是否相关,因为我没有在任何一个项目中注入 log4net(但是,这是下一步)。
这不是 this SO question 中报告的问题,因为我的配置文件没有 appSettings 或 configSections。另外,启动节点一直是文件中的第一个,这从来没有引起过问题。我试过把它移到最后,但没有用。
有人知道我尝试将 log4net 添加到 WPF 客户端时为什么会崩溃吗?
我认为它需要在配置部分注册一个类型——类似于:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>