Мне известно о проекте Криса Фулстоу log4net.signalr. Это отличная идея, если вы хотите непроизводственный журнал, так как он регистрирует все сообщения из всех запросов. Я хотел бы иметь что-то, что различает сообщения журнала по запросу, который их создает, и отправляет обратно в соответствующий браузер.
Вот что я сделал в приложении:
public class SignalRHubAppender:AppenderSkeleton
{
protected override void Append(log4net.Core.LoggingEvent loggingEvent)
{
if (HttpContext.Current != null)
{
var cookie = HttpContext.Current.Request.Cookies["log-id"];
if (null != cookie)
{
var formattedEvent = RenderLoggingEvent(loggingEvent);
var context = GlobalHost.ConnectionManager.GetHubContext<Log4NetHub>();
context.Clients[cookie.Value].onLog(new { Message = formattedEvent, Event = loggingEvent });
}
}
}
}
Я пытаюсь прикрепить идентификатор сеанса к файлу cookie, но это не работает на том же компьютере, поскольку файл cookie перезаписывается. вот код, который я использую на клиенте, чтобы прикрепить событие:
//start hubs
$.connection.hub.start()
.done(function () {
console.log("hub subsystem running...");
console.log("hub connection id=" + $.connection.hub.id);
$.cookie("log-id", $.connection.hub.id);
log4netHub.listen();
});
В результате сообщения журнала отображаются только на последней подключенной странице. Я хотел бы знать, есть ли какие-то стратегии для получения текущего идентификатора соединения из браузера, который инициирует текущий запрос, если таковой имеется. Также мне интересно узнать, есть ли лучший дизайн для ведения журнала для каждого браузера.
ИЗМЕНИТЬ
Я мог бы создать файл cookie на основе условного имени (например, log-id-someguid), но мне интересно, есть ли что-то более умное.
BOUNTY Я решил начать вознаграждение за этот вопрос, и я бы дополнительно спросил об архитектуре, чтобы увидеть, имеет ли смысл моя стратегия или нет. Я сомневаюсь, что я использую концентратор в одном «направлении» от сервера к клиенту, и я использую его для регистрации действий, исходящих не от вызовов к концентратору, а от других запросов (потенциально запросы, поднятые на других концентраторах), является что правильный подход, имея в качестве цели браузер видимый аппендер log4net?