Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
小型记录器类 我正在寻找一个小型的C++日志记录系统。我已经找到了一些现有的框架,但目前我并不需要它们的所有特性。我主要是寻找一个小系统,例如可以配置日志级输出文件。我正在寻找一个现有的解决方案,因为我不想重新发明轮子。_C++_Logging - Fatal编程技术网

小型记录器类 我正在寻找一个小型的C++日志记录系统。我已经找到了一些现有的框架,但目前我并不需要它们的所有特性。我主要是寻找一个小系统,例如可以配置日志级输出文件。我正在寻找一个现有的解决方案,因为我不想重新发明轮子。

小型记录器类 我正在寻找一个小型的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"; 该框架也易于扩展。在工作中,我们

我强烈推荐这个简单的日志系统:。它由单个头文件组成。我已经在Linux、Windows和MacOSX上成功地使用了它

您可以这样写入日志:

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");