You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Microsoft.Extensions.Logging.ILogger检查当前日志级别

解决方案

方法1:使用ILogger自带的IsEnabled方法判断

Microsoft.Extensions.Logging.ILogger 接口原生提供了 IsEnabled(LogLevel level) 方法,用于检查当前日志实例是否启用了指定的日志级别,你可以直接用这个方法实现需求。
修改后的代码示例:

private Microsoft.Extensions.Logging.ILogger<RoutesController> _logger = null;

public RoutesController(Microsoft.Extensions.Logging.ILogger<RoutesController> logger)
{            
    _logger = logger;
}

public void Route([FromBody]JObject request)
{
    // 检查Information级别是否启用
    if(_logger.IsEnabled(LogLevel.Information))
    {
        _logger.LogInformation("{request}", JsonConvert.SerializeObject(request));
    }           
}

方法2:直接使用结构化日志模板,无需手动判断

你不需要自己手动做级别判断和序列化操作,Serilog以及微软日志抽象的默认实现逻辑是:先校验日志级别是否启用,再执行参数的序列化、模板渲染操作。如果当前日志级别高于Information,日志框架会直接跳过后续所有处理,不会产生序列化的性能损耗。
你可以直接简化代码为:

public void Route([FromBody]JObject request)
{
    // 使用@解构符号,Serilog会自动将对象序列化为结构化JSON属性,比手动序列化为字符串更利于后续日志检索
    _logger.LogInformation("{@Request}", request);
}

这种写法既省去了手动判断的代码,也不会在日志级别未启用时产生多余的序列化开销,同时还能保留结构化日志的特性,更推荐使用。

内容的提问来源于stack exchange,提问作者LP13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 21:06:01