tensorflow的VLOG如何工作?

ton*_*suo 4 tensorflow

我使用VLOG打印日志,VLOG定义如下:

#define VLOG_IS_ON(lvl) \
   ((lvl) <= ::tensorflow::internal::LogMessage::MinVLogLevel())
#endif

#define VLOG(lvl)      \
  if (TF_PREDICT_FALSE(VLOG_IS_ON(lvl))) \
  ::tensorflow::internal::LogMessage(__FILE__, __LINE__, tensorflow::INFO)

const int INFO = 0;            // base_logging::INFO;
const int WARNING = 1;         // base_logging::WARNING;
const int ERROR = 2;           // base_logging::ERROR;
const int FATAL = 3;           // base_logging::FATAL;
const int NUM_SEVERITIES = 4;  // base_logging::NUM_SEVERITIES;
Run Code Online (Sandbox Code Playgroud)

如果我用警告配置最小日志级别,我使用导出TF_CPP_MIN_VLOG_LEVEL = 1,我想要的是仅日志打印WANRING并包括ERROR,TATAL,但事实是只显示警告和INFO日志被调用

VLOG(INFO) and VLOG(WARN)
Run Code Online (Sandbox Code Playgroud)

这个结果合理吗?

P-G*_*-Gn 11

您可以通过TF_CPP_MIN_LOG_LEVEL(非TF_CPP_MIN_VLOG_LEVEL)控制日志级别,在您的情况下,您要将其设置为1.

TF_CPP_MIN_VLOG_LEVEL 带来额外的调试信息,实际上反过来工作:它的默认值是0,随着它的增加,会记录更多的调试信息.

所以VLOG水平不你平常的INFO,WARNINGLOG水平,但不同的东西和排名成反比.如果您查看代码,您会看到它LOG与日志标签(LOG(INFO) << message)一起VLOG使用,但与普通数字(VLOG(2) << message)一起使用.

VLOG消息实际上始终记录在INFO日志级别.这意味着在任何情况下,您需要TF_CPP_MIN_LOG_LEVEL0才能看到任何VLOG消息.

  • 从 TF 2.5.0rc0 开始,“‘TF_CPP_MIN_VLOG_LEVEL’环境变量已重命名为‘TF_CPP_MAX_VLOG_LEVEL’,它正确描述了其效果。” (2认同)