4

我正在尝试优化我的 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++ 解决方案而不是命令行标志解决方案)。

4

6 回答 6

9

这适用于 C++ 源代码。

google::InitGoogleLogging("XXX");
google::SetCommandLineOption("GLOG_minloglevel", "2");
于 2016-08-14T02:46:44.857 回答
9

你需要设置你的环境变量

GLOG_minloglevel=2

然后运行您的可执行文件。

您可以在此处找到更多信息(在此页面的底部,有一节介绍LOG()使用宏定义从代码中剥离 s)。

于 2016-05-23T21:10:49.483 回答
3

如果你想从代码级别关闭日志,你可以使用它。

只需在方法中的src/caffe/net.cpp的 c++ 代码中添加以下行Init并构建 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, &param);
      // Basically, build all the layers and set up their connections.
      name_ = param.name();

      .
      .
      .
      .

根据您的需要设置日志级别。

于 2018-01-18T05:35:32.537 回答
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
于 2017-06-15T02:45:57.267 回答
1

要添加到 Qi Cai 的答案,
如果对 Gflags 库有依赖关系,则删除“GLOG_”。

google::SetCommandLineOption("minloglevel", "2");   

每个级别都匹配
INFO : 0
WARNING : 1 ...

于 2020-11-24T07:48:24.547 回答
0

glog版本

提交 d4e8eb 日期:2021-03-02 09:59:36 +0100

#include <glog/logging.h>

FLAGS_minloglevel = 100;
于 2021-03-31T05:38:25.090 回答