chromium中的logging日志系统

chromium中的日志记录其实使用的是libglog

ubuntu下安装libglog:  sudo apt install libgoogle-glog-dev

libglog使用例子:

#include <iostream>
#include "glog/logging.h"   // glog 头文件
using namespace std;
int main(int argc, char** argv) {
  google::InitGoogleLogging(argv[0]);    // 初始化
  // FLAGS_log_dir=".";   //设置log目录,默认打印到"/tmp/程序名.INFO"
  LOG(INFO) << "hello glog";     // 打印log:“hello glog.  类似于C++ stream。
}
编译命令: g++ main.cpp -lglog


chromium中logging日志系统初始化:

void InitLogging() {
  base::FilePath log_filename;
  PathService::Get(base::DIR_EXE, &log_filename);
  log_filename = log_filename.AppendASCII("content_shell.log"); //得到当前可执行文件目录下日志文件content_shell.log
  logging::LoggingSettings settings;
  settings.logging_dest = logging::LOG_TO_ALL; //日志保存到文件和系统调式日志
  settings.log_file = log_filename.value().c_str(); //指定日志文件content_shell.log
  settings.delete_old = logging::DELETE_OLD_LOG_FILE; //删除旧日志
  logging::InitLogging(settings);
  logging::SetLogItems(true, true, true, true); //日志保存项: 进程ID、线程ID、时间戳、tick数
}    

日志等级:

typedef int LogSeverity;
const LogSeverity LOG_VERBOSE = -1;  // This is level 1 verbosity
// Note: the log severities are used to index into the array of names, see log_severity_names.
const LogSeverity LOG_INFO = 0;
const LogSeverity LOG_WARNING = 1;
const LogSeverity LOG_ERROR = 2;
const LogSeverity LOG_FATAL = 3;
const LogSeverity LOG_NUM_SEVERITIES = 4;

日志使用:

1)LOG宏: 
LOG就像c++标准库的输出一样重载<<,它有几个常用的等级, 
像”VERBOSE“,“INFO”, “WARNING”, “ERROR”, “FATAL”,”NUM_SEVERITIES“等 

比如”FATAL”LOG会触发一个断点,并打印出栈回溯信息。

LOG(INFO) << "info等级    = " << logging::LOG_INFO;
LOG(WARNING) << "WARNING等级 = " << logging::LOG_WARNING;
LOG(ERROR) << "ERROR等级   = " << logging::LOG_ERROR;
LOG(FATAL) << "FATAL等级   = " << logging::LOG_FATAL;

2)LOG_IF宏:

使用LOG_IF宏可以在表达式条件为真的情况下才输出log:

int if_int = 5;
LOG_IF(INFO, if_int < 10 ) << "if_int < 10";

3CHECK宏:

CHECK宏在表达式为假的情况下执行LOG(FATAL)的效果, 

如果没有附加调试器,还会生成一个crash dump。

//CHECK宏,条件失败则产生一个LOG(FATAL)
CHECK(0);

4)DLOG宏: 

DLOG跟LOG类似,不同的是DLOG只在DEBUG模式下才生效, 

在非DEBUG模式下,这部分代码都不会被编译进程序。

DLOG(INFO) << "DLOG onlg debug";
DLOG_IF(INFO, if_int < 10) << "DLOG_IF onlg debug";
LOG_ASSERT(0);
DLOG_ASSERT(0);

3)VLOG宏: 

这是一种可以通过命令行参数动态调整输出log策略的宏,这些宏都是INFO级别的。

VLOG(1) << "I'm printed when you run the program with --v=1 or more";
VLOG(2) << "I'm printed when you run the program with --v=2 or more";

4)PLOG宏: 
PLOG宏除了输出我们指定的输出信息,后面还附加有系统最后的错误信息, 
windows上是GetLastError(),POSIX上是errno的值。


LOG宏分解:

#define LOG(severity) LAZY_STREAM(LOG_STREAM(severity), LOG_IS_ON(severity))
#define LOG_IS_ON(severity)             ((::logging::LOG_ ## severity) >= ::logging::GetMinLogLevel())
#define LOG_STREAM(severity)             (COMPACT_GOOGLE_LOG_ ## severity.stream())
#define LAZY_STREAM(stream, condition)   !(condition) ? (void) 0 : ::logging::LogMessageVoidify() & (stream)

(logging::LOG_INFO < logging::GetMinLogLevel()) ? (void) 0 : logging::LogMessageVoidify() & (logging::LogMessage(__FILE__, __LINE__, LOG_INFO).stream())

LOG(INFO) << "info等级" 分解成
(logging::LOG_INFO < logging::GetMinLogLevel()) ? (void) 0logging::LogMessageVoidify() & (logging::LogMessage(__FILE__, __LINE__, LOG_INFO).stream()) << "info等级"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值