哪家专门做特卖的网站,网站设计就业,中山做网站优化,花都定制型网站建设本文向大家介绍一个名为Melon的开源C语言库的日志模块。
简述Melon
Melon是一个包含了开发中常用的各类组件的开源C语言库#xff0c;支持Linux、MacOS、Windows系统#xff0c;可用于服务器开发亦可用于嵌入式开发#xff0c;无第三方软件依赖#xff0c;安装简单…本文向大家介绍一个名为Melon的开源C语言库的日志模块。
简述Melon
Melon是一个包含了开发中常用的各类组件的开源C语言库支持Linux、MacOS、Windows系统可用于服务器开发亦可用于嵌入式开发无第三方软件依赖安装简单开箱即用中英文文档配套齐全。
日志模块
日志是Melon库提供的通用组建之一在介绍其特性前我们先来看一下它的简单使用示例。
#include mln_log.hint 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;
}可以看到使用与我们常用的printf或fprintf很相似。
同时从这个例子中也可以看到这个日志模块允许在未初始化情况下使用。在未初始化时这些日志都将被输出至stderr中。
当然我们也可以使用mln_log_init对日志模块进行初始化。初始化后将获得两种能力
日志会跟据不同等级显示不同的颜色日志内容既会被输出到stderr也会被输出到Melon配置中指定的日志文件中关于配置请参见官方手册。
进阶
显然我们的日志不仅仅可以做这些事情。
下一步我们将讨论如何将日志内容做自定义处理我们将介绍日志回调函数。
这里涉及到两个日志模块的函数
mln_log_logger_get 获取当前日志处理函数mln_log_logger_set 设置日志处理函数为某个指定的函数
我们看一下简单的例子我们对上面的例子进行一顿改造
#include stdio.h
#include mln_log.hmln_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对日志进行初始化的情况下这个函数就是多线程可用的。
感谢阅读