我一直想知道,堵塞的重点是什么?就像我所知,clog和cerr一样,但是有了缓冲,所以效率更高.通常stderr与stdout相同,因此clog与cout相同.这对我来说似乎很蹩脚,所以我认为我必须误解它.如果我将消息发送到同一个地方,我会收到错误信息(可能是/ var/log/messages中的内容),那么我可能不会写太多(因此使用非 - 缓冲的cerr).根据我的经验,我希望我的日志消息是最新的(不缓冲)所以我可以帮助找到崩溃(所以我不想使用缓冲的阻塞).显然我应该一直使用cerr.
我希望能够在我的程序中重定向阻塞.重定向cerr会很有用,这样当我调用库例程时,我可以控制cerr和clog的去向.有些编译器可以支持吗?我刚检查了DJGPP,stdout被定义为FILE结构的地址,因此执行"stdout = freopen(...)"之类的操作是违法的.
我想用log4j之后建模的一个记录器替换我记录本机C++代码的当前记录器.我打算让记录器创建一个格式为log4j格式的日志,以便可以使用Log4View查看器查看它.
我正在寻找各自的利弊等信息以及它们之间的差异.
即任何已知的内存泄漏?任何可以报告的性能测试?任何已知的问题应该加以考虑?
我已经尝试了大约两周的时间来获得一个可以使用的日志库.我试过Log4cxx,Log4cpp,log4cplus和boost.log.问题不在于这些对我来说都不起作用,而是因为我无法弄清楚如何让它们完全发挥作用.我真的想使用log4cxx,因为我正在使用log4j/logback工作,但我无法获得任何基于log4j构建的库.我已经能够构建和使用boost库,但无论我尝试什么,boost.log都会给我各种链接器错误.如果有人可以指导我逐步指导这些库中的一个工作,我将非常感激.另外,如果重要的话,我正在使用eclipse作为我的IDE.
我需要登录C++应用程序.谷歌搜索了一段时间后,我决定使用log4cpp.
TIA
我们有一个应用程序,它的一部分是.net,c ++用户模式和C++驱动程序.应用程序分为几个可执行文件,这些可执行文件按需运行并使用LPC相互通信(进程在不同的会话中运行(winlogon)).
目前我们有一个家庭写的日志服务,.net和c ++用户模式通过发送LPC消息进行通信.驱动程序使用DbgPrint并不总是启用,因为它导致代码运行速度减慢30%(我们有大量的日志记录).
我希望将所有日志写在一个地方,最好不要自己编写记录器(我喜欢log4cpp和log4net).要求是将所有可执行文件和驱动程序写入一个地方,并且开销最小.
我已经读过ETW是要走的路,但是我无法找到像log4cpp或log4net那样使用它的已写入的记录器.
所以基本上我的问题是,你知道是否已经实现了log4cpp和我可以使用的log4net的ETW appender?
我正在开发一个 QT 应用程序,我在其中使用日志记录库 log4cpp。但是现在,在包含 log4pp 的头文件的地方,我得到了这个编译错误: 'long long long' is too long for GCC
当我找到这个错误的来源时,头文件 stdint.h 在这一行打开:
__MINGW_EXTENSION typedef long long int64_t;
谁能告诉我如何处理这个问题?
我的应用程序的不同部分调用记录器功能来记录详细信息.
记录器类
std::string filename = "blahblah"; // variable to store the location of the properties file
log4cpp::PropertyConfigurator::configure(filename);
void Logger::logging(const std::string& msg)
{
Log4cpp::Category& myLogger = log4cpp::Category::getRoot();
myLogger.log(log4cpp::Priority::INFO, msg);//only takes in string as input
}
Run Code Online (Sandbox Code Playgroud)
打电话给上课
Logger logMe;
int a = 5;
double b = 6;
logMe.logging("log this msg" + a + "," + b);
Run Code Online (Sandbox Code Playgroud)
我意识到上面会给我错误,因为a它b有不同的类型.解决它的一种方法是使用std::to_string
logMe.logging("log this msg" + std::to_string(a) + "," + std::to_string(b));
Run Code Online (Sandbox Code Playgroud)
但是,我有几百次调用日志功能,编辑每次调用都很费时间std::to_string.是否有更简单的方法来做到这一点?
哦,并澄清,代码之前的工作方式是通过定义#define函数.
#Define logging(FLAG, X)\
do {\
...
clog …Run Code Online (Sandbox Code Playgroud) 如何使用log4cpp记录多个字符串?
例如,如果我想将所有argv记录到main:
#include <iostream>
#include <log4cpp/Category.hh>
#include <log4cpp/FileAppender.hh>
#include <log4cpp/PatternLayout.hh>
using namespace std;
int main(int argc, char* argv[]) {
log4cpp::Appender *appender = new log4cpp::FileAppender("FileAppender","mylog");
log4cpp::PatternLayout *layout = new log4cpp::PatternLayout();
layout->setConversionPattern("%d: %p - %m %n");
log4cpp::Category& category = log4cpp::Category::getInstance("Category");
appender->setLayout(layout);
category.setAppender(appender);
category.setPriority(log4cpp::Priority::INFO);
category.info("program started"); // this works fine, I see it in the logfile
for(int i=0; i<argc; ++i) {
// next line does not compile:
category.info("argv["<<i<<"] = '"<<argv[i]<<"'");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这条线
category.info("argv["<<i<<"] = '"<<argv[i]<<"'");
Run Code Online (Sandbox Code Playgroud)
不编译.显然,记录器不能作为ostream工作.什么是log4cpp记录这样的东西,一次更好?