Skip to main content

Command Palette

Search for a command to run...

抽象日志组件

Published
1 min read
抽象日志组件

本篇是基于Liblog 的结构分析,同时我提倡在非netcore项目中使用此类库,正常情况下只需要在基础组件库中生成单个文件即可,同时一次安装,终身有效。

日志核心功能以接口的方式进行定义,简单有效:

 interface ILog{
    bool Log(LogLevel logLevel, Func<string> messageFunc, Exception exception = null,
            params object[] formatParameters);
 }

Liblog的核心是使用提供者模式(Provider Pattern)来实现对各种具体日志实现支持的。调用方面通过 LogProvider.GetCurrentClassLogger() 或者 LogProvider.For() 来获取Ilog的实例。其中GetCurrentClassLogger() 适用与所有静态类或者扩展方法,For()主要用于可实例化的内部。

private static readonly ILog logger = LogProvider.GetCurrentClassLogger()

private static readonly ILog Logger = LogProvider.For()

两个小问题

  • 日志缓存策略,即生成的日志在本地存在buffer中,后续一次性提交,或者出现了整个日志内容过大,导致无法一次性提交的情况;那么Logproverider.For() 获取的日志实例会出现无法释放的问题,最后只能通过强制GC来释放。解决方案,尽可能控制你的日志文本大小。

  • LogProvider.GetCurrentClassLogger()并非是一个线程安全方法,如果需要在Parallel和Task中使用的话,一定要在外部获取实例后传递进去;

关于多线程下的日志实践,这个问题比较头大,会单独开一章来描述我的方案

4 views

More from this blog

GitHub 开源项目仓库汇总(2026-04-25 更新)

GitHub 开源项目仓库汇总(2026-04-25 更新) 数据来源:IMA 知识库 GitHub 相关内容整理 | 每周自动更新 本期新增 15 个项目,总计收录 44 个优质开源项目 📊 本周更新亮点 本周新增 15 个项目,重点聚焦 AI Coding 与 MLOps 基础设施: 🤖 AI Coding 全景图:OpenClaw(356K ⭐)、Claude Code(113K ⭐)、opencode(145K ⭐)等领跑赛道 🧠 记忆与持久化:claude-mem(59K ...

Apr 25, 20265 min read6

GitHub 开源项目仓库汇总(2026-04-18 更新 | 新增 6 项)

GitHub 开源项目仓库汇总(2026-04-18 更新) 数据来源:IMA 知识库 GitHub 相关内容整理 | 每周自动更新 本期新增 6 个项目,总计收录 29 个优质开源项目 📊 本周更新亮点 本周新增 6 个项目,包括: AI Coding 多 Agent 协调平台 multica(本周 +5,362 stars) AI 持久记忆框架 MemPalace(43k+ stars) AI 编码工作流编排器 Archon(17k+ stars) 全场景具身机器人数据集 AGIBO...

Apr 18, 20262 min read5
A

Agile Robin

42 posts

living an Awesome Life