小型记录器类 我正在寻找一个小型的C++日志记录系统。我已经找到了一些现有的框架,但目前我并不需要它们的所有特性。我主要是寻找一个小系统,例如可以配置日志级输出文件。我正在寻找一个现有的解决方案,因为我不想重新发明轮子。
我强烈推荐这个简单的日志系统:。它由单个头文件组成。我已经在Linux、Windows和MacOSX上成功地使用了它 您可以这样写入日志:小型记录器类 我正在寻找一个小型的C++日志记录系统。我已经找到了一些现有的框架,但目前我并不需要它们的所有特性。我主要是寻找一个小系统,例如可以配置日志级输出文件。我正在寻找一个现有的解决方案,因为我不想重新发明轮子。,c++,logging,C++,Logging,我强烈推荐这个简单的日志系统:。它由单个头文件组成。我已经在Linux、Windows和MacOSX上成功地使用了它 您可以这样写入日志: FILE_LOG(logWARNING) << "Ops, variable x should be " << expectedX << "; is " << realX; Debug(5) << "This is level 5 debug info.\n"; 该框架也易于扩展。在工作中,我们
FILE_LOG(logWARNING) << "Ops, variable x should be " << expectedX << "; is " << realX;
Debug(5) << "This is level 5 debug info.\n";
该框架也易于扩展。在工作中,我们最近对它做了一些修改,使它现在使用std::ofstream
而不是文件*
。因此,我们现在可以通过链接流来添加一些不错的功能,例如加密日志。我的尝试带有一些幻想。它完全是标准C++,不需要任何平台假设。它基本上由一个临时对象组成,如下所示:
FILE_LOG(logWARNING) << "Ops, variable x should be " << expectedX << "; is " << realX;
Debug(5) << "This is level 5 debug info.\n";
Debug(5)如果您对项目没有大小限制,并且您希望它可以使用很长时间,我建议您查看。它不是一个小的库,但它支持您在日志记录中想要的一切(包括一些您甚至不知道您想要的东西),而且它是可移植的
在任何更大的项目中,您迟早会希望您的日志解决方案不仅仅是一个“小日志类”,因此,确实为什么要重新发明轮子。我建议尝试使用library(我是作者)。它大约有1000行代码,仅标题,易于使用:
#include <plog/Log.h>
int main()
{
plog::init(plog::debug, "Sample.log");
LOGD << "Hello log!";
LOGD_IF(true) << "conditional logging";
return 0;
}
#包括
int main()
{
plog::init(plog::debug,“Sample.log”);
LOGD对于任何想要简单解决方案的人,我建议:
单头只C++日志库,重量非常轻,
健壮、执行速度快、线程和类型安全,由许多
内置功能。它提供了用自己的方式编写日志的功能
自定义格式。它还支持记录您的类,
第三方库、STL和第三方容器等
此库具有所有内置功能,以防止使用外部
图书馆
简单示例:(以上链接提供了更高级的示例)
#包括“easylogging++.h”
初始化_EASYLOGGINGPP
int main(int argv,char*argc[]){
LOG(INFO)到目前为止,所有提到的记录器都使用宏来记录调用。对我来说,这太难看了,我不在乎这会带来什么性能提升,我不会接近它
是我喜欢的。干净的语法,处理所有典型用法。快速和小。例如,对于文件记录器,它是:
auto my_logger = spd::basic_logger_mt("basic_logger", "logs/basic.txt");
my_logger->info("Some log message");
对Dobb博士的“C++轻量级记录器”的更新:
实际上,Dobb博士的文章中提到了几个伐木工人。第一个伐木工人列在其中一个答案中。我试着使用这个伐木工人,但Dobb博士的网站上不再提供来源
第二个对我有用的,我推荐的是在诺基亚西门子网络公司工作的Filip Janiszewski。起初,我在运行此代码时遇到了一些问题,因此在搜索解决方案时,我在以下位置遇到了原始作者的更新:。我发现此代码易于理解、修改和使用。它是线程安全的带有Windows的Visual Studio的rks
上面提到的另一个记录器是。当我第一次尝试这一个时,它看起来很有希望。但是当我在Windows下添加threading和sockets2时,它崩溃了。我确实为threading和sockets2设置了定义集,但我仍然无法使其工作,所以我不能推荐这一个。源代码也非常复杂,所以我没有机会修改和修复我的日志t在合理的时间内完成。我和其他许多人也用一些代码回答了这个问题
这并不是在所有方面都“准备就绪”,但可以很容易地进行修改:
特点:
- 写入日志不会阻塞i/o
- 与其他解决方案类似的宏(
LOGE(blah以上答案都很好
怀疑有人会看到这个答案,但这就是我所用的
在.h文件中配置4-5个变量名后,易于设置,并且实现时无需非标准依赖项
不仅是头球,而且可能非常容易
也许这对某人有帮助。
如果你不想重新发明方向盘,为什么不使用现有的日志记录解决方案?看起来HooHiZHL你的环境是什么?VisualC++和没有托管代码?.NET中有跟踪/调试监听器的概念,可以用日志级别和不同的侦听器来配置,比如文件、控制台,输出窗口等……不确定在原始C++中内置的什么可能……我想你已经看过这个了吗?谢谢davide Importan注意到我忘了说:我的系统将在Linux系统下工作。@ NekReSH:我认为OP意味着他不需要他所看到的复杂框架。他想要一些简单的…“log H”。是最好的文件;另一个是不太灵活的无模板版本。我已经在这里上传了它,以防Dobbs博士再次洗牌:。不要认为你愿意分享你对ofstream的更改?@Pedro'Aquino很好的参考,但有一点是,在程序终止之前,它不会将日志写入磁盘,或者日志对象被破坏。如果我想查看日志文件的最新信息,我能做什么?我开始使用这个库,并将其放入bitbucket:@AffairaticGeek。他的意思是,如果对最低版本执行file\u LOG(logWarning)+1。我必须将第一个配置行structlogcfg={};
在全局范围内的主方法之外,使其工作。更新:最新版本不仅仅是头文件-它有一个非头文件。旧版本仅仅是头文件。不太适合Windows:头文件#undes ERROR macro of wingdi.h!!!除了跟踪和调试宏之外,这些宏也是ATL/MFC的高度标准
#include "Log.h"
int main(int argc, char** argv) {
//Config: -----(optional)----
structlog LOGCFG = {};
LOGCFG.headers = false;
LOGCFG.level = DEBUG;
//---------------------------
LOG(INFO) << "Main executed with " << (argc - 1) << " arguments";
}
auto my_logger = spd::basic_logger_mt("basic_logger", "logs/basic.txt");
my_logger->info("Some log message");