首页 > 其他分享 >02_实战项目Zlog日志框架

02_实战项目Zlog日志框架

时间:2023-09-19 12:13:04浏览次数:53  
标签:02 EM const LOG app start printf Zlog 日志

Zlog日志

注释控制日志打印

//printf("app start\n");
printf("app start\n");
printf("app start\n");
//printf("app start\n");
printf("app start\n");
//printf("app start\n");
printf("app start\n");

特点: 麻烦,产品发布时要注释所有日志, 开发时要打开日志

define 控制日志打印

#include <stdio.h>
// #define OPEN_LOG 1
int main(int argc, char const *argv[])
{
#ifdef OPEN_LOG
    printf("app start\n");
#endif
    printf("constant.\n");
#ifdef OPEN_LOG
    printf("app start\n");
#endif
    return 0;
}

特点: 比注释高效, 但每次打印日志都需要加#ifdef OPEN_LOG和#endif

日志打印工具文件

log.c

#include "log.h"
char *EM_LOGLevelGet(const int level)
{
    switch (level)
    {
    case LOG_DEBUG:
        return "DEBUG";
    case LOG_INFO:
        return "INFO";
    case LOG_WARN:
        return "WARN";
    case LOG_ERROR:
        return "ERROR";
    default:
        return "UNKNOW";
    }
}
void EM_LOG(const int level, const char *fun, const int line, const char *fmt, ...)
{
#ifdef OPEN_LOG
    va_list arg;
    va_start(arg, fmt);
    char buf[vsnprintf(NULL, 0, fmt, arg)];
    vsnprintf(buf, sizeof(buf) + 1, fmt, arg);
    va_end(arg);
    if (level >= LOG_LEVEL)
    {
        printf("[%s] [%s %d] %s\n", EM_LOGLevelGet(level), fun, line, buf);
    }
#endif
}

log.h

#ifndef __EM_LOG_H__
#define __EM_LOG_H__

#include<stdio.h>
#include <stdarg.h>
#define OPEN_LOG 1
#define LOG_LEVEL LOG_DEBUG

typedef enum
{
    LOG_DEBUG = 0,
    LOG_INFO,
    LOG_WARN,
    LOG_ERROR,
} E_LOGLEVEL;

extern void EM_LOG(const int level, const char *fun, const int line, const char *fmt, ...);

#define EMLog(level, fmt...) EM_LOG(level, __FUNCTION__, __LINE__, fmt)

#endif

调用日志文件

#include<stdio.h>
#include"log.h"
int main(int argc, char const *argv[])
{
    int a = 10, b = 11;
    // EM_LOG(LOG_DEBUG, "app LOG_DEBUG");
    // EM_LOG(LOG_INFO, "A = %d", a);
    // EM_LOG(LOG_WARN, "app LOG_WARN");
    // EM_LOG(LOG_ERROR, "app LOG_ERROR");
    EMLog(LOG_DEBUG, "app_start");
    return 0;
}

标签:02,EM,const,LOG,app,start,printf,Zlog,日志
From: https://www.cnblogs.com/mzx233/p/17714276.html

相关文章

  • 支持SpEL表达式的自定义日志注解@SysLog介绍
    目录序言预期思路过程结果序言之前封装过一个日志注解,打印方法执行信息,功能较为单一不够灵活,近来兴趣来了,想重构下,使其支持表达式语法,以应对灵活的日志打印需求。该注解是方法层面的日志打印,如需更细的粒度,还请手撸log.xxx()。预期通过自定义注解,灵活的语法表达式,拦......
  • BD202301 公园
    BD202301公园T和F走到一个汇合点一起走到N设汇合点为X则要TX和FX和XN的最短距离BFST、F、N到每个点的最短距离遍历每一个点去寻找X取答案最小值ans=min(ans,TX*te+FX*fe+XN*(te+fe-s))#include<bits/stdc++.h>usingnamespacestd;usingll=long......
  • 【漏洞复现】Openfire身份认证绕过漏洞到RCE(CVE-2023-32315)
    1、简介Openfire是一个基于XMPP协议的即时通讯服务器,也称之为即时通讯平台。在即时通讯中往往因为需要保存一些状态或者数据所以不能采用点对点通讯,而是需要搭建服务器来转发。Openfire的管理页面包含5个菜单选项,分别是服务器基本信息配置选项、用户组管理选项、会话管理选项、分......
  • 【2023-09-18】混乱出新序
    20:00巨大的建筑,总是一木一石叠起来的,我们何妨做这一木一石呢?我时常做些零碎,就是为此。                                                 ——XX周五下午,我收到了气象......
  • 【2023.09.17】拥抱自己的黑暗面
    主动说出自己不好的一面,是否是一件坏事呢?我思考这个问题最近有在尝试和别人说出自己不好的一面,我在寻找自己的缺点在哥们看来这再正常不过了,甚至觉得我太过坦诚但是在异性眼里看来,这样子的交流,是不好的或许在与异性交往的时候,大家只要戴上面具,只要展示出自己最好的一面就足够......
  • 2023年9月上海/杭州/广州/深圳DAMA-CDGA/CDGP数据治理认证报名
    DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业竞争能力。DAMA是数据管理方面的认证,帮助数据从业者提升......
  • 2023年9月上海/杭州/深圳NPDP产品经理国际认证报名
    产品经理国际资格认证NPDP是新产品开发方面的认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。  【认证机构】 产品开发与管理协会(PDMA)成立于1979年,是全球范围内产品开发与管理专业人士最杰出的倡导者,协助个人、企业......
  • 2023年9月上海/杭州/深圳CSPM-3国标项目管理中级认证报名
    CSPM-3中级项目管理专业人员评价,是中国标准化协会(全国项目管理标准化技术委员会秘书处),面向社会开展项目管理专业人员能力的等级证书。旨在构建多层次从业人员培养培训体系,建立健全人才职业能力评价和激励机制的要求,培养我国项目管理领域复合型人才。  【证书含金量】 ·竞聘优先......
  • 2023.9.19值得推荐的一款服务器空间
    ,已经体验一个月咯,非常不错的免费资源,适合大家去了解了解~!他们家的免费空间,免费服务器,非常稳定,非常靠谱,值得拥有,价格厚道~!免备案服务,域名管理等等服务,应有尽有,2023年你值得了解,他们家的免费云服务器还是独立IP的哦,非常非常好,非常NICE~!官网地址:https://www.sanfengyun.com......
  • 2023.9.18日报
    今日研究了通过sqoop把hive的数据导出到mysql,值得注意的是,我起初理解的是通过hive导出到windows的mysql,因此我研究了很久,之后查阅之后发现其实是通过navicat连接虚拟机的mysql,把hive的数据导出到mysql,通过navicat在windows上可视化具体的语句如下sqoopexport\--connectjd......