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

.Net Standard 2.0下Liblog定义LIBLOG_PORTABLE后无法调用GetCurrentClassLogger

解决Liblog在.NET Standard 2.0(LIBLOG_PORTABLE)下无法调用GetCurrentClassLogger()的问题

这个问题其实是Liblog在便携模式(由LIBLOG_PORTABLE符号启用)下的设计限制导致的——当启用这个符号时,Liblog会移除一些依赖平台特定API的方法,GetCurrentClassLogger()就是其中之一,它原本依赖编译时的调用上下文信息自动推断日志类别,而便携模式下这类信息无法可靠获取。

给你两个可行的解决方案,都是官方推荐的便携模式用法:

方案一:使用泛型方法LogProvider.For<T>()获取日志实例

这是最简洁的替代方式,直接指定当前类作为泛型参数,Liblog会自动用该类的完整名称作为日志类别,效果和GetCurrentClassLogger()完全一致:

// 在你的类中声明日志实例
private static readonly ILog Logger = LogProvider.For<YourClassName>();

如果是静态类或者无法使用泛型的场景,也可以用typeof()指定类型:

private static readonly ILog Logger = LogProvider.For(typeof(YourClassName));

方案二:手动指定日志类别名称

如果你需要自定义日志类别,也可以直接传入字符串形式的类别名称:

private static readonly ILog Logger = LogProvider.GetLogger("Your.Custom.Log.Category");

额外注意事项

  1. 确保LogProvider.SetCurrentLogProvider()的调用时机要早于任何获取日志实例的代码,比如在项目的启动初始化逻辑中执行:
    // 初始化日志提供器(示例用Serilog)
    LogProvider.SetCurrentLogProvider(new Logging.LogProviders.SerilogLogProvider());
    // 之后再获取Logger实例
    var logger = LogProvider.For<YourClassName>();
    
  2. 确认你使用的Liblog版本是支持.NET Standard 2.0的(建议使用v5.0.0及以上版本),避免版本兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:00:27