从我自己的C ++程序中剥离Caffe的日志记录消息
strip caffe's logging message from my own c++ program
我正在使用caffe库制作自己的c++分类程序。我想在caffe的模型初始化步骤中隐藏所有日志消息。
根据禁用日志's "LOG(INFO)"日志记录,我可以通过设置环境变量
来禁用大多数日志GLOG_minloglevel = 2
from command line.
但是,我真正想要的是删除可执行文件本身的所有日志,这样用户就不能通过重置GLOG_minloglevel值来打开日志。
我可以找到一种方法,从http://rpg.ifi.uzh.ch/docs/glog.html中剥离glog的编译时日志消息。它说我可以像这样删除日志:
> #define GOOGLE_STRIP_LOG 1 // this must go before the #include!
> #include <glog/logging.h>
由于我的应用程序使用caffe的c++库,我需要重新构建caffe库,并在caffe的CMakeLists.txt中添加以下选项add_definitions(-DGOOGLE_STRIP_LOG=2)
。编译是成功的,但是当我用新的caffe库运行我的应用程序时,它在模型初始化步骤中停止了分割错误。我可以通过像这样运行gdb来获得更详细的错误信息:
程序收到信号SIGSEGV,分段错误。../sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S153 . ./sysdeps/x86_64/multiarch/memcpy-sse2-unaligned。S:没有这样的文件或目录
当我回滚到caffe的CMakeLists.txt中没有add_definitions(-DGOOGLE_STRIP_LOG=2)
的原始caffe库时,我的应用程序运行良好。
提前感谢。
考虑将google::LogToStderr()描述为:"使所有日志消息仅转到stderr。"(见蒟蒻阁/logging.h)。
所以,无论它在做什么,都可能给我们一个线索,告诉我们如何禁用记录文件。它的实现很简单:
SetStderrLogging(0); // thus everything is "also" logged to stderr
for ( int i = 0; i < NUM_SEVERITIES; ++i ) {
SetLogDestination(i, ""); // "" turns off logging to a logfile
}
因此,要禁用对文件的日志记录,您只需要将SetLogDestination()设置为",适用于所有级别。
您可能还想禁用所有到stderr的日志记录(似乎默认为GLOG_ERROR)。这可以通过添加:
来实现:google::SetStderrLogging( google::NUM_SEVERITIES );
BTW,我这样做的理由是,我想重定向GLOG消息到一个不同的日志框架已经在使用的应用程序。我发现我可以通过额外调用google::AddLogSink()来实现这一点,与我自己的sink。
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 是否可以配置提升日志刷新?
- 跟踪日志中的T.11803()是什么意思?
- 加快在C++中读取/处理日志文件的速度
- 如何将消息时间戳写入日志文件?
- 分析包含 NMEA 句子的日志文件C++
- 如何修复输出日志中的"EnableInput can only be specified on a Pawn for its Controller"错误
- 如何实现具有多个平台__FILE__和__LINE__信息的 C/C++ 可变参数日志记录宏?
- Log4net,将日志消息从 c++ dll 发送到 c# 应用程序?
- 返回ERROR_INVALID_PARAMETER的事件日志函数
- CAFFE转发网络在for循环中不起作用
- 为什么系统日志有两个不同的函数声明?
- 从更改日志获取最新的 USN 数据
- 如何从日志文件中抓取状态代码?(在 C++ 中)
- 未创建日志文件
- C++ 中混合二进制/文本日志记录的最佳做法
- 将日志宏转换为目标 C 字符串
- 轻松日志记录++如何避免多个初始化
- 尝试使用 EvtSetChannelConfigProperty() 函数更新最大事件日志文件大小时插入的错误值
- 从我自己的C ++程序中剥离Caffe的日志记录消息