开源C语言库Melon之日志模块

本文向大家介绍一个名为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对日志进行初始化的情况下,这个函数就是多线程可用的。

感谢阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/339514.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初识QT。

文章目录 前言一、QWidget1、了解内容main文件中的基本内容。.pro项目文件的内容。mywidget.h文件内容。命名规范和快捷键Qt助手 2、button按钮3、对象树4、信号和槽5、自定义信号和槽函数拓展 6、Lambda表达式7、练习 二、QMainWindow1、菜单栏和菜单项2、工具栏3、状态栏4、铆…

路由器实验总结(静态路由配置)

1、静态路由的配置 R2(config)#int s0/0/0 R2(config)#ip add 192.168.3.2 255.255.255.0 R2(config)# no shut R1(config)#int s0/0/0 R1(config)#ip add 192.168.3.1 255.255.255.0 R1(config)# no shut串口的配置是这样的&#xff0c;静态路由如下&#xff1a; R2(config)#…

2024年中科大分子生物研究生考试建议

文章目录 0.2023年复习题及考试重点1.2022复习题2.2021复习题3.2020复习题4.2018复习题5.2015-2016复习题6.Key:复习重点7.随堂测验-平时成绩 分子生物学复习资料及往年考题 0.2023年复习题及考试重点 更新中~ 1.2022复习题 1.分子生物学复习资料及往年考题&#xff1a;&…

基于SSM的好例文共享平台的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

【自学笔记】01Java基础-07面向对象基础-04接口与内部类详解

记录学习Java基础中有关接口类和内部类的知识。 1 接口 interface 关键字用于定义接口类&#xff0c;接口类是一系列方法的声明&#xff0c;一般只有方法的特征没有方法的实现&#xff0c;因此可以被不同的类接入实现&#xff0c;而这些实现可以具有不同的行为&#xff08;功…

如何利用ChatGPT快速生成月报?

随着每个月的结束&#xff0c;个人和团队经常需要编写月报来回顾和总结。这项任务通常消耗大量时间和精力。幸运的是&#xff0c;借助ChatGPT&#xff0c;这个过程可以变得更加简单和高效。接下来&#xff0c;我将详细介绍如何利用ChatGPT快速生成月报&#xff0c;从而帮助你节…

Java基于云计算的云HIS源码 云部署模式,可支持多家医院共同使用

Java基于云计算技术的B/S架构医院信息管理系统(简称云HIS)&#xff0c;采用前后端分离架构&#xff0c;前端由Angular、JavaScript开发&#xff1b;后端使用Java语言开发。功能包括门诊、住院、收费、电子病历、药品药房、药库、财务、统计等模块&#xff0c;支持医保接口。系统…

three.js 关键帧动画

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div class"box-right"…

【网络安全】【密码学】【北京航空航天大学】实验二、数论基础(中)【C语言和Java实现】

实验二、数论基础&#xff08;中&#xff09; 一、实验内容 1、扩展欧几里得算法&#xff08;Extended Euclid’s Algorithm&#xff09; &#xff08;1&#xff09;、算法原理 已知整数 a , b ,扩展的欧几里得算法可以在求得 a , b 的最大公约数的同时&#xff0c;找到一对…

openssl3.2 - 在VS2019下源码调试openssl.exe

文章目录 openssl3.2 - 在VS2019下源码调试openssl.exe概述笔记先看一个用.bat调用openssl干活的实例VS2019调试参数设置设置 - 命令参数设置 - 工作目录设置 - 环境变量将命令行中需要的文件拷贝到exe目录单步调试备注END openssl3.2 - 在VS2019下源码调试openssl.exe 概述 …

微信/QQ/百度网盘/QQ邮箱上传附件/网络上传文件很慢怎么办?

文章目录 前言解决 前言 继上一次遇到这个问题没几天&#xff0c;期间也断断续续遇到过一点 以为还是因为硬件原因&#xff0c;再一次进行长按关机键放静电&#xff0c;但是这次就没有效果了&#xff0c;上传还是超级慢。 此时我就以为我的电脑坏了&#xff0c;差点拿去修 直到…

【AI】AI和医疗大数据(1/3)

目录 一、医疗大数据有哪些 二、医疗大数据的特性 1. 隐私性 2. 复杂性 3. 不均衡性 4. 时序性 三、医疗大数据的目标和挑战 博主曾经在医疗智能设备领域创业&#xff0c;由于当时选择的模式过于复杂&#xff0c;包括了机械硬件、智能终端软硬件、院后微信生态做随访服务…