我们一直在使用 Enterprise Library 3.1 使用我们自己的自定义侦听器将异常记录到外部文件。最近我们需要创建一个使用我们自定义侦听器的类库,但是这个类库将从供应商应用程序中调用,因此我们无法控制供应商配置文件。我使用以下文章使用内置的企业库侦听器记录异常,但是当我尝试使用我们的自定义跟踪侦听器时它不起作用。我没有收到错误,它只是没有创建文件。如果我将自定义侦听器添加到供应商配置侦听器部分,那么一切正常。
我的第一个想法是 ExceptionPolicyFactory 正在加载正确的外部配置文件,但工厂没有从外部配置中的侦听器部分读取“类型”。
在使用自定义侦听器时,任何人都可以帮助我指出如何将“侦听器”部分完全移动到外部配置文件中吗?
Entlib 和互操作:它有效吗,配置文件在哪里? http://blogs.msdn.com/b/tomholl/archive/2006/04/02/entlib2externalconfig.aspx http://hugoribeiro.blog.com/2009/05/15/no-configuration-enterprise-library/
基本上这部分需要移动到外部配置文件中。
<configuration>
<configSections>
<section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=3.1.0.0, Culture=neutral, PublicKeyToken=fe5b8e7d42f3f6e1" />
</configSections>
<loggingConfiguration name="Logging Application Block" tracingEnabled="false"
defaultCategory="Error Category" logWarningsWhenNoCategoriesMatch="true">
<listeners>
<add fileName="C:\LOGS\Error.log" listenerDataType="Test.Logging.Configuration.TestTraceListenerData, Test.Logging, Version=1.5.0.0, Culture=neutral, PublicKeyToken=fe5b8e7d42f3f6e1"
traceOutputOptions="None" type="Test.Logging.TraceListeners.TestTraceListener, Test.Logging, Version=1.5.0.0, Culture=neutral, PublicKeyToken=fe5b8e7d42f3f6e1"
name="Error Log TraceListener" />
</listeners>
<formatters>
<add template="Timestamp: {timestamp}
Application Domain: {appDomain} | Machine: {machine}
Extended Properties: {dictionary({key} - {value}
)}
Message: {message}
Process Name: {processName}
"
type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=3.1.0.0, Culture=neutral, PublicKeyToken=fe5b8e7d42f3f6e1"
name="Error Detail Text Formatter" />
</formatters>
<specialSources>
<errors switchValue="All" name="Logging Errors & Warnings">
<listeners>
<add name="Error Log TraceListener" />
</listeners>
</errors>
</specialSources>
</loggingConfiguration>
</configuration>
好吧,我已经把问题缩小了一点。似乎在我的 ExceptionHandler 类中有一个名为“WriteToLog”的方法,该方法内部是 Logger.Write(LogEntry)。Logger 是 Enterprise logger,如果不创建 LogWriterFactory 将无法工作,并且 LogWriterFactory 需要 ConfigurationSource。
所以现在的问题是......我如何将 ConfigurationSource 或我自己的自定义 Logger 甚至配置文件位置传递给我的 ExceptionHandeler 类?