У меня есть веб-сайт ASP. NET Core 2.2, и я пытаюсь добавить на него журнал 4net, но не могу заставить журнал работать должным образом.
Я добавил журнал 4net .config файл ...
<?xml version="1.0" encoding="utf-8"?>
<log4net>
<appender name="RollingFileAppender"
type="log4net.Appender.RollingFileAppender">
<param name="File"
value="MyWebSite.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="2" />
<maximumFileSize value="5MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-7level %logger - %message%newline%exception" />
</layout>
</appender>
<appender name="Console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
Я установил для свойства «Копировать в выходной каталог» значение «Всегда» и изменил Program.cs, чтобы он выглядел так ...
public class Program {
public Program() {
ServiceProvider services = new ServiceCollection()
.AddLogging(logBuilder => logBuilder.SetMinimumLevel(LogLevel.Debug))
.BuildServiceProvider();
ILogger<Program> logger = services.GetService<ILoggerFactory>()
.AddLog4Net()
.CreateLogger<Program>();
}
public static void Main(string[] args) =>
CreateWebHostBuilder(args).Build().Run();
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureLogging(builder => {
builder.SetMinimumLevel(LogLevel.Trace);
builder.AddLog4Net("log4net.config");
});
}
Я ввел ILogger<MyController>
в контроллер. Чтобы проверить, все ли настроено правильно, я добавил следующие строки в метод действия в контроллере ...
ILoggerRepository repository = log4net.LogManager.GetAllRepositories().FirstOrDefault();
RollingFileAppender appender = repository.GetAppenders().OfType<RollingFileAppender>().FirstOrDefault();
string logFile = appender.File;
Во время выполнения переменная logFile
правильно установлена на путь к ожидаемый файл журнала, поэтому похоже, что он правильно инициализирован.
Однако, когда я пытаюсь использовать журнал следующим образом ...
_logger.Debug("Hello");
... ничего не записывается в в файл журнала.
Что еще более странно, так это то, что я использую Quartz. net в проекте, и это, кажется, может нормально записывать в файл журнала. Я вижу такие записи ...
DEBUG Quartz.Core.JobRunShell - Инструкция триггера: NoInstruction
DEBUG Quartz.Core.QuartzSchedulerThread - Пакетное получение из 1 триггеров
Я пробовал использовать старомодный root и создать новый экземпляр регистратора следующим образом ...
log4NetLogger= LogManager.GetLogger(typeof(MyController));
... но это не так это не имеет значения, поэтому я не думаю, что это инъекция.
Кто-нибудь знает, что я здесь делаю не так? Спасибо