spdlog
只有头文件的开源系统,自身解决了多线程访问的问题
//自定义日志
auto my_logger = spdlog::basic_logger_mt("basic_logger", "logs/basic-log.txt");
my_logger->info("spdlog is very easy to use!");
日志输出中要携带文件名、行数或函数名时,必须使用SPDLOG_LOGGER_*宏,且要激活对应的级别(哪些级别以上的日志会被记录):
记录INFO及以上级别日志
SPDLOG_LEVEL_INFO
spdlog中各对象都分为多线程与单线程版本:
*_st:单线程版本,不用加锁,效率更高。
*_mt:多线程版本,用于多线程程序是线程安全的。
//通过下面工程函数定义的日志logger是线程安全的,默认日志级别为info
spdlog::daily_logger_mt("Rb_daily", file_path, hours%MAX_HOUR, min%MAX_MINUTE);
spdlog::stdout_color_mt("Rb_stdout");
spdlog::rotating_logger_mt("Rb_rotating", file_path, max_size, max_files);
//最低日志级别和日志格式设置
set_level((spdlog::level::level_enum)level);
m_logger->set_pattern(pattern);//日志格式设置与c语言中的printf类似
log4cpp
//日志类别Category
Name:类别的名称
Priority:日志的优先级
Additivity:属性值 默认为ture 是否叠加父类的appenders
parent: 上级Category,根Category的parent为空
Appender日志输出源 (使用指针添加可以把所有权给Category;使用引用添加不能)
//新建输出到终端的appender 一个apender只能和一个category对象绑定,但是一个category对象可以有多个appnder,可以输出到多个位置
log4cpp::Appender* osAppender = new log4cpp::OstreamAppender("osAppender", &cout);
// 新建输出到文件的appender
log4cpp::Appender *appender = new log4cpp::FileAppender("FileAppender", "./test_log4cpp1.log");
log4cpp::FileAppender // 输出到文件
log4cpp::RollingFileAppender // 输出到回卷文件,即当文件到达某个大小后回卷
log4cpp::OstreamAppender // 输出到一个ostream类
log4cpp::StringQueueAppender // 输出到内存队列
layouts: 负责进行输出日志格式的限制,其中包含四个主要的类: Layout,BasicLayout,PatternLayout,SimpleLayout四个类
Layout是一个顶层的抽象类,其他类都继承子这个类。
//配置文件读取信息
log4cpp::PropertyConfigurator::configure(initFileName);
//布局
常用的布局有两种:log4cpp::BasicLayout和log4cpp::PatternLayout
BasicLayout是最简单的布局,输出时间戳,消息优先级和消息内容
osAppender->setLayout(new log4cpp::BasicLayout());
//PatternLayout布局支持通过类似printf函数的格式控制符的方式自定义输出的信息和内容
log4cpp::PatternLayout::setConversionPattern (conststd::string& conversionPattern) ;