分享自己写的一个简化版LOG输出宏

extern int verbose;

#define DBG(...) XLOG(4, "DBG", __VA_ARGS__)
#define INFO(...) XLOG(3, "INF", __VA_ARGS__)
#define WRN(...) XLOG(2, "WRN", __VA_ARGS__)
#define ERR(...) XLOG(1, "ERR", __VA_ARGS__)
#define OUT(...) XLOG(0, "OUT", __VA_ARGS__)
#define XLOG(level, LOG_LEVEL, ...) do{    if(verbose >= (level)) {        time_t _tm = 0;        struct tm log_tm = {0};        time(&_tm);        localtime_r(&_tm, &log_tm);        fprintf(stdout, "%4d-%2.2d-%2.2d %2.2d:%2.2d:%2.2d %3s | ", log_tm.tm_year+1900, log_tm.tm_mon+1, log_tm.tm_mday, log_tm.tm_hour, log_tm.tm_min, log_tm.tm_sec, LOG_LEVEL);        fprintf(stdout, __VA_ARGS__);}    }}while(0)

verbose是全局变量,用来限制输出等级,小于此等级的信息会被输出,例如,如果verbose = 4,则全部信息都会输出,如果verbose = 3,则DBG信息不会输出。

使用方法同printf,只是把printf替换为DBG、INFO等。

DBG("abcdefg%d.\n", a);

这是一个非常简化版的,并且只能输出到屏幕,只需要将其加到.h文件就可以使用。

另一个版本需要.c和.h,使用也更复杂:

时间: 2024-10-10 05:56:10

分享自己写的一个简化版LOG输出宏的相关文章

分享最近写的一个存储过程 SOLVE_LOCK

CREATE OR REPLACE PROCEDURE SOLVE_LOCK AS V_SQL VARCHAR2(3000); --定义 v_sql 接受抓取锁的sql语句V_SQL02 VARCHAR2(3000); KILL_SID NUMBER;KILL_SERIAL NUMBER; CUR_LOCK SYS_REFCURSOR; --定义游标变量,循环执行抓取锁的sql语句CUR_LOCK02 SYS_REFCURSOR; TYPE TP_LOCK IS RECORD( --定义 rec

分享最近抽空写的一个代码生成器,集成EasyDBUtility数据库访问帮助类

一直想写一个自己的代码生成器,但是因为工作事情多,一直搁置下来,最近下决心终于利用下班时间写完了,现在分享给有需要的朋友,代码生成器集成EasyDBUtility数据库访问帮助类,暂时只支持sqlserver数据库,界面如下 部分代码如下 using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Te

写了一个DELPHI操作USB摄像头类分享给大家

最近在使用Usb摄像头做了个项目,其中写了一个操作usb摄像头类分享给大家 {*******************************************************} { } { 操作USB摄像头类 } { } { 作者:lqen } { 日期:2015.05.18 } { } {*******************************************************} unit untUsbCamera; interface uses Window

分享我写的IOCP:源码+思路

首先说明,下面的代码仅是一个IOCP的demo,很多地方的设计非常差,当然也有一些设计还算可以:).此篇仅供对IOCP有些了解但又不深入的.需要一个稍微完整示例的.对网络编程感兴趣的同学参考.点击这里下载代码 整个程序的流程如下: 流程完全是无阻塞的,主线程里,将收到的消息全都一次性取出后,然后派发.所有欲发送的消息都缓存起来,等到更新的时候一起发送.有些地方代码没有完善,比如断开连接后,socket.内存等资源的关闭回收.要注意MAXRECEIVEDBUFFLENGTH这个宏,它是定义每个so

初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助

初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助,如果有bug或者更好的优化方案,也请批评与指正,谢谢,代码如下: 1 var fs = require('fs'); 2 var tel = [ 3 "1/2/4/6/a.tpl.html", 4 "1/2/4/7/9/c.tpl.html", 5 "1/3/5/8/b.tpl.html"]; 6 var demo = function (mulu)

自己写的一个自动化测试任务执行工具(模板)

@echo off REM 设置自动执行的最大次数 SET nMaxJobTimes=100 REM 启用变量延迟 setlocal enabledelayedexpansion FOR /L %%i IN (0,1,%nMaxJobTimes%) DO ( cls echo. echo. echo ******************************************** echo. echo 测试任务自动化执行工程 echo 版本:v1.0.0.1 echo. echo ***

用avalon写的一个弹窗demo

之前项目中,用avalon写的一个模块,单独拿出来了,一个小弹窗的效果. demo地址: http://www.hui12.com/nbin/demo/4a/4a.html html: <div class="people-pop-shade" ms-controller="vmPeoplePop" ms-visible="toggleShade"> <div class="people-pop-box" m

kafka入门三:写第一个Kafka应用

一.整体看一下Kafka 我们知道,Kafka系统有三大组件:Producer.Consumer.broker . producers 生产(produce)消息(message)并推(push)送给brokers,consumers从brokers把消息提取(pull)出来消费(consume). 二.开发一个Producer应用 Producers用来生产消息并把产生的消息推送到Kafka的Broker.Producers可以是各种应用,比如web应用,服务器端应用,代理应用以及log系统等

用js写的一个路由

前几天在院子里看了一个大牛用js写了一个路由的,有一句代码一直不知道怎么回事,后来就自己写了一个,写的比较的粗糙,我觉得把面向对象的思想都搞得乱七八糟的,不过功能实现了. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>js实现路由</title> </head> <body> &