Всем доброго времени суток!

Столкнулся со следующей проблемой.

Кейс такой нужно писать логи через NLog в очереди RabbitMQ.

Для этого использую библиотеку Nlog.RabbitMQ.Target.dll

Добавляю ее в папку MyApp\bin\ 

Затем настраиваю файлы nlog.config:

<logger name="GrayLogLogger" writeTo="grayLogAppender" minlevel="Debug" final="true" />

nlog.targets

<extensions>
        <add assembly="Nlog.RabbitMQ.Target" />
    </extensions>
    <variable name="rmqHost" value="localhost" />
    <variable name="rmqUser" value="admin" />
    <variable name="rmqPassword" value="admin" />
    <variable name="rmqvHost" value="logs" />
    <variable name="rmqvPort" value="5672" />
    <variable name="rmqExchange" value="logs" />

<target name="grayLogAppender"
                xsi:type="RabbitMQ"
                appid="CreatioDemo"
                topic="${uppercase:${level}}"
                username="${rmqUser}" 
                password="${rmqPassword}" 
                hostname="${rmqHost}" 
                exchange="${rmqExchange}"
                exchangeType="topic"
                port="${rmqvPort}"
                vhost="${rmqvHost}"
                layout="${Date} [${ThreadIdOrName}] ${uppercase:${level}} ${UserName} ${MethodName} - ${Message}"
                messageSource="nlog://${machinename}/${logger}"
                useJSON ="true">
            <field key="threadid" layout="${threadid}" />
            <field key="machinename" layout="${machinename}" />

 

при перезапуске пула конект к Rabbit создается но логи не пишуться.

Для этого нужно добавить Nlog.RabbitMQ.Target.dll в папку MyApp\Terrasoft.WebApp\bin\

И тут возникает проблема при перезапуске пула или при логине в систему:

[FileLoadException: Could not load file or assembly 'System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)]
   StackExchange.Redis.PhysicalConnection.BeginConnectAsync(LogProxy log) +0
   StackExchange.Redis.PhysicalBridge.GetConnection(LogProxy log) +461
   StackExchange.Redis.ServerEndPoint.CreateBridge(ConnectionType type, LogProxy log) +98
   StackExchange.Redis.ServerEndPoint.GetBridge(ConnectionType type, Boolean create, LogProxy log) +60
   StackExchange.Redis.ConnectionMultiplexer.ActivateAllServers(LogProxy log) +195
   StackExchange.Redis.<ReconfigureAsync>d__142.MoveNext() +7816

[AggregateException: One or more errors occurred.]
   System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) +4593189
   System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) +13992992
   StackExchange.Redis.ConnectionMultiplexer.ConnectImpl(Object configuration, TextWriter log) +220
   Terrasoft.Redis.StackExchangeAdapters.RedisClientsManagerAdapter..ctor(String connectionStringName, RedisConfigSection configSection) +273

 

Проверил версию  System.Threading.Tasks.Extensions в сборке Nlog.RabbitMQ.Target.dll  и ту что используется в Ceratio - совпадают.

Подскажите как можно это исправить?

Нравится

1 комментарий

Алексей, добрый день!

Исходя их ошибки попробуйте перезапустить redis.

Поскольку на данный момент система не поддерживает внедрение Nlog.RabbitMQ.Target.dll, то более детальной рекомендации мы дать не можем. Советую ознакомиться с этим обсуждением.

Показать все комментарии

Всем доброго времени суток!

Стоит задача отправлять логи в RabbitMQ

Установил библиотеку Nlog.RabbitMQ.Target в файлы nlog.config и nlog.config.targets добавил необходимые настройки:
nlog.config:

&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" throwExceptions="false" &gt;
	&lt;include file="nlog.targets.config" /&gt;
	&lt;extensions&gt;		
		&lt;add assembly="Nlog.RabbitMQ.Target" /&gt;
	&lt;/extensions&gt;
&lt;rules&gt;
&lt;logger name="*" minlevel="Debug" writeTo="RabbitMQTarget" /&gt;
	&lt;/rules&gt;

nlog.config.targets:

&lt;variable name="rmqHost" value="rabbithost" /&gt;
	&lt;variable name="rmqUser" value="logger" /&gt;
	&lt;variable name="rmqPassword" value="logger" /&gt;
	&lt;variable name="rmqvHost" value="logs" /&gt;
	&lt;variable name="rmqPort" value="5672" /&gt;
