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