C语言 有颜色有等级的日志实现

这个博客介绍了如何实现一个带有颜色和等级的日志输出系统。通过定义不同的宏,可以方便地配置输出接口、选择最低的日志等级以及调整文件路径显示。源码中提供了LOG_DEBUG、LOG_INFO、LOG_WARN和LOG_ERR四个接口,分别对应不同颜色和严重性级别。通过修改配置,可以在不同平台上适配打印函数,并控制日志的详细程度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先看效果

在MobaXterm下显示的效果如图:
在这里插入图片描述
只需要调用log.h头文件即可,有LOG_DEBUG,LOG_INFO,LOG_WARN,LOG_ERR四个接口。

其中有三个需要配置的地方。
在这里插入图片描述
①:配置输出的接口,不同平台打印函数不一样;

②:LOG等级,DEBUG INFO WARN ERR四个等级依次增高,可以选择输出的最低等级;

③:地址分隔符。

源码

log.h

/*********************************************************************************
  *Author:              
  *Date:                2021.11.12
  *Description:         实现有等级有颜色的log输出
**********************************************************************************/
#ifndef __LOG_H__
#define __LOG_H__

#include <string.h>

/************************************配置区***************************************/
// 配置输出接口
#include <stdio.h>
#define LOG_PRINT(format, ...)  printf(format, ##__VA_ARGS__)

// 选择LOG等级 低于此等级的LOG不会打印
#define CURRENT_LOG_LEVEL   LOG_LEVEL_DEBUG

// 输出__FILE__文件名时可能带有很长的路径 只需要文件名就行了
// 地址分隔符  Linux中是正斜杠'/'  Windows中是反斜杠'\'
#define PATH_SEPARATOR      '/'
/************************************end*****************************************/

typedef enum{
    LOG_LEVEL_DEBUG,
    LOG_LEVEL_INFO,
    LOG_LEVEL_WARN,
    LOG_LEVEL_ERR,
}LOG_LEVEL;

// 颜色代码
#define LOG_COLOUR_BLACK           "\x1B[2;30m"
#define LOG_COLOUR_RED             "\x1B[2;31m"
#define LOG_COLOUR_GREEN           "\x1B[2;32m"
#define LOG_COLOUR_YELLOW          "\x1B[2;33m"
#define LOG_COLOUR_BLUE            "\x1B[2;34m"
#define LOG_COLOUR_MAGENTA         "\x1B[2;35m"
#define LOG_COLOUR_CYAN            "\x1B[2;36m"
#define LOG_COLOUR_WHITE           "\x1B[2;37m"

#define LOG_COLOUR_RESET           "\x1B[0m" 

// 去掉__FILE__中的路径
#define GET_FILE_NAME(path) strrchr(path, PATH_SEPARATOR)?strrchr(path, PATH_SEPARATOR)+1:path

// 调试log输出 青色
#define LOG_DEBUG(format, ...)                                                                                              \
if (CURRENT_LOG_LEVEL <= LOG_LEVEL_DEBUG)                                                                                   \
{                                                                                                                           \
    LOG_PRINT(LOG_COLOUR_CYAN "[DEBUG %s %d]" LOG_COLOUR_RESET format, GET_FILE_NAME(__FILE__), __LINE__, ##__VA_ARGS__);   \
} 

// 信息log输出 绿色
#define LOG_INFO(format, ...)                                                                                               \
if (CURRENT_LOG_LEVEL <= LOG_LEVEL_INFO)                                                                                    \
{                                                                                                                           \
    LOG_PRINT(LOG_COLOUR_GREEN "[INFO %s %d]" LOG_COLOUR_RESET format, GET_FILE_NAME(__FILE__), __LINE__, ##__VA_ARGS__);   \
} 

// 警告log输出 黄色
#define LOG_WARN(format, ...)                                                                                               \
if (CURRENT_LOG_LEVEL <= LOG_LEVEL_WARN)                                                                                    \
{                                                                                                                           \
    LOG_PRINT(LOG_COLOUR_YELLOW "[WARN %s %d]" LOG_COLOUR_RESET format, GET_FILE_NAME(__FILE__), __LINE__, ##__VA_ARGS__);  \
} 

// 错误log输出 玫红色
#define LOG_ERR(format, ...)                                                                                                \
if (CURRENT_LOG_LEVEL <= LOG_LEVEL_ERR)                                                                                     \
{                                                                                                                           \
    LOG_PRINT(LOG_COLOUR_MAGENTA "[ERR %s %d]" LOG_COLOUR_RESET format, GET_FILE_NAME(__FILE__), __LINE__, ##__VA_ARGS__);  \
} 

#endif

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值