【问题标题】:DevForce Classic Implementing a custom TraceSubscriberDevForce Classic 实现自定义 TraceSubscriber
【发布时间】:2017-06-08 14:08:51
【问题描述】:

我正在尝试在 Devforce Classic 中实现自定义日志发布器。我想做的是将写入客户端和服务器调试日志的所有内容重定向到实现 NLOG 的日志发布者。该文档指出,您可以实现自己的 TraceSubscriber 来连接自定义日志发布者。我无法获得任何跟踪消息来触发我的自定义发布者的方法。是否有可以为我指明正确方向的示例?

【问题讨论】:

    标签: devforce


    【解决方案1】:

    我发现的唯一示例是一个 sn-p,它显示了如何直接使用 DF TraceSubscriber 来设置已发布消息的订阅者:

        // Creates either WCF or Remoting instance based on IdeaBladeConfig.
        // Overloads are available, or construct the concrete class directly.
        var traceSubscriber = TraceSubscriber.CreateInstance();   
    
        // The publish handler will be where you take the trace message and log to your own logs.
        traceSubscriber.Publish += PublishHandler;
        traceSubscriber.SubscriptionError += SubscriptionErrorHandler;
    
        // This is overloaded 
        traceSubscriber.StartSubscription(url);
    
        // You can issue this when done.
        traceSubscriber.StopSubscription();
    

    您将无法替换现有的 TracePublisher 机制,因为它已融入 DF,但您可以在与上述类似的代码中直接使用 TraceSubscriber 自定义订阅者端,方法是继承 TraceSubscriber 或实现 ITraceSubscriber。订阅者将收到所有跟踪消息,然后您的代码可以确定如何处理它们。

    如果您确实想尝试自定义 ITraceSubscriber 实现,请注意文档(和实现)有点古怪,要连接它,您还必须获取 TracePublisher 实例或代理并调用其订阅方法:

      // local (in-process) publisher:
      var publisher = TracePublisher.LocalInstance;
      publisher.Subscribe(this);
    
      // for remote publisher:
      var localURL = TracePublisher.CreateInstance().GetPublisherUrl(null);
      // Use RemotingTracePublisher or WcfTracePublisher 
      var publisher = RemotingTracePublisher.GetRemoteInstance(localURL);
      publisher.Subscribe(this);
    

    一旦订阅,发布者将调用 ITraceSubscriber.OnPublish 方法:

    public void OnPublish(TraceMessage traceMessage) 
    {
       // do something with trace message
    }
    

    【讨论】:

    • 谢谢金!我可以通过创建一个新的 TraceSubscriber 实例并订阅 URL(上面的建议 #1)来实现此功能。关于关闭默认 xml 跟踪发布者使用的默认 xml 输出,我只是简单地将日志文件设置为空值。我意识到它在技术上并没有将其关闭,但它确实禁止写入我想要的 xml 文件。
    • xml 输出是由 TraceFileXmlLogger 创建的,它使用 TraceSubscriber。当您将日志文件设置为空字符串时,永远不会创建 TraceFileXmlLogger,因此您确实将其关闭。然而,无论是否有订阅者,TracePublisher 总是在发布。
    猜你喜欢
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 2014-10-14
    • 2011-06-04
    • 2010-10-29
    • 2011-01-10
    相关资源
    最近更新 更多