龙空技术网

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

码哥比特 332

前言:

目前看官们对“c语言工作日志”大概比较注意,兄弟们都需要分析一些“c语言工作日志”的相关知识。那么小编在网上收集了一些关于“c语言工作日志””的相关文章,希望同学们能喜欢,大家快快来学习一下吧!

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

Github: github.com/Water-Melon/Melon

简述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对日志模块进行初始化。初始化后将获得两种能力:

日志会跟据不同等级显示不同的颜色日志内容既会被输出到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对日志进行初始化的情况下,这个函数就是多线程可用的。

Github: github.com/Water-Melon/Melon

官方文档:doc.melonc.io

感谢阅读!

标签: #c语言工作日志