【问题标题】:Dynamically assign log message recipient | MS Enterprise Library 5.0 logger动态分配日志消息接收者 | MS 企业库 5.0 记录器
【发布时间】:2011-07-14 21:21:41
【问题描述】:

我有一个 WCF RESTful ws,它使用 MS Enterprise Library 5.0 启用了日志记录。日志工作正常,但是,我需要动态分配日志消息收件人电子邮件地址,即由 ws 消费者身份设置,如果 X 调用我的 ws,则必须将事情记录到 x@x.com,如果 y 调用 ws,则日志转到 y @y.com。我事先知道电子邮件地址。

我考虑为每个消费者添加一个新的类别+日志记录目标侦听器,并在运行时通过调用者身份将类别应用于 LogEvent,但这将是相当大的开销。有没有更好的方法来做到这一点? 我是 wcf 和 MSEL 的新手,所以也许我错过了一些东西。

谢谢

【问题讨论】:

  • 我想你正在使用EmailTraceListener。对吗?
  • @Rest:是的,正确的。 EmailTraceListener 分配给 webconfig 中的类别;我在运行时将类别分配给 logEvent。

标签: .net wcf logging enterprise-library


【解决方案1】:

终于搞定了。您需要按照以下步骤操作。 Rest Wing 提案的略微修改版本(因为找不到 EmailTraceListenerAssembler):

  • 子类EmailTraceListener 并覆盖TraceDataWrite 方法中的一个或多个。
  • 子类EmailTraceListenerData 并覆盖GetCreationExpression() 方法。在此方法的主体中,确保使用上一步中创建的子类。查看 Enterprise Library 的源代码。
  • 在 .config 文件中,设置 typelistenerDataType 类型以使用自定义跟踪侦听器和自定义跟踪侦听器数据。

【讨论】:

    【解决方案2】:

    最干净的方法是:

    1. 实现自定义跟踪侦听器数据:只需从 EmailTraceListenerData 继承即可。
    2. 实现自定义跟踪侦听器汇编器:从 EmailTraceListenerAssembler 继承并覆盖 Assemble 方法。
    3. 实现自定义跟踪侦听器:继承 EmailTraceListener 并覆盖 TraceDataWrite 方法。
    4. 设置typelistenerDataType 类型以使用自定义跟踪侦听器和自定义跟踪侦听器数据。

    【讨论】:

    • 我也有同样的要求;我使用的是 EL 5.0 版;似乎EmailTraceListenerAssembler 类在 5.0 中消失了 :( 有什么替代方案吗?谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多