Неверно формируются журналы работы служб

Версия ЛЭРС УЧЁТ: 3.48.1
Сервер БД: SQL Server

После обновления с 3.43.3 до 3.48.1 заметили, что журналы служб странно начали себя вести.
Служба сервера и опроса всё пишут в один файл и каждый день его просто переименовывают оставляя содержимое за предыдущие дни.
То есть, например, если открыть файл службы опроса(который на скриншоте слева за 13.10.2022 и весит 3.1ГБ), то в нём имеются записи от 07.10.2022. Сегодня 13.10.2022, но вчера этот файл назывался 12.10.2022 и весил немного меньше, позавчера был 11.10.2022 и т.д.

Пробовали удалять журналы(сначала удалили журналы у сервера днём 10.10.2022, но в файле от 13.10.2022 есть записи с 11.10.2022, и отсутствуют файлы за два дня) и перезапускать службы ЛЭРС, но ничего не помогло.
На другом компьютере, где стоит служба опроса такой проблемы не наблюдаем.

Пример содержимого файла журнала службы опроса от 13.10.2022:

Пример содержимого файла журнала сервера от 13.10.2022:

В чем может быть проблема?

Пришлите, пожалуйста, ваши файлы “NLog.config” из папок обеих служб (по умолчанию “C:\Program Files\LERS\Server” и “C:\Program Files\LERS\PollService”).

В архиве:
nlog.zip (3.0 КБ)

В принципе файлы корректны.

Уточните, пожалуйста, вы пробовали перезагрузить Службу опроса и Сервер?

Проблему такую не наблюдали ни на одном из доступных серверов.

Нужно включить отладочный протокол NLog. Для этого:

  1. Создайте папку c:\temp и настройте разрешения, чтобы в неё могли записывать данные все пользователи
  2. Откройте на редактирование файлы NLog.config в сервере и в службе.
  3. Отредактируйте заголовок файла, чтобы он стал выглядеть следующим образом
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
			xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
			autoReload="true"
			throwExceptions="false"
			internalLogLevel="Debug" 
			internalLogFile="c:\temp\nlog.internal.log">

На следующий день приложите файлы nlog.internal.log для сервера и службы.

Службы до этого перезагружать пробовали, ничего не изменилось.

Вот журнал NLog за 00:00:00 сегодня:
nlog-internal.zip (56.6 КБ)

Служба опроса за сегодня вроде сработала нормально: файл за 13.10.2022 завершился в 23:59, и создался новый за 14.10.2022.
Но сервер почему-то переименовал файл 13.10.2022 в полночь на 14.10.2022 и продолжил запись в него.

Что-то из этого журнала ничего не могу разобрать. В нём действий над файлом журнала сервера вообще не видно.

Почему журнал кончается в 00:05? Можете оставить журнал с вечера и до утра?

Всё верно. Мы включили журнал в 23:26 и отключили его в 00:05. Файлы редактировали “на горячую” при запущенных службах: сначала файл сервера, потом службы опроса. В начале файла в 23:26 это видно.

В 00:00 видно, что PollService в логе создал новый файл за 14.10.2022, а вот никаких записей Server за это время там почему-то нет.

В 00:05 мы увидели, что новый файл для сервера не создался, и еще раз для теста отредактировали файл NLog.config - поэтому там повторно появились такие же записи, как за 23:26. Их можно проигнорировать. То есть при редактировании файла NLog.config сервера, он пишет об изменениях в temp, но почему за 00:00:00 никаких записей нет - это непонятно.

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

Мы не решим эту проблему своими силами, так как она связана со сторонним компонентом NLog. Нам нужно будет написать разработчику, и приложить журнал.

В пятницу оставили журнал только файла сервера. С тех пор никаких новых записей не было. Ничего с тех пор не редактировали.

nlog.zip (3.5 КБ)

Попробуйте установить сервер, полностью удалить папку c:\ProgramData\LERS\Logs и перезапустить сервер. Мне кажется, проблема у вас с правами доступа к файлам.

