百变开源 C 语言库日志模块 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
monkeyNik
V2EX    C

百变开源 C 语言库日志模块

  •  
  •   monkeyNik 2023-09-12 22:46:21 +08:00 1004 次点击
    这是一个创建于 826 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本文向大家介绍一个名为Melon的开源 C 语言库的日志模块。

    简述 Melon

    Melon 是一个包含了开发中常用的各类组件的开源 C 语言库,支持 Linux 、MacOS 、Windows 系统,可用于服务器开发亦可用于嵌入式开发,无第三方软件依赖,安装简单,开箱即用,中英文文档配套齐全。

    日志模块

    日志是 Melon 提供的通用组建之一,在介绍其特性前,我们先来看一下它的简单使用示例。

    #include "mln_log.h" int main(int argc, char *argv[]) { mln_log(debug, "This will be outputted to stderr\n"); mln_log_init(NULL); mln_log(debug, "This will be outputted to stderr and log file\n"); return 0; } 

    可以看到,使用与我们常用的printffprintf很相似。

    同时,从这个例子中也可以看到这个日志模块允许在未初始化情况下使用。在未初始化时,这些日志都将被输出至stderr中。

    当然,我们也可以使用mln_log_init对日志模块进行初始化。初始化后将获得两种能力:

    1. 日志会跟据不同等级显示不同的颜色
    2. 日志内容既会被输出到 stderr ,也会被输出到 Melon 配置中指定的日志文件中(关于配置,请参见官方手册)。

    进阶

    显然,我们的日志不仅仅可以做这些事情。

    下一步我们将讨论如何将日志内容做自定义处理,我们将介绍日志回调函数。

    这里涉及到两个日志模块的函数:

    • mln_log_logger_get 获取当前日志处理函数
    • mln_log_logger_set 设置日志处理函数为某个指定的函数

    我们看一下简单的例子,我们对上面的例子进行一顿改造:

    #include <stdio.h> #include "mln_log.h" mln_logger_t old = NULL; static void mylogger(mln_log_t *log, mln_log_level_t level, const char *file, const char *func, int line, char *fmt, va_list args) { printf("%s:%s:%d: %s\n", file, func, line, fmt); if (old != NULL) old(log, level, file, func, line, fmt, args); } int main(int argc, char *argv[]) { mln_log(debug, "This will be outputted to stderr\n"); mln_log_init(NULL); old = mln_log_logger_get(); mln_log_logger_set(mylogger); mln_log(debug, "This will be outputted to stderr and log file\n"); return 0; } 

    我们增加了一个自己的日志处理函数名为mylogger,它将截获日志的内容及其关联信息,使用printf将这些信息输出到标准输出(stdout)中。然后再使用原有的日志处理函数将日志输出到终端的stderr和日志文件中。

    这样,我们就可以随意地对日志内容进行处理了。

    结语

    Melon 的日志模块允许开发者对其进行任意扩展来满足自己的需求。

    另外,要补充一点,这个mln_log是允许多线程使用的。并且对于x86 架构,在不调用mln_log_init对日志进行初始化的情况下,这个函数就是多线程可用的。

    感谢阅读!

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1066 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 18:16 PVG 02:16 LAX 10:16 JFK 13:16
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86