日志打印

1 日志概述

日志等级描述
DEBUG指出细粒度信息事件对调试应用程序是非常有帮助的,一般认为比较重要的方法执行需要详细查看运行情况的则开启DEBUG
INFO表明消息在粗粒度级别上突出强调应用程序的运行过程,只需要了解该方法是否运行的可以使用INFO
WARN表明会出现潜在错误的情形
ERROR指出虽然发生错误事件,但仍然不影响系统的继续运行。一般异常处理等情况都需要ERROR
FATAL指出每个严重的错误事件将会导致应用程序的退出

2 打印日志

工程目录

log
|   build.sh
|   CMakeLists.txt
|   README.md
+---include
|       log.h
\---src
        main.cc
        log.cc
#include "log.h"

int main()
{
    // Log level control
    setLogLevel(DEBUG);
    log(ERROR, "[ERROR] FILE: %s, LINE: %d\n", __FILE__, __LINE__);

    setLogLevel(INFO);
    log(ERROR, "[ERROR] FILE: %s, LINE: %d\n", __FILE__, __LINE__);

    // Debug/Release control
    LOG("[ERROR] FILE: %s, LINE: %d\n", __FILE__, __LINE__);

    return 0;
}
// log.h
#ifndef LOG_H
#define LOG_H

#include <stdint.h>
#include <stdio.h>

// Log level control
typedef enum {
    INFO   = 0,
    DEBUG  = 1,
    WARN   = 2,
    ERROR  = 3,
    FATAL  = 4,
    CLOSED = 255,
} log_level_t;

void setLogLevel(log_level_t level);
void log(log_level_t level, const char *format, ...);

// Debug/Release control
#define __LOG__
#ifdef __LOG__ 
#define LOG(format,...) printf(format, ##__VA_ARGS__)
#else 
#define LOG(format,...) 
#endif
#define __LOG__

#endif
// log.cc
#include "log.h"
#include <stdarg.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

log_level_t g_LogLevel = CLOSED;

void setLogLevel(log_level_t level)
{
    g_LogLevel = level;
}

void log(log_level_t level, const char *format, ...)
{
    va_list ap;

    if ((NULL == format) || (level < g_LogLevel))
    {
        return;
    }

    memset(&ap,0,sizeof(va_list));
    (void)va_start(ap, format);
    vprintf(format,ap);
    va_end(ap);
}
cmake_minimum_required(VERSION 2.8)
project(demo)

include_directories(include)
aux_source_directory(src SRC_LIST)
add_executable(main ${SRC_LIST})
#!/bin/bash
# build.sh
ROOT_PATH=$(pwd)
PROJECT_PATH=${ROOT_PATH}/project

if [[ -d "${PROJECT_PATH}" ]]; then
    rm -rf ${PROJECT_PATH}
fi
mkdir -p ${PROJECT_PATH}

cd ${PROJECT_PATH} && cmake -G "Unix Makefiles" ../
make -j8

./main

3 参考链接

[1] https://blog.youkuaiyun.com/m0_37179470/article/details/81238012

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值