.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");
额外注意事项
- 确保
LogProvider.SetCurrentLogProvider()的调用时机要早于任何获取日志实例的代码,比如在项目的启动初始化逻辑中执行:// 初始化日志提供器(示例用Serilog) LogProvider.SetCurrentLogProvider(new Logging.LogProviders.SerilogLogProvider()); // 之后再获取Logger实例 var logger = LogProvider.For<YourClassName>(); - 确认你使用的Liblog版本是支持.NET Standard 2.0的(建议使用v5.0.0及以上版本),避免版本兼容问题。
内容的提问来源于stack exchange,提问作者K D
相关产品推荐
相关产品推荐

