SignalR и Nlog in. Net Core 3.1 - PullRequest
       108

SignalR и Nlog in. Net Core 3.1

0 голосов
/ 29 апреля 2020

Хорошо, поэтому я пытаюсь создать что-то вроде онлайн-консоли на портале администратора, чтобы я мог отслеживать ошибки и предупреждения в режиме реального времени, как это делает обычная консоль. Я использую SignalR с отдельным концентратором, к которому администратор может подключиться (авторизовано). У меня также есть Nlog в проекте, полностью работающем. Кроме того, мой концентратор администратора открыт вне концентратора, поэтому я могу отправлять сообщения из любого места в проекте после его внедрения (что-то похожее на Решение № 2 здесь ).

Я хочу использовать SignalR в качестве цели для Nlog. Проблема заключается в том, что Nlog CustomTargets должен быть инициализирован с использованием конструкторов без параметров, что не могло помочь в моем случае, так как я должен передать контекст концентратора администратора в качестве зависимости.

Вот блок кода, помогающий визуализировать мою проблему:

[Target("HubNlogHelper")]
    public sealed class HubNlogHelper : TargetWithLayout
    {
        [RequiredParameter]
        public string Host { get; set; }

        public HubNlogHelper()
        {
            Host = "localhost";
        }

        private readonly IAdminHub _adminHub;       // THIS REMAINS NULL
        public HubNlogHelper(IAdminHub adminHub)    // THIS NEVER GETS CALLED
        {
            _adminHub = adminHub;
        }

        protected override void Write(LogEventInfo logEvent)
        {
            string logMessage = Layout.Render(logEvent);
            _adminHub.doSomethingWithMsg(logMessage);
        }
    }
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      throwConfigExceptions="true"
      internalinternalLogLevel="Warn">

  <extensions>
    <add assembly="MyProjectName"/>
  </extensions>

  <targets>
    <target name="HubNlogHelper" type="HubNlogHelper" layout="${longdate} | ${message}"/>
  </targets>

  <rules>
    <logger name="*" minlevel="Trace" writeTo="HubNlogHelper" />
  </rules>
</nlog>

Что я упускаю? Заранее спасибо ..

...