温馨提示×

linux fprintf如何实现日志分级

小樊
87
2024-08-27 00:08:23
栏目: 智能运维

在 Linux 中,使用 fprintf 函数可以将日志信息输出到文件或标准输出(例如控制台)

  1. 首先,定义一个日志级别枚举类型:
typedef enum {
    LOG_LEVEL_DEBUG,
    LOG_LEVEL_INFO,
    LOG_LEVEL_WARNING,
    LOG_LEVEL_ERROR,
    LOG_LEVEL_FATAL
} LogLevel;
  1. 创建一个全局变量来存储当前的日志级别:
LogLevel current_log_level = LOG_LEVEL_DEBUG;
  1. 编写一个用于设置日志级别的函数:
void set_log_level(LogLevel level) {
    current_log_level = level;
}
  1. 编写一个用于输出日志的函数,该函数接受日志级别、格式化字符串和可变参数列表:
#include <stdarg.h>
#include<stdio.h>
#include <time.h>

void log_message(LogLevel level, const char *format, ...) {
    if (level< current_log_level) {
        return;
    }

    const char *level_str[] = {"DEBUG", "INFO", "WARNING", "ERROR", "FATAL"};
    time_t now;
    struct tm *timeinfo;
    char buffer[80];

    time(&now);
    timeinfo = localtime(&now);
    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", timeinfo);

    printf("[%s] [%s] ", buffer, level_str[level]);

    va_list args;
    va_start(args, format);
    vprintf(format, args);
    va_end(args);

    printf("\n");
}
  1. 使用 log_message 函数输出不同级别的日志:
int main() {
    log_message(LOG_LEVEL_DEBUG, "This is a debug message.");
    log_message(LOG_LEVEL_INFO, "This is an info message.");
    log_message(LOG_LEVEL_WARNING, "This is a warning message.");
    log_message(LOG_LEVEL_ERROR, "This is an error message.");
    log_message(LOG_LEVEL_FATAL, "This is a fatal message.");

    return 0;
}

通过这种方法,你可以根据需要调整日志级别,从而控制输出的日志信息。

0