禁用 glog 的 "LOG(INFO)" 日志记录
Disable glog's "LOG(INFO)" logging
我正在尝试优化我的 C++ 程序。它使用咖啡。
执行我的程序时,caffe 每 15 分钟输出大约 1GB(!)的信息日志。我怀疑这会显着影响效率。但是我还没有找到如何关闭注销。在 中,有人建议手动设置 FLAGS_v
。
使用以下代码我可以按级别禁用 VLOG
日志,但 LOG(x)
日志不受影响。
main()
中的第一行:
FLAGS_v = 1; //disables vlog(2), vlog(3), vlog(4)
VLOG(0) << "Verbose 0";
VLOG(1) << "Verbose 1";
VLOG(2) << "Verbose 2";
VLOG(3) << "Verbose 3";
VLOG(4) << "Verbose 4";
LOG(INFO) << "LOG(INFO)";
LOG(WARNING) << "LOG(WARNING)";
LOG(ERROR) << "LOG(ERROR)";
输出:
WARNING: Logging before InitGoogleLogging() is written to STDERR
I0523 19:06:51.484634 14115 main.cpp:381] Verbose 0
I0523 19:06:51.484699 14115 main.cpp:382] Verbose 1
I0523 19:06:51.484705 14115 main.cpp:386] LOG(INFO)
W0523 19:06:51.484710 14115 main.cpp:387] LOG(WARNING)
E0523 19:06:51.484715 14115 main.cpp:388] LOG(ERROR)
还有其他 flag
我不知道的吗?我正在考虑对每个 LOG(INFO)
行进行评论,但我想要一个更优雅的解决方案。 (我更喜欢 c++ 解决方案而不是命令行标志解决方案)。
您需要设置环境变量
GLOG_minloglevel=2
然后 运行 你的可执行文件。
您可以找到更多信息 here(本页底部有一节介绍如何使用宏定义从您的代码中剥离 LOG()
)。
这适用于 C++ 源代码。
google::InitGoogleLogging("XXX");
google::SetCommandLineOption("GLOG_minloglevel", "2");
环境变量"GLOG_minloglevel"会过滤一些日志,但它们已经编译到你的可执行文件中了。如果你想在编译时禁用它们,定义一个宏:
"#define GOOGLE_STRIP_LOG 1"
这是logging.h中的评论:
111 // The global value of GOOGLE_STRIP_LOG. All the messages logged to
112 // LOG(XXX) with severity less than GOOGLE_STRIP_LOG will not be displayed.
113 // If it can be determined at compile time that the message will not be
114 // printed, the statement will be compiled out.
115 //
116 // Example: to strip out all INFO and WARNING messages, use the value
117 // of 2 below. To make an exception for WARNING messages from a single
118 // file, add "#define GOOGLE_STRIP_LOG 1" to that file _before_ including
119 // base/logging.h
120 #ifndef GOOGLE_STRIP_LOG
121 #define GOOGLE_STRIP_LOG 0
122 #endif
如果你想从代码级别关闭日志,你可以使用这个。
只需在 src/caffe/net.cpp 方法中的 src/caffe/net.cpp 添加以下行并构建 caffe:
fLI::FLAGS_minloglevel=3;
应添加此行的函数的部分视图:
template <typename Dtype>
void Net<Dtype>::Init(const NetParameter& in_param) {
fLI::FLAGS_minloglevel=3;
// Set phase from the state.
phase_ = in_param.state().phase();
// Filter layers based on their include/exclude rules and
// the current NetState.
NetParameter filtered_param;
FilterNet(in_param, &filtered_param);
LOG(INFO) << "Initializing net from parameters: " << std::endl
<< filtered_param.DebugString();
// Create a copy of filtered_param with splits added where necessary.
NetParameter param;
InsertSplits(filtered_param, ¶m);
// Basically, build all the layers and set up their connections.
name_ = param.name();
.
.
.
.
根据需要设置日志级别。
补充七彩的回答,
如果依赖于 Gflags 库,则删除“GLOG_”。
google::SetCommandLineOption("minloglevel", "2");
每个级别都匹配
信息:0
警告:1 ...
glog 版本
commit d4e8eb
Date: 2021-03-02 09:59:36 +0100
#include <glog/logging.h>
FLAGS_minloglevel = 100;
我正在尝试优化我的 C++ 程序。它使用咖啡。
执行我的程序时,caffe 每 15 分钟输出大约 1GB(!)的信息日志。我怀疑这会显着影响效率。但是我还没有找到如何关闭注销。在 FLAGS_v
。
使用以下代码我可以按级别禁用 VLOG
日志,但 LOG(x)
日志不受影响。
main()
中的第一行:
FLAGS_v = 1; //disables vlog(2), vlog(3), vlog(4)
VLOG(0) << "Verbose 0";
VLOG(1) << "Verbose 1";
VLOG(2) << "Verbose 2";
VLOG(3) << "Verbose 3";
VLOG(4) << "Verbose 4";
LOG(INFO) << "LOG(INFO)";
LOG(WARNING) << "LOG(WARNING)";
LOG(ERROR) << "LOG(ERROR)";
输出:
WARNING: Logging before InitGoogleLogging() is written to STDERR
I0523 19:06:51.484634 14115 main.cpp:381] Verbose 0
I0523 19:06:51.484699 14115 main.cpp:382] Verbose 1
I0523 19:06:51.484705 14115 main.cpp:386] LOG(INFO)
W0523 19:06:51.484710 14115 main.cpp:387] LOG(WARNING)
E0523 19:06:51.484715 14115 main.cpp:388] LOG(ERROR)
还有其他 flag
我不知道的吗?我正在考虑对每个 LOG(INFO)
行进行评论,但我想要一个更优雅的解决方案。 (我更喜欢 c++ 解决方案而不是命令行标志解决方案)。
您需要设置环境变量
GLOG_minloglevel=2
然后 运行 你的可执行文件。
您可以找到更多信息 here(本页底部有一节介绍如何使用宏定义从您的代码中剥离 LOG()
)。
这适用于 C++ 源代码。
google::InitGoogleLogging("XXX");
google::SetCommandLineOption("GLOG_minloglevel", "2");
环境变量"GLOG_minloglevel"会过滤一些日志,但它们已经编译到你的可执行文件中了。如果你想在编译时禁用它们,定义一个宏:
"#define GOOGLE_STRIP_LOG 1"
这是logging.h中的评论:
111 // The global value of GOOGLE_STRIP_LOG. All the messages logged to
112 // LOG(XXX) with severity less than GOOGLE_STRIP_LOG will not be displayed.
113 // If it can be determined at compile time that the message will not be
114 // printed, the statement will be compiled out.
115 //
116 // Example: to strip out all INFO and WARNING messages, use the value
117 // of 2 below. To make an exception for WARNING messages from a single
118 // file, add "#define GOOGLE_STRIP_LOG 1" to that file _before_ including
119 // base/logging.h
120 #ifndef GOOGLE_STRIP_LOG
121 #define GOOGLE_STRIP_LOG 0
122 #endif
如果你想从代码级别关闭日志,你可以使用这个。
只需在 src/caffe/net.cpp 方法中的 src/caffe/net.cpp 添加以下行并构建 caffe:
fLI::FLAGS_minloglevel=3;
应添加此行的函数的部分视图:
template <typename Dtype>
void Net<Dtype>::Init(const NetParameter& in_param) {
fLI::FLAGS_minloglevel=3;
// Set phase from the state.
phase_ = in_param.state().phase();
// Filter layers based on their include/exclude rules and
// the current NetState.
NetParameter filtered_param;
FilterNet(in_param, &filtered_param);
LOG(INFO) << "Initializing net from parameters: " << std::endl
<< filtered_param.DebugString();
// Create a copy of filtered_param with splits added where necessary.
NetParameter param;
InsertSplits(filtered_param, ¶m);
// Basically, build all the layers and set up their connections.
name_ = param.name();
.
.
.
.
根据需要设置日志级别。
补充七彩的回答,
如果依赖于 Gflags 库,则删除“GLOG_”。
google::SetCommandLineOption("minloglevel", "2");
每个级别都匹配
信息:0
警告:1 ...
glog 版本
commit d4e8eb Date: 2021-03-02 09:59:36 +0100
#include <glog/logging.h>
FLAGS_minloglevel = 100;