日志级别的选择

版权声明:转自 https://blog.csdn.net/qq_38704184/article/details/82318207
日志级别的选择:Debug、Info、Warn、Error还是Fatal

日志信息分类

1.等级由低到高:debug<info<warn<Error<Fatal;

2.区别:

debug 级别最低,可以随意的使用于任何觉得有利于在调试时更详细的了解系统运行状态的东东;

info 重要,输出信息:用来反馈系统的当前状态给最终用户的;

后三个,警告、错误、严重错误,这三者应该都在系统运行时检测到了一个不正常的状态。

warn, 可修复,系统可继续运行下去;

Error, 可修复性,但无法确定系统会正常的工作下去;

Fatal, 相当严重,可以肯定这种错误已经无法修复,并且如果系统继续运行下去的话后果严重。

3.使用

什么时候使用 info, warn , error ?

info 用于打印程序应该出现的正常状态信息, 便于追踪定位;

warn 表明系统出现轻微的不合理但不影响运行和使用;

log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。

ALL 最低等级的,用于打开所有日志记录。

TRACE designates finer-grained informational events than the DEBUG.Since:1.2.12,很低的日志级别,一般不会使用。

DEBUG 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。

INFO 消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志。

WARN 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。

ERROR 指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。

FATAL 指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错误,这种级别你可以直接停止程序了。

OFF 最高等级的,用于关闭所有日志记录。

如果将log level设置在某一个级别上,那么比此级别优先级高的log都能打印出来。例如,如果设置优先级为WARN,那么OFF、FATAL、ERROR、WARN 4个级别的log能正常输出,而INFO、DEBUG、TRACE、 ALL级别的log则会被忽略。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。

从我们实验的结果可以看出,log4j默认的优先级为ERROR或者WARN(实际上是ERROR)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来为您添加日志轮换功能。首先,我需要在 `Logger` 类中添加一个 `rotating_file_sink` 对象,并将其作为 sink 传递给 logger 对象。然后,我需要设置日志文件的最大大小和最大文件数,以控制日志轮换的行为。 以下是更新后的 `Logger` 类代码: ```c++ #include <spdlog/spdlog.h> #include <spdlog/sinks/basic_file_sink.h> #include <spdlog/sinks/stdout_color_sinks.h> #include <spdlog/sinks/rotating_file_sink.h> class Logger { public: Logger() { // 创建控制台输出 sink auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>(); // 创建文件输出 sink auto file_sink = std::make_shared<spdlog::sinks::rotating_file_sink_mt>("log.txt", 1024 * 1024 * 50, 3); // 创建 logger logger_ = std::make_shared<spdlog::logger>("my_logger", spdlog::sinks_init_list{console_sink, file_sink}); // 设置日志级别 logger_->set_level(spdlog::level::trace); } void log(const char* file, int line, spdlog::level::level_enum level, const std::string& msg) { // 根据日志级别选择不同的颜色 switch (level) { case spdlog::level::trace: logger_->trace("{}:{} - {}", file, line, msg); break; case spdlog::level::debug: logger_->debug("{}:{} - {}", file, line, msg); break; case spdlog::level::info: logger_->info("{}:{} - {}", file, line, msg); break; case spdlog::level::warn: logger_->warn("{}:{} - {}", file, line, msg); break; case spdlog::level::err: logger_->error("{}:{} - {}", file, line, msg); break; case spdlog::level::critical: logger_->critical("{}:{} - {}", file, line, msg); break; default: break; } } private: std::shared_ptr<spdlog::logger> logger_; }; int main() { // 初始化 logger Logger logger; // 打印日志 for (int i = 0; i < 100000; ++i) { logger.log(__FILE__, __LINE__, spdlog::level::info, "Hello, world!"); } return 0; } ``` 在上述示例中,我使用 `rotating_file_sink_mt` 创建了一个支持日志轮换的文件输出 sink。其中,第一个参数是日志文件名,第二个参数是单个日志文件的最大大小(这里设置为 50MB),第三个参数是最大的日志文件数(这里设置为 3)。这意味着,当一个日志文件达到 50MB 时,会自动创建一个新的日志文件,最多会保留 3 个日志文件(包括当前日志文件)。如果您需要自定义日志轮换行为,可以参考 spdlog 提供的其他 sink,并根据自己的需求进行修改。 现在,在程序运行时,如果日志文件大小达到 50MB,或者超过 3 个日志文件时,会自动按照一定的规则进行日志轮换,保证日志文件不会过大,也不会占用过多的磁盘空间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值