0

我们一直在使用 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}&#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 是 Enterprise logger,如果不创建 LogWriterFactory 将无法工作,并且 LogWriterFactory 需要 ConfigurationSource。

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

4

2 回答 2

0

我在 Log4Net 上遇到过类似的问题,结果证明这与配置无关。相反,应该创建文件的目录没有创建文件的适当权限。检查应在其中创建文件的目录的 NTFS 权限是否具有相应用户的读取、写入和修改权限。

于 2013-01-29T18:42:35.797 回答
0

在我的记录器对象中,我最终通过使用GetExecutingAssemblyLocation 获取了配置文件。

于 2013-03-20T12:51:38.783 回答