DevForce Classic 实现自定义 TraceSubscriber

DevForce Classic Implementing a custom TraceSubscriber

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

我找到的唯一示例是一个片段,它展示了如何直接使用 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 实例或代理并调用其 Subscribe 方法:

  // 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
}