&lt;targets async="true"&gt;
  ...................................................
&lt;target name="RabbitMQTarget"
            xsi:type="RabbitMQ"
            appid="NLog.RabbitMQ.DemoApp"
            correlationId=""
            messageType=""
            topic="DemoApp.Logging"
            username="${rmqUser}"
            password="${rmqPassword}"
            hostname="${rmqHost}"
            exchange="logs"
            exchangeType="topic"
            routingKey="logs"
            messageSource="nlog://${machinename}/${logger}"
            DeliveryMode="NonPersistent"
            port="{rmqPort}"
            vhost="${rmqvHost}"
            useJSON ="true" &gt;
		  &lt;field key="threadid" layout="${threadid}" /&gt;
		  &lt;field key="machinename" layout="${machinename}" /&gt;
 
&lt;/targets&gt;

Но почему то коннекта к Rabbit нет

 

Создал проект web API

добавил эти же настройки - коннект есть логи в очередь уходят.

Подскажите что делаю не так, может есть какие то нюансы?

Благодарю.

Нравится

4 комментария

Нигрескул Алексей, добрый день!

Связка RabbitMQ с логами не тестировалась. 
Возможно стоит подключать RabbitMQ через файл ConnectionStrings.config, параметр messageBroker.
Пример настройки указан этой статье (для PostgreSQL):
https://academy.terrasoft.ru/docs/user/razvertyvanie_onsite/windows_net…

Sorotiuk Anna,

здравствуйте! Нет, в библиотеке Nlog.RabbitMQ.Target уже реализовано подключение к Rabbit, настройки подключения передаются через файл NLog.config

Sorotiuk Anna,

подскажите какая версия библиотеки NLog используется в Creatio 7.18.3

Нигрескул Алексей, добрый день!
Для версии 7.18.3 версия библиотеки Nlog - 4.6.5

Показать все комментарии

Работаю со схемами исходного кода через веб, сборку конфигурации делаю через браузер. Возможности просмотра классов библиотек через ide нет.  

По статье документации выполнена настройка nLog. После чего я создал объект логгера в схеме Исходный код как описано в туториал NLog . Объект Logger - из примера:

private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();

Получается ошибка - класса или пространства имен NLog нет , нет и пространства имен Common.Logging.NLog45. 

 

Террасофт, как у вас предполагается работать с Nlog в кодовых схемах, например в пользовательском сервисе я хотел бы писать в лог ошибку десереализации json. Примеров на схемах "исходный код" по работе с nLog в публикациях Сообщества не нашел.

Нравится

1 комментарий

Для использования базового логгирования нужно подключить пространство имён global::Common.Logging, а экземпляр логгера можно получить через статический класс LogManager.

Пример кода:

namespace Terrasoft.Configuration {
	using global::Common.Logging;
 
	public class LogTest {
 
		private ILog log;
 
		public LogTest() {
			log = LogManager.GetLogger("LoggerName");
		}
 
		public void WriteError() {
			log.Error("ErrorMessage");
		}
 
	}
}

 

Показать все комментарии

nlog пишит свои логи в файл.

Пытаюсь настроить получение этих сообщений на почту. 

для этого в файл

nlog.targets.config

добавляю такой код 

       <target name="applicationAppenderNew" 
            xsi:type="Mail"
            smtpServer="smtp.office365.com"
            smtpAuthentication="Basic" 
            smtpPort="587"
            encoding="UTF-8"
            smtpusername="xxx@xxx"
            smtpPassword="xxxxx"
            from="hhhh"
            to="xxx@xxx"
            html="true"
            enableSsl="true"
            secureSocketOption="StartTls"
            replaceNewlineWithBrTagInHtml="true"  
            subject="Error"
            body="ff"
            timeout="10000"
        </target>

но почта не отправляется,

при этом файл логирования  internalLogFile="D:\log\NLog.log">   даже не создается. Как разобраться в чем проблема?

nlog.config 

добавил цели

        <logger name="Terrasoft.WebApp.Loader.*" writeTo="applicationAppender, applicationAppenderNEW" minlevel="Info" final="true" />
        <logger name="Terrasoft.WebApp.Global" writeTo="applicationAppender, applicationAppenderNEW" minlevel="Info" final="true" />
        <logger name="Terrasoft.Core.LicManager" writeTo="applicationAppender, applicationAppenderNEW" minlevel="Info" final="true" />

