log 4net регистратор не записывает мои журналы в файл, но записываются журналы Quart. net - PullRequest
0 голосов
/ 02 августа 2020

У меня есть веб-сайт 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));

... но это не так это не имеет значения, поэтому я не думаю, что это инъекция.

Кто-нибудь знает, что я здесь делаю не так? Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...