在非控制器模型上传递 Ilogger

Pass Ilogger on non-controller models

我正在 .net core 中创建一个应用程序,我正在尝试输出日志。

我能够记录控制器的输出,我还想记录模型的输出,如下所示。

不幸的是,我不知道将什么作为参数传递给构造函数。我的猜测和controller一样Ilogger<controller>,但是想知道有没有正确的方法

提前致谢。

控制器:

public class SampleController : Controller {
    public readonly ILogger<SampleController > _logger;
    public SampleController (ILogger<SampleController > logger)
    {
        _logger = logger;
    }


    [HttpGet("[action]")]
    public string FindSample()
    {
        _logger.LogInformation("FindSample Start");

        // ***** Is it necessary to carry over the log of the sample controller to a much lower DAO from here? *****
        var model = new SampleModel(_logger);
        var result = model.Find();

        _logger.LogInformation("FindSample End");
        return result;
    }
}

型号:

    public class SampleModel
    {
        public readonly ILogger<SampleController> _logger;
        public SampleModel(ILogger<SampleController> logger)
        {
            _logger = logger;
        }

        public string Find()
        {
            _logger.LogInformation("FindModel Start");

            var dao = new SampleDao(_logger);
            var code = dao.GetCode();

            _logger.LogInformation("FindModel End");
            return code;
        }
    }

道:

    public class SampleDao
    {
        public readonly ILogger<SampleController> _logger;
        public SampleContext SampleContext;

        // ***** Should I pass it as an argument forever? *****
        public SampleDao(ILogger<SampleController> logger)
        {
            _logger = logger;
            if (SampleContext == null)
            {
                SampleContext = new SampleContext();
            }
        }

        public string GetCode()
        {
            _logger.LogInformation("GetCode Start");

            var code = SampleContext.SampleTable.FirstOrDefault().code;

            _logger.LogInformation("GetCode End");
            return code;
        }
    }

您应该将 class 作为通用参数传递给记录器被注入的地方。所以你应该使用:

在你的道中

ILogger<SampleDao> logger

在您的模型中

ILogger<SampleModel> logger

更多信息您可以查看: Logging in ASP.NET core