具有自定义侦听器的企业库外部配置

时间:2013-01-29 16:50:55

标签: .net enterprise-library

我们一直在使用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}&#xD;&#xA;Application Domain: {appDomain} | Machine: {machine}&#xD;&#xA;Extended Properties: {dictionary({key} - {value}&#xD;&#xA;)}&#xD;&#xA;Message: {message}&#xD;&#xA;Process Name: {processName}&#xD;&#xA;"
              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 &amp; Warnings">
        <listeners>
          <add name="Error Log TraceListener" />
        </listeners>
      </errors>
    </specialSources>
  </loggingConfiguration>
</configuration>

我已经把问题缩小了一点。似乎在我的ExceptionHandler类中有一个名为“WriteToLog”的方法,并且该方法内部是Logger.Write(LogEntry)。 Logger是一个企业记录器,如果没有创建LogWriterFactory就无法工作,而LogWriterFactory需要一个ConfigurationSource。

所以现在的问题是......如何将ConfigurationSource或我自己的自定义Logger甚至配置文件位置传入我的ExceptionHandeler类?

2 个答案:

答案 0 :(得分:0)

我遇到了与Log4Net类似的问题,结果发现这与配置无关。而是应该创建文件的目录没有创建文件的适当权限。检查应为其创建文件的目录的NTFS权限是否为相应用户具有“读取”,“写入”和“修改”权限。

答案 1 :(得分:0)

在我的记录器对象中,我最终使用GetExecutingAssembly位置获取配置文件。