Один и тот же файл журнала в нескольких проектах с использованием serilog

#c# #serilog

#c# #serilog

Вопрос:

У меня есть класс Logger.cs:

 public Logger(string logtype=null)
        {
            _logtype = logtype;
            LogEventLevel level = LogEventLevel.Warning;
            if (File.Exists(configPath))
            {
                XDocument xdoc = XDocument.Load(configPath);
                string val = xdoc.Descendants("logEnabled").First().Value;
                // if(clientConfig.LogEnabled == true)
                if (val == "true")
                {
                    level = LogEventLevel.Debug;

                }
                else if (val == "false")
                {
                    level = LogEventLevel.Warning;
                }
            }
            else
            {
                level = LogEventLevel.Warning;
            }
           _logger = new LoggerConfiguration()
                        .MinimumLevel.Debug()
                         .WriteTo.File(_filepath, level)
                         .CreateLogger();

        }
  

этот класс logger используется в нескольких проектах в решении. Как показано ниже:

     Class A {
     Logger _logger = new Logger("A");
    }

Class A1 {
     Logger _logger = new Logger("A");
    }

Class B {
     Logger _logger = new Logger("B");
    }

Class B1 {
     Logger _logger = new Logger("A");
    }
  

С моим приведенным выше кодом. Теперь я вижу, что в файл журнала записывается только первое ведение журнала. Класс A и класс A1 используют один и тот же файл журнала «A», когда моя программа выполняется, я вижу, что в журнале присутствует только протоколирование класса A, но не сообщения о протоколировании класса A1.
То же самое для классов B и B1, видны только сообщения класса B.

Как я могу использовать один и тот же файл журнала в нескольких проектах в решении?

Ответ №1:

Вам нужно будет включить общие файлы журналов для нескольких процессов, установить shared в true

 _logger = new LoggerConfiguration()
                .MinimumLevel.Debug()
                .WriteTo.File(_filepath, level, shared: true)
                .CreateLogger();
  

Для получения дополнительной информации проверьте общие файлы журнала

Комментарии:

1. Как можно установить это свойство через appsetting.json?

2. @user1066231 Попробуй "WriteTo": [{ "Name": "File", "Args": { "path": "log.txt", "shared": "true" } }]