我有一个项目结构,我们有一个引用的项目(这里称为 RefProject)来进行我们的日志记录。因此,我在该 RefProject 中调用了一个方法,它对 Enterprise Library 进行了 WriteLog 调用,并且在现有的 Enterprise Library 跟踪监听器中一切正常。从 RefProject 项目中引用了所有企业库 dll。一切正常,配置在 web 项目(这里称为 WebProject)的 web.config 中完成(WebProject 引用 RefProject,但不引用 EntLib dll)。
这是在 web.config. 中配置的标准侦听器的示例。
<add name="Rolling Flat File Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
fileName="C:\Logfiles\logger.log"
footer="" formatter="Text Formatter" header="" rollFileExistsBehavior="Increment"
rollInterval="Midnight" filter="Verbose" />
现在,我在一个单独的日志项目(这里称为日志项目)中创建了一个自定义跟踪侦听器。如果 WebProject 引用 Logging 项目,那么一切正常,并且跟踪侦听器按预期工作。如果 RefProject 引用 Logging 项目,那么当它尝试写入日志文件时会出现异常,说它找不到类型。
理想情况下,我不希望所有客户端应用程序都需要保留此引用。我希望这一切都由 RefProject 处理。RefProject 已经使用其他 EntLib 默认侦听器处理了这个问题。当所有其他 EntLib 组件都由 RefProject 而不是 WebProject 直接引用时,我不明白为什么 WebProject 需要让这个新项目引用记录器。
有任何想法吗?
<add listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.CustomTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
databaseConfig="ExceptionsDatabase" writeLogStoredProcName="WriteLog"
addCategoryStoredProcName="AddCategory" type="Logging.CustomExceptionTrackerTraceListener, GB.Logging, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
traceOutputOptions="LogicalOperationStack, Callstack" name="Database Exception Tracking Listener"
formatter="Text Formatter" filter="Error"/>