0

我正在开发一个程序,该程序创建一个或多个独立但同时工作的工人阶级。我希望改进日志记录,但为了便于阅读,希望每个工作对象都写入单独的日志文件。

我最初的计划是使用 Microsoft.Extensions.Logging.ILogger 通过 DI 使用 Serilog,但目前尚不清楚如何正确配置 Serilog,假设它是可能的。WriteTo.Map似乎很接近,但似乎无法获得我可能正在处理的对象的动态数量,并且需要一个在注入的 ILogger 对象中不可用的 propertyName 字符串。

在下面我一直在测试的模型中,我希望为每个 Worker 对象生成一个单独的日志文件,例如 worker0.log、worker1.log 等。

核选项似乎是在每个 Worker 对象中配置一个单独的 LoggerFactory 但我认为这太过分了。有没有一种简单的方法可以使用一个 LoggerFactory 来实现这一点?

主班

public class MainClass
    {
        ILoggerFactory _factory = null;
        ILogger _logger = null;

        Worker[] workers = { };

        public MainClass(ILoggerFactory factory)
        {
            
            var serilog = new LoggerConfiguration().MinimumLevel.Verbose()
                                                   .WriteTo.???
                                                   .CreateLogger();

            _factory = new LoggerFactory().AddSerilog(serilog);
            _logger = _factory.CreateLogger("Main");
            _logger.LogInformation("Main created.");

            workers = Enumerable.Range(0, 3).Select(r => new Worker(factory.CreateLogger($"worker{r}"))).ToArray();
        }

        public void Execute()
        {
            _logger.LogInformation("doing work");

            foreach (var s in workers) s.DoWork();
        }
    }

工人阶级

public class Worker
    {
        ILogger _logger = null;

        public Worker(ILogger logger)
        {
            _logger = logger;
            _logger.LogInformation("Worker instantiated.");
        }

        public void DoWork()
        {
            // work stuff
            _logger.LogInformation("working");
        }
}
4

0 回答 0