Нравится

1 комментарий

Добрый день,  попробуйте дополнительно настроить  уровень логирования  

 

internalLogLevel="Trace",

 

так как в библиотеке NLog почти вся полезная, диагностическая информация логируется на этом уровне. Путь к файлу должен быть абсолютным и у пользователя пула должны быть права на эту папку. 

Также посмотрите документацию по Nlog  Nlog-project.org и на Академии

 


 
Показать все комментарии

Добрый день, коллеги.

Имеется следующая проблема. Для отправки логгов в кафку, был использован appender https://www.nuget.org/packages/NLog.Targets.KafkaAppender/

Сделаны все необходимые настройки. Добавлены rule и targets, но сообщения в кафку не уходят. В логах так же ошибок нет. 

Из обычного проекта c#, проблем нет. 

Есть ли опыт использования расширения для NLog, если есть прошу поделится опытом внедрения!

Нравится

3 комментария

Здравствуйте, Максим!

 

Есть рекомендации, как развернуть минимальный набор компоненов для передачи логов NLog -> Kafka -> GrayLog

 

1. Поднимаем контейнеры 

docker run --name mongo -d mongo:3
docker run --name elasticsearch -e "http.host=0.0.0.0" -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -d docker.elastic.co/elasticsearch/elasticsearch-oss:6.5.4
docker run --name kafka -p 2181:2181 -p 9092:9092 --env ADVERTISED_HOST=kafka --env ADVERTISED_PORT=9092 -d spotify/kafka
docker run -it --rm  -p 9001:9000 --link kafka -e ZK_HOSTS="kafka:2181" -e APPLICATION_SECRET=letmein -d sheepkiller/kafka-manager
docker run --name graylog --link mongo --link elasticsearch --link kafka -p 9000:9000 -p 12201:12201 -p 514:514 -e GRAYLOG_HTTP_BIND_ADDRESS="0.0.0.0:9000" -e GRAYLOG_HTTP_EXTERNAL_URI=http://127.0.0.1:9000/ -d graylog/graylog:3.0

2. Подлючаем транспорт 

Подключаам необходимый пакет NLog.Targets.KafkaAppender (или копируем dll)
Конфиг NLog

&lt;?xml version="1.0" encoding="utf-8" ?&gt;
&lt;nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    autoReload="true"
    throwExceptions="true"&gt;
    &lt;extensions&gt;
        &lt;add assembly="Terrasoft.NLog"/&gt;
        &lt;add assembly="NLog.Targets.KafkaAppender" /&gt;
    &lt;/extensions&gt;
    &lt;targets async="true"&gt;
        &lt;target xsi:type="KafkaAppender"
            name="bpmonlineGelfKafka"
            topic="LogTest"
            brokers="v_artemchuk.tscrm.com:9092"
            debug="false"
            async="false"&gt;
            &lt;layout xsi:type="GelfJsonLayout" facility="bpmOnline"&gt;
                &lt;attribute name="mesasgeObject" layout="${messageObject}" encode="false"/&gt;
                &lt;attribute name="context" layout="${ndlc}" encode="true"/&gt;
            &lt;/layout&gt;
        &lt;/target&gt;
    &lt;/targets&gt;
    &lt;rules&gt;
        &lt;logger name="*" minlevel="Debug" writeTo="bpmonlineGelfKafka" /&gt;
    &lt;/rules&gt;
&lt;/nlog&gt;

 

Мотков Илья,

здравствуйте! воспользовался данным примером, только вместо транспорта использую RabbitMQ Nlog.RabbitMQ.Target.dll
настроил nlog.config и nlog.config.targets согласно рекомендациям к

Nlog.RabbitMQ.Target, но почему то не конектится RabbitMQ. создал MVC проект с него коннектится без проблем. Версия Creatio 7.18.3

Так же в настройках конфига вижу. что Вы указали в зависимостях Terrasoft.NLog, но я такой сборки не нахожу, можете прокомментировать.

Спасибо.

Алексей, боюсь без личной настройки сложно что-то сказать по этой проблеме. В системе на данный момент не предусмотрено использование Nlog.RabbitMQ.  Возможно стоит обратить внимание на версии Nlog.

Показать все комментарии