我们一直在使用Enterprise Library 3.1使用我们自己的自定义侦听器记录外部文件的异常。 最近我们需要创建一个使用我们的自定义监听器的类库,但是这个类库将从供应商应用程序中调用,因此我们无法控制供应商的配置文件。 我使用以下文章使用内置的Enterprise Library侦听器记录异常,但是当我尝试使用自定义跟踪侦听器时,它不起作用。 我没有收到错误,它只是不创建文件。 如果我将自定义侦听器添加到供应商配置侦听器部分,那么一切正常。
我首先想到的是ExceptionPolicyFactory正在加载正确的外部配置文件,但是工厂没有从外部配置中的listeners部分读取“type”。
在使用自定义侦听器时,有没有人可以帮我指出如何将“侦听器”部分完全移动到外部配置文件中?
Entlib and interop: does it work, and where does the config file go? 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是一个企业记录器,如果没有创建LogWriterFactory就无法工作,而LogWriterFactory需要一个ConfigurationSource。
所以现在的问题是......如何将ConfigurationSource或我自己的自定义Logger甚至配置文件位置传入我的ExceptionHandeler类?
答案 0 :(得分:0)
我遇到了与Log4Net类似的问题,结果发现这与配置无关。而是应该创建文件的目录没有创建文件的适当权限。检查应为其创建文件的目录的NTFS权限是否为相应用户具有“读取”,“写入”和“修改”权限。
答案 1 :(得分:0)
在我的记录器对象中,我最终使用GetExecutingAssembly
位置获取配置文件。