• C++使用spdlog输出日志文件


    参考博客:

    日志记录库 spdlog 基础使用_spdlog 写日志-CSDN博客 

    GitHub - gabime/spdlog: Fast C++ logging library.

    首先在github上下载spdlog源码,不想编译成库的话,可以直接使用源码,将include文件夹下的spdlog文件夹,拷贝至代码所在路径,然后配置包含目录为代码所在目录

    其他注意事项:

    1. flag meaning example
    2. %v 日志内容 “my log test content”
    3. %t 线程ID “123”
    4. %P 进程ID “234”
    5. %n 记录器Logger名 “basicLogger”
    6. %l 日志级别 “debug”, “info”, etc
    7. %L 日志级别简称 “D”, “I”, etc
    8. %a 星期几(简称) “Thu”
    9. %A 星期几 “Thursday”
    10. %b 月份简称 “Aug”
    11. %B 月份 “August”
    12. %c 日期时间 “Thu Aug 23 15:35:46 2014”
    13. %C 年(两位) “14”
    14. %Y 年 “2014”
    15. %D %x 日期简写 “08/23/14”
    16. %m 月份(数字) “11”
    17. %d 日(数组) “29”
    18. %H 小时(24制) “23”
    19. %I 小时(12制) “11”
    20. %M 分钟 “59”
    21. %S 秒 “58”
    22. %e 毫秒 “678”
    23. %f 微秒 “056789”
    24. %F 纳秒 “256789123”
    25. %p AM/PM “AM”
    26. %r 时间(12制) “02:55:02 pm”
    27. %R 时分(24制) “23:55”
    28. %T %X 时间(24制) “23:55:59”
    29. %z 时区(偏移) “+02:00”
    30. %E epoch(秒) “1528834770”
    31. %% 百分号 “%”
    32. %+ 默认格式 “[2014-10-31 23:46:59.678] [mylogger] [info] Some message”
    33. %^ start color range (can be used only once) “[mylogger] [info(green)] Some message”
    34. %$ end color range (for example %^[+++]%$ %v) (can be used only once) [+++] Some message
    35. %@ 文件名与行数 my_file.cpp:123
    36. %s 文件名 my_file.cpp
    37. %g 文件名(含路径) /some/dir/my_file.cpp
    38. %# 行数 123
    39. %! 函数名 my_func
    40. %o 相对上一条记录的时间间隔(毫秒) 456
    41. %i 相对上一条记录的时间间隔(微秒) 456
    42. %u 相对上一条记录的时间间隔(纳秒) 11456
    43. %O 相对上一条记录的时间间隔(秒) 4
    1. #include
    2. #include
    3. #include
    4. void init_logging()
    5. {
    6. spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%t] [%l] %v");
    7. //大于等于该等级的将被输出
    8. //spdlog::set_level(spdlog::level::info);
    9. spdlog::info("Hello, spdlog!");
    10. spdlog::trace("trace信息");
    11. spdlog::debug("debug信息");
    12. spdlog::info("info信息");
    13. spdlog::warn("warn信息");
    14. spdlog::error("error信息");
    15. spdlog::critical("critical信息");
    16. }
    17. void testSpdLog() {
    18. // 文件日志定义,设定日志最大100M,且最多保留10个
    19. auto fileLogger = spdlog::rotating_logger_mt("fileLogger", "log.log", 1024 * 1024 * 100, 10);
    20. //大于等于该等级的将被输出
    21. fileLogger->set_level(spdlog::level::trace);
    22. //定义输出格式
    23. spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%l] [%s->%!->%#] [%v]"); //log类型 文件->函数名->行数 输出内容
    24. spdlog::set_default_logger(fileLogger);
    25. for (int i = 0; i < 2; ++i) {
    26. SPDLOG_LOGGER_TRACE(fileLogger, "trace输出:{}-{}", i, "测试trace");
    27. SPDLOG_LOGGER_DEBUG(fileLogger, "debug输出:{}-{}", i, "测试debug");
    28. SPDLOG_LOGGER_INFO(fileLogger, "info输出:{}-{}", i, "测试info");
    29. SPDLOG_LOGGER_WARN(fileLogger, "warn输出:{}-{}", i, "测试warn");
    30. SPDLOG_LOGGER_ERROR(fileLogger, "Some error message");
    31. SPDLOG_LOGGER_CRITICAL(fileLogger, "Some critical message");
    32. }
    33. }
    34. void testMultiLog() {
    35. //文件sink
    36. auto file_sink = std::make_shared("logs.log", 1024 * 1024 * 100, 10);
    37. file_sink->set_level(spdlog::level::debug);
    38. file_sink->set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%l] [%s->%!->%#] [%v]");
    39. //控制台sink
    40. auto console_sink = std::make_shared();
    41. console_sink->set_level(spdlog::level::debug);
    42. console_sink->set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%l] [%s->%!->%#] [%v]");
    43. std::vector sinks;
    44. sinks.push_back(console_sink);
    45. sinks.push_back(file_sink);
    46. auto multiLogger = std::make_shared("multiSink", begin(sinks), end(sinks));
    47. multiLogger->set_level(spdlog::level::debug);
    48. spdlog::set_default_logger(multiLogger);
    49. for (int i = 0; i < 2; ++i) {
    50. SPDLOG_LOGGER_TRACE(multiLogger, "trace输出:{}-{}", i, "测试trace");
    51. SPDLOG_LOGGER_DEBUG(multiLogger, "debug输出:{}-{}", i, "测试debug");
    52. SPDLOG_LOGGER_INFO(multiLogger, "info输出:{}-{}", i, "测试info");
    53. SPDLOG_LOGGER_WARN(multiLogger, "warn输出:{}-{}", i, "测试warn");
    54. SPDLOG_LOGGER_ERROR(multiLogger, "Some error message");
    55. SPDLOG_LOGGER_CRITICAL(multiLogger, "Some critical message");
    56. }
    57. }
    58. int main()
    59. {
    60. //init_logging();
    61. //testSpdLog();
    62. testMultiLog();
    63. return 0;
    64. }

  • 相关阅读:
    什么是网络变压器,它是干什么用的?作用/参数表/价格及型号体系有哪些?怎么测量网络变压器好坏
    Element-UI+vue实现登录表单
    Spring事务配置(案例:转账业务追加日志,事务传播行为)
    分布式事务之Seata TCC
    JavaScript - canvas - 放大镜
    8.1.2 创建数据表时指定主键
    老生常谈:面试必问“三次握手,四次挥手”这么讲,保证你忘不了
    一文看懂微信小程序新版隐私协议(附带弹窗组件)
    Flink学习9:配置idea开发flink-Scala程序环境
    【SpringBoot+Vue实现书籍管理系统--下篇】整合MyBatisPlus完成分页功能的开发并部署到docker容器中
  • 原文地址:https://blog.csdn.net/ljjjjjjjjjjj/article/details/139755912