自学内容网 自学内容网

c++中spdlog的使用/python中logger的使用

个人测试,有问题还请指出,谢谢

一、c++

可以同时在本地保存日志文件和在控制台以不同颜色显示

需要文件包含文件以及依赖库:https://download.csdn.net/download/Word_And_Me_/89556265

1、main.cpp

#include <iostream>

#include "Logger.h"

#pragma warning(disable:4996)

int main() {
initLogger();
logger->info("测试info");
logger->debug("测试debug");
logger->error("测试error"); 
    logger->warn("测试warn");

return 0;
}

运行结果: 

2、Logger.h

// #pragma once
#ifndef LOGGER_H
#define LOGGER_H

#include <iostream>
#include <vector>
#include <memory>
#include <spdlog.h>
#include <spdlog/sinks/basic_file_sink.h>
#include <spdlog/sinks/rotating_file_sink.h>
#include <spdlog/sinks/stdout_color_sinks.h>

extern std::shared_ptr<spdlog::logger> logger;

void initLogger();

#endif // !LOGGER_H

3、Logger.cpp

#include "Logger.h"

std::shared_ptr<spdlog::logger> logger;

void initLogger() {
    try {
        std::shared_ptr<spdlog::sinks::rotating_file_sink_mt> file_sink;
        std::shared_ptr<spdlog::sinks::stdout_color_sink_mt> console_sink;
        // 创建彩色控制台 sink
        console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
        console_sink->set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%n] [%^%l%$] %v"); // [%^%l%$] 中的 %^ 和 %$ 是颜色标记,%l 是日志级别,这样可以在日志级别部分应用颜色。
        console_sink->set_level(spdlog::level::debug);

        // 创建一个旋转文件日志记录器,每个文件最大10MB,保留10个文件
        // logger_file = spdlog::rotating_logger_mt("running-process", "logs/basic-log.txt", 1024 * 1024 * 10, 10);
        // 创建文件 rotating sink
        file_sink = std::make_shared<spdlog::sinks::rotating_file_sink_mt>("logs/basic-log.txt", 1024 * 1024 * 10, 10);
        // 设置日志记录器的级别
        file_sink->set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%n] [%l] %v");
        file_sink->set_level(spdlog::level::debug);

        std::vector<spdlog::sink_ptr> sinks{ console_sink, file_sink };
        logger = std::make_shared<spdlog::logger>("multi_sink", sinks.begin(), sinks.end());
        logger->set_pattern("%^[%Y-%m-%d %H:%M:%S.%e] [%n] [%l] %v%$");
        logger->set_level(spdlog::level::debug);

        spdlog::flush_every(std::chrono::seconds(5));
        spdlog::set_default_logger(logger);
    }
    catch (const spdlog::spdlog_ex& ex) {
        std::cout << "日志初始化失败: " << ex.what() << std::endl;
    }
}

二、python

import logging
from logging.handlers import TimedRotatingFileHandler
import colorlog

# 设置彩色控制台日志格式
color_formatter = colorlog.ColoredFormatter(
    fmt="%(log_color)s[%(asctime)s %(name)s %(levelname)s]%(reset)s %(message)s",
    datefmt="%m/%d/%Y %H:%M:%S",
    log_colors={
        'DEBUG': 'cyan',
        'INFO': 'green',
        'WARNING': 'yellow',
        'ERROR': 'red',
        'CRITICAL': 'bold_red'
    }
)

formatter = logging.Formatter(
    fmt="[%(asctime)s %(name)s %(levelname)s] %(message)s", datefmt="%m/%d/%Y %H:%M:%S"
)
# 创建一个handler,用于输出到控制台
console_handler = logging.StreamHandler()
console_handler.setFormatter(color_formatter)
console_handler.setLevel(logging.INFO)

save_handler = TimedRotatingFileHandler('log/mylog.log', when='D', interval=7, backupCount=20, encoding='utf-8')
save_handler.suffix = '%Y-%m-%d'
save_handler.setFormatter(formatter)
save_handler.setLevel(logging.INFO)

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
logger.addHandler(console_handler)
logger.addHandler(save_handler)

if __name__ == '__main__':
    logger.error(2)
    # 测试日志输出
    logger.debug('debug message' + str("Asa"))
    logger.info('info message')
    logger.warning('warning message')
    logger.error('error message')
    logger.critical('critical message')

运行结果: 


原文地址:https://blog.csdn.net/Word_And_Me_/article/details/140543284

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!