【发布时间】:2014-01-16 21:21:43
【问题描述】:
我正在尝试为 NLog 编写一个目标,以使用 SignalR 将消息发送到连接的客户端。
这就是我现在所拥有的。我想知道的是我是否应该像这样-或-以某种方式获取对集线器的引用(SignalrTargetHub)和调用一个 SendMessage 方法就可以了?
两者都有性能影响吗?
[Target("Signalr")]
public class SignalrTarget:TargetWithLayout
{
public SignalR.IConnectionManager ConnectionManager { get; set; }
public SignalrTarget()
{
ConnectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
}
protected override void Write(NLog.LogEventInfo logEvent)
{
dynamic clients = GetClients();
var logEventObject = new
{
Message = this.Layout.Render(logEvent),
Level = logEvent.Level.Name,
TimeStamp = logEvent.TimeStamp.ToString("yyyy-MM-dd HH:mm:ss.fff")
};
clients.onLoggedEvent(logEventObject);
}
private dynamic GetClients()
{
return ConnectionManager.GetClients<SignalrTargetHub>();
}
}
【问题讨论】:
-
github.com/cbley/NLog.SignalR,但它只发送“渲染”字符串作为单个“消息”属性。
-
我希望看到一个 NLog->SignalR 桥,它同时发送原始
Message和呈现的消息(MessageRendered或FullMessage)。