Как получить журналы UDP или TCP из док-контейнера с помощью NLog - PullRequest
1 голос
/ 25 сентября 2019

Как я могу настроить Docker и Nlog для ведения протокола tcp?Я использую log4view, и протоколирование udp работает на моей машине гладко со следующей конфигурацией:

<?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"
      autoReload="true"
      internalLogLevel="Debug"
      internalLogFile="c:\Temp\internal-nlog.txt">


  <targets>
    <target xsi:type="File" name="file" fileName="c:\Temp\xRayServices-${shortdate}.log"
            layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />

    <target name="udp" xsi:type="Network" address="udp4://localhost:9999"
            layout="${log4jxmlevent}" newline="True" />
  </targets>
    <target name="tcp" xsi:type="Network" address="tcp4://localhost:9995"
            layout="${log4jxmlevent}" newline="True" />
  </targets>

  <rules>
    <logger name="*" minlevel="Trace" writeTo="file,udp,tcp" />
  </rules>
</nlog>

Я также использую цель файла в вышеупомянутой конфигурации, чтобы записывать журналы в контейнере докера в файл, а затем я отображаюПри запуске образа docker каталог docker указывается в системном каталоге следующим образом (упрощено, чтобы хранить только самое необходимое):

docker run --rm --name myName  -p 9995:9995 -p 9999:9999/udp --network myLocalNet --mount "type=bind,source=C:\Temp,destination=C:\Temp" myImage 

Это работает, и я получаю полезные журналы txt-файлов.Я действительно хотел бы использовать Log4view.

В моем случае мне нужно использовать --network myLocalNet по соображениям безопасности.

Можно ли вести протокол tcp (или udp) при использовании -network myLocalNet.

Обратите внимание, что в приведенной выше команде я попытался сопоставить порт 9999, но я не получаю логи udp (наверное, из-за --network myLocalNet).В конфигурации регистрации и конфигурации докера мне как-то нужно, чтобы IP-адрес моего компьютера был виден контейнеру докера, поскольку журналы отправляются из контейнера на мой компьютер.

ОБНОВЛЕНИЕ : после обратной связииз @LinPy я добавил флаг / udp, я также сопоставил отдельный порт tcp и обновил конфигурацию регистрации.Конфигурация работает локально для tcp и udp, но все еще не из контейнера.

Я также добавил EXPOSE 9999 / udp и EXPOSE 9995 в файл Docker

1 Ответ

1 голос
/ 25 сентября 2019

попробуйте опубликовать оба TCP и UDP:

docker run --rm --name myName -p 9999:9999/udp -p 9999:9999 --network myLocalNet --mount "type=bind,source=C:\Temp,destination=C:\Temp" myImage
...