请说明在 .NET 应用程序中,借助 ILogger 接口进行日志记录的具体做法,包括其依赖注入方式、日志级别有哪些,以及如何通过配置控制不同级别的输出。
考察说明
考查对 .NET 内置日志框架 ILogger 的基本用法和扩展知识的掌握程度。
回答思路
- 【回答框架 1】ILogger 是 .NET 中用于日志记录的抽象接口,通常通过依赖注入获取。在构造函数中注入 ILogger<T>,T 为当前类,这样可以自动包含类别名称,便于区分日志来源。
- 【回答框架 2】日志级别包括 Trace, Debug, Information, Warning, Error, Critical,级别依次升高。通过日志提供程序(如控制台、文件、事件查看器等)和配置(如 appsettings.json 中的 Logging 节点)可以设置全局或按类别的级别过滤,只有达到设定级别的日志才会被记录。
- 【回答框架 3】使用 ILogger 时常见的扩展方法有 LogInformation, LogError, LogWarning 等,它们是对 Log(LogLevel, ...) 的封装。建议使用带结构化占位符的写法,例如 logger.LogInformation("User {UserId} logged in", userId),而不是字符串拼接,这样利于日志查询和分析。
- 【回答框架 4】日志提供程序通过 AddConsole(), AddDebug() 等方法注册到 ILoggingBuilder,还可配合第三方如 Serilog 进行扩展。配置过滤器可在 appsettings.json 中设置,例如设置 Microsoft 为 Warning,可减少框架噪声。
- 【关键点 1】ILogger 通过依赖注入获取,通常注入 ILogger<T>。
- 【关键点 2】日志级别从低到高为 Trace, Debug, Information, Warning, Error, Critical。
- 【关键点 3】日志过滤和提供程序通过配置和 AddXxx 方法设置。
- 【关键点 4】结构化日志记录优于字符串拼接,便于分析和检索。
- 【易错点 1】过度记录敏感信息或过细粒度日志可能影响性能并带来安全风险。
- 【易错点 2】未正确配置日志级别可能导致生产环境日志过少或过多。
- 【易错点 3】依赖注入生命周期问题可能导致日志实例未释放,但通常 ILogger 由容器管理,需注意不要手动创建。