Я хотел бы войти в разные файлы журнала в зависимости от информации.
Файл журнала приложения должен содержать общую информацию о поведении и исключениях приложения или службы.
Внутри службы я хотел бы войти в файл журнала приложения и для вещей, которые не подходят для общего файла журнала, в файл журнала службы. Примером файла журнала службы может быть связь через последовательный порт.
У меня есть основное приложение .net, в котором я инициализирую Log4Net Logger:
public void Configure(..., ILoggerFactory loggerFactory, ...)
{
...
loggerFactory.AddLog4Net();
...
}
Мой log4net.config для журнала приложений выглядит так:
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<appender name="console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level %logger - %message%newline" />
</layout>
</appender>
<appender name="file" type="log4net.Appender.RollingFileAppender">
<file value="logs/application.log" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="-yyyyMMdd" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="5MB" />
<preserveLogFileNameExtension value="true" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
</layout>
</appender>
</log4net>
Я использую внедрение зависимостей, чтобы использовать регистратор в службах, которые реализованы в проектах .net Standard 2.0. Эти проекты имеют ссылку на пакет nuget Microsoft.Extensions.Logging.Abstractions. https://github.com/aspnet/Extensions/tree/master/src/Logging/Logging.Abstractions/src
Пример службы
public void MyService(ILogger<MyService> logger)
{
logger.Log(LogLevel.Information, $"application log info");
// How to log to the service log file?
// logger.LogServiceLog(LogLevel.Information, $"service log info")
}
Я знаю, что могу настроить log4net для регистрации в разных файлах журналов в зависимости от пространства имен. Однако я хочу иметь возможность использовать оба файла журнала.
Есть ли способ добиться этого с помощью Microsoft.Extensions.Logging.Abstractions?
Могу ли я записать область действия в другой файл журнала?
using (_logger.BeginScope("Service Scope"))
{
_logger.LogInformation("Service info");
}