Удалили ЛЭРС УЧЕТ полностью следуя инструкции из https://docs.lers.ru/docs/pages/viewpage.action?pageId=819214
Почистили все папки связанные с ЛЭРС.
Переустановили всё с нуля, проблема осталась.
После переустановки немного подзабыли о проблеме, затем зашли проверить, файл лога за 2 недели вырос почти до 14ГБ.
Не зная куда дальше копать, пока что закомментировали в NLog.config строки с выводом в MainLogFile. Не хочется, чтобы на праздники вдруг место закончилось.

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

Журнал NLog: nlog.zip — Яндекс.Диск

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

Часовой пояс верный. Сервер в Москве, UTC+03:00. Время синхронизировано автоматически.

Нашли потенциальную проблему в ротации журналов. Попробуйте заменить файлы NLog.config для службы и сервера на приведённые ниже. Это должно решить проблему с ротацией файлов журнала.

Автоматически заменим после выпуска 3.49.3

Сервер:

<?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"
			xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
			autoReload="true"
			throwExceptions="false"
			internalLogLevel="Off" internalLogToConsole="true">

  <!-- Переменная, которая определяет в какую подпапку будут записаны журналы -->
	<variable name="logFullPath" value="${specialfolder:folder=CommonApplicationData}/LERS/Logs/Server"/>

	<!--
	See https://github.com/nlog/nlog/wiki/Configuration-file
	for information on customizing logging rules and outputs.
	 -->

	<extensions>
		<add assembly="Lers.Server.Core"/>
		<add assembly="NLog.Web.AspNetCore"/>
		<add assembly="NLog.Targets.Seq"/>
	</extensions>

	<targets>
		<target xsi:type="File"
						name="MainLogFile"
						fileName="${var:name=logFullPath:default=}/server.${date:format=yyyy-MM-dd}.log"
						layout="${longdate}&#009;${level:format=FirstCharacter}:${threadid}&#009;${logger}&#009;${message}&#009;${exception-dump}&#009;${aspnet-TraceIdentifier}"
						maxArchiveDays = "7"
						encoding="windows-1251"/>

		<target xsi:type="File"
						name="ErrorLogFile"
						fileName="${var:name=logFullPath:default=}/server_error.${date:format=yyyy-MM-dd}.log"
						layout="${longdate}&#009;${level:format=FirstCharacter}:${threadid}&#009;${logger}&#009;${message}&#009;${exception-dump}&#009;${aspnet-TraceIdentifier}"
						maxArchiveDays = "7"
						encoding="windows-1251"/>

		<target xsi:type="EventLog"
				 name="LersEventLog"
				 layout="${logger}&#009;${message}&#009;${exception-dump}"
				 machineName="."
				 source="LersServer"
				 eventId="1"
				 log="ЛЭРС УЧЕТ"/>

		<!-- Цель для протоколирования в системный журнал ЛЭРС УЧЁТ -->
		<target xsi:type="LersSystemLog" name="lsl" layout="${message} ${exception-join-msg}"/>

		<!-- Кэш журнала для отправки сообщений об ошибках -->
		<target xsi:type="MemCache" name="memcache" layout="${longdate}&#009;${level:format=FirstCharacter}:${threadid}&#009;${logger}&#009;${message}&#009;${exception-dump}&#009;${aspnet-TraceIdentifier}"/>

  	<!-- Цель для протоколирования в журнал действий пользователя -->
		<target xsi:type="AccountLog" name="accountLog" layout="${message} ${exception-join-msg}"/>

		<!-- Цель для протоколирования в консоль. -->
		<target name="Console" xsi:type="Console" layout="${level:format=FirstCharacter}: ${message}"/>

		<target xsi:type="Null" name="BlackHole" />

	</targets>

	<rules>
		<!-- Игнорируем системные сообщения от EF и ASP.NET -->
		<logger name="Microsoft.*" maxlevel="Info" writeTo="Blackhole" final="true"/>
		
		<!-- Все сообщения пишем в файл сервера -->
		<logger name="*" minlevel="Debug" writeTo="MainLogFile"/>
		<logger name="*" minlevel="Debug" writeTo="memcache"/>

		<!-- Сообщения об ошибках и критических ошибках пишем в журнал ошибок -->
		<logger name="*" minlevel="Error" writeTo="ErrorLogFile"/>

		<!-- Правило для протоколирования в журнал Windows -->
		<logger name="*" minlevel="Info" writeTo="LersEventLog">
			<filters>
				<!-- Критические ошибки пишутся всегда -->
				<when condition="level >= LogLevel.Fatal" action="Log"/>

				<!-- Кроме критических ошибок записываем сообщения, у которых выставлен флаг LogEvent -->
				<when condition="'${event-properties:item=LogEvent}'!=True" action="Ignore"/>

			</filters>
		</logger>

		<!-- Правило для протоколирования в системный журнал ЛЭРС УЧЁТ -->
		<logger name="*" minlevel="Info" writeTo="lsl">
			<filters>
				<!-- Записываем сообщения, у которых выставлен флаг LogLersSystem -->
				<when condition="'${event-properties:item=LogLersSystem}'==True" action="Log"/>
			</filters>
		</logger>

		<!-- Правило для протоколирования в журнал действий учётной записи -->
		<logger name="*" minlevel="Info" writeTo="accountLog">
			<filters>
				<!-- Записываем сообщения, у которых выставлен флаг LogLersSystem -->
				<when condition="'${event-properties:item=LogAccount}'==True" action="Log"/>
			</filters>
		</logger>
	</rules>

  <include file="Custom.NLog.config"/>
</nlog>

Служба опроса:

<?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"
			xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
			autoReload="true"
			throwExceptions="false"
			internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">

	<!-- Переменная, которая определяет в какую подпапку будут записаны журналы -->
	<variable name="LersLogsDir" value="${specialfolder:folder=CommonApplicationData}/LERS/Logs" />
	<variable name="logFullPath" value="${var:name=LersLogsDir}/PollService"/>
	<variable name="dumpFileName" value="dump.${event-properties:item=PortName}"/>

	<extensions>
		<add assembly="PollerCore"/>
	</extensions>
	
	<targets>
		<target xsi:type="File"
				name="DumpFile"
				fileName="${var:name=logFullPath:default=}/${var:name=dumpFileName}.${date:format=yyyy-MM-dd}.log"
				layout="${longdate}&#009;${event-properties:item=direction}&#009;${event-properties:item=payload}"/>

		<target xsi:type="File"
					name="MainLogFile"
					fileName="${var:name=logFullPath:default=}/PollService.${date:format=yyyy-MM-dd}.log"
					layout="${longdate}&#009;${level:format=FirstCharacter}:${event-properties:item=PollSessionId}&#009;${logger}&#009;${event-properties:item=Driver} ${message}&#009;${exception:format=tostring}"
					maxArchiveDays="7"/>

		<target xsi:type="File"
					name="ErrorLogFile"
					fileName="${var:name=logFullPath:default=}/PollService_Error.${date:format=yyyy-MM-dd}.log"
					layout="${longdate}&#009;${level:format=FirstCharacter}:${event-properties:item=PollSessionId}&#009;${logger}&#009;${event-properties:item=Driver} ${message}&#009;${exception:format=tostring}"
					maxArchiveDays="7"/>

		<!-- Кэш журнала для отправки сообщений об ошибках -->
		<target xsi:type="MemCache" name="memcache"
						layout="${longdate}&#009;${level:format=FirstCharacter}:${event-properties:item=PollSessionId}&#009;${logger}&#009;${event-properties:item=Driver} ${message}&#009;${exception:format=tostring}"
		/>
	</targets>

	<rules>
		<!-- Дампы пишем в специальные журналы и останавливаем обработку правил, чтобы они не попадали в общие журналы работы. -->
		<logger name="Dumper" minlevel="Info" writeTo="DumpFile" final="true"/>

		<logger name="*" minLevel="Debug" writeTo="memcache" />

		<!-- Все сообщения пишем в файл службы опроса -->
		<logger name="*" minlevel="Debug" writeTo="MainLogFile"/>

		<!-- Сообщения об ошибках и критических ошибках пишем в журнал ошибок -->
		<logger name="*" minlevel="Error" writeTo="ErrorLogFile"/>
	</rules>


	<include file="Custom.NLog.config"/>
</nlog>