我想用log4j之后建模的一个记录器替换我记录本机C++代码的当前记录器.我打算让记录器创建一个格式为log4j格式的日志,以便可以使用Log4View查看器查看它.
我正在寻找各自的利弊等信息以及它们之间的差异.
即任何已知的内存泄漏?任何可以报告的性能测试?任何已知的问题应该加以考虑?
我已经尝试了大约两周的时间来获得一个可以使用的日志库.我试过Log4cxx,Log4cpp,log4cplus和boost.log.问题不在于这些对我来说都不起作用,而是因为我无法弄清楚如何让它们完全发挥作用.我真的想使用log4cxx,因为我正在使用log4j/logback工作,但我无法获得任何基于log4j构建的库.我已经能够构建和使用boost库,但无论我尝试什么,boost.log都会给我各种链接器错误.如果有人可以指导我逐步指导这些库中的一个工作,我将非常感激.另外,如果重要的话,我正在使用eclipse作为我的IDE.
我一直在用C++测试我的日志记录子系统的三个选项.一个是Log4cplus,一个是Pantheios,最后一个是我们自己编写的简单日志库.
Log4cplus比其他两个慢得多.以下是记录1,000,000个日志条目的结果:
我想知道我是否缺少任何性能调整.
我应该补充一点,我总是使用根记录器,我正在记录文件和记录:
LOG4CPLUS_INFO(rootLogger, "Replace me with the text!");
谢谢,Reza
我有一个VS2008本机C++项目,我希望编译为DLL.
它只引用一个外部库(log4cplus.lib),并使用其功能.(当然也使用log4cplus的.h文件).
当我尝试将我的项目编译为静态库时,它会成功.当我尝试DLL时,它失败了:
1>MessageWriter.obj : error LNK2019: unresolved external symbol "public: static class log4cplus::Logger __cdecl log4cplus::Logger::getInstance(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > const &)" (?getInstance@Logger@log4cplus@@SA?AV12@ABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@Z) referenced in function "class log4cplus::Logger __cdecl Log(void)" (?Log@@YA?AVLogger@log4cplus@@XZ)
Run Code Online (Sandbox Code Playgroud)
还有4个与log4cplus.lib中的函数相关的错误.
看起来真的很蠢..请帮帮我:)
谢谢!
编辑:
我链接到log4cplus.lib文件,它发现它很好.另外,log4cplus.lib是100%功能的,我在另一个项目中使用它没有任何问题.我的初衷是将我的项目编译为静态库并在我正在编写的另一个DLL中使用它,但是当这样做时,我在其他项目中得到了相同的链接器错误...
编辑#2:
导致链接器错误的函数是静态函数..这可能是问题的一部分吗?
我创建了一个新的Logger对象,如下所示:
log4cplus::Logger m_WebAccessLogger; //a class member
Run Code Online (Sandbox Code Playgroud)
然后在构造函数初始化列表中我做:
m_WebAccessLogger(log4cplus::Logger::getInstance("WebAccess")
Run Code Online (Sandbox Code Playgroud)
这工作正常,它按预期记录.我遇到的问题是,我想配置log4cplus.properties文件,以便"WebAccess"的所有内容都将转到一个单独的日志文件(现在它将转到默认日志文件,其他所有内容都会出现).
我似乎无法找到有关如何配置这些属性文件的文档,所以我需要帮助!
这是我当前的日志属性,如何告诉它让"WebAccess"转到另一个文件?
log4cplus.rootLogger=DEBUG, ROLLING
log4cplus.appender.STDOUT=log4cplus::ConsoleAppender
log4cplus.appender.STDOUT.layout=log4cplus::PatternLayout
log4cplus.appender.STDOUT.layout.ConversionPattern=%d{%m/%d/%y %H:%M:%S} [%t] %-5p %c{2} %%%x%% - %m [%l]%n
log4cplus.appender.STDOUT.layout.ConversionPattern=%d{%H:%M:%S} [%t] - %m%n
log4cplus.appender.ROLLING=log4cplus::RollingFileAppender
log4cplus.appender.ROLLING.MaxFileSize=5MB
log4cplus.appender.ROLLING.MaxBackupIndex=5
#log4cplus.appender.ROLLING.layout.ConversionPattern=%d{%m/%d/%y %H:%M:%S} [%t] %-5p %c{2} %%%x%% - %m [%l]%n
log4cplus.appender.ROLLING.layout=log4cplus::TTCCLayout
log4cplus.appender.ROLLING.File=c:\projects\ArchiveService\IArchive.log
Run Code Online (Sandbox Code Playgroud)
类似于:
WebAccess.File = c:\ projects\ArchiveService\webaccess.log
或
log4cplus.WebAccess.File = webaccess.log
我知道log4cplus与log4j类似,这就是为什么我把它作为这个的标签.
我是log4cplus的新手.我有以下配置:
log4cplus.rootLogger=TRACE, STDOUT
log4cplus.logger.zios.utl.Thread=DEBUG, STDOUT
log4cplus.appender.STDOUT=log4cplus::ConsoleAppender
log4cplus.appender.STDOUT.layout=log4cplus::PatternLayout
log4cplus.appender.STDOUT.layout.ConversionPattern=%d{%H:%M:%S} [%t] - %m%n
Run Code Online (Sandbox Code Playgroud)
我用以下代码加载:
try {
log4cplus::PropertyConfigurator::doConfigure("log4cplus.properties");
} catch (...) {
cout << "exception occured while opening log4cplus.properties" << endl;
}
Run Code Online (Sandbox Code Playgroud)
它加载时不会发生任何事故,但每当我记录某些内容时,我会在日志中显示两条消息.例如,我使用此代码进行记录:
Logger log = Logger::getInstance("zios.utl.Thread");
LOG4CPLUS_DEBUG(log, "Thread created");
Run Code Online (Sandbox Code Playgroud)
以及日志中显示的内容是:
17:10:48 [3075459952] - Thread created
17:10:48 [3075459952] - Thread created
Run Code Online (Sandbox Code Playgroud)
知道为什么会这样吗?
我在VS2012中下载并编译了log4cplus.编译很好(调试和发布)我试图使用它我的代码,但我得到3个链接错误,我尝试没有删除它们.我正在使用log4cplus项目中的相同包含,以及我编译的libs(尝试了所有3 ...调试版本和log4cplusS.lib
我仍然得到这些:
错误LNK2019:未解析的外部符号"__declspec(dllimport)类std :: basic_ostringstream,类std :: allocator>&__cdecl log4cplus :: detail :: get_macro_body_oss(void)"(_ imp?get_macro_body_oss @ detail @ log4cplus @@ YAAAV?$ basic_ostringstream @ _WU?$ char_traits @ _W @ std @@ V?$ allocator @ _W @ 2 @@ std @@ XZ)在函数"int __cdecl Prepare(class std :: basic_string,class std :: allocator>&,class"中引用std :: basic_string,class std :: allocator>&,class std :: basic_string,class std :: allocator>&,int*,int*,int*)"(?Prepare @@ YAHAAV?$ basic_string @ DU?$ char_traits @ d @性病@@ V'$ @分配器@ d @@ 2 STD @@ 00PAH11 @ Z)
错误LNK2019:未解析的外部符号"__declspec(dllimport)public:static class …
我正在使用log4cplus库,我无法登录工作.
我用这个代码:
PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT("log.properties"));
Logger g_logger = Logger::getInstance(LOG4CPLUS_TEXT("mylogger"));
LOG4CPLUS_WARN(g_logger, LOG4CPLUS_TEXT("test test test"));
Run Code Online (Sandbox Code Playgroud)
它打破LOG4CPLUS_WARN
了错误:
Access violation reading location
这是我的调用堆栈:
msvcp110d.dll!std::basic_streambuf<wchar_t,std::char_traits<wchar_t> >::egptr() Line 236 C++
ProjectClientd.exe!std::basic_stringbuf<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::str() Line 103 C++
ProjectClientd.exe!std::basic_ostringstream<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::str() Line 553 C++
> ProjectClientd.exe!wWinMain(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInstance, wchar_t * lpCmdLine, int nCmdShow) Line 55 C++
ProjectClientd.exe!__tmainCRTStartup() Line 528 C
ProjectClientd.exe!wWinMainCRTStartup() Line 377 C
Run Code Online (Sandbox Code Playgroud)
在wWinMain ... line 55
哪里LOG4CPLUS_WARN
是被叫的地方.
我已经检查了这个有什么问题,basic_ostringstream
似乎有些东西搞乱了编码或其他东西:
在我的字符串末尾没有终止字符串(不可读的内存)和一大堆奇怪的字母?可能导致什么呢?
我用python编写了一个小程序,该程序使用带有tkinter文件对话框的xlrd将数据从.xls电子表格中拉出,以打开/保存文件。今天早些时候,该程序运行良好,但是我最近在笔记本电脑上安装了Autocad Electrical 2014才能正常工作,现在当我运行python脚本时,该脚本拉出对话框时出现以下错误:
log4cplus:ERROR No appenders could be found for logger (AdSyncNamespace).
log4cplus:ERROR Please initialize the log4cplus system properly.
log4cplus:ERROR No appenders could be found for logger (AdSyncNamespace).
log4cplus:ERROR Please initialize the log4cplus system properly.
Run Code Online (Sandbox Code Playgroud)
在此脚本起作用与出现错误之间,唯一发生过更改的是AutoCAD的安装。
这是怎么回事,如何避免呢?
社区,
使用Embarcadero构建和使用Log4cplus库时遇到以下问题。首先,我从http://sourceforge.net/p/log4cplus/wiki/Home/下载该库,然后导航到要构建我的库的目录,然后键入cmake -G“ Borland Makefiles” mypathtotherootomypreviousdownload。然后说,构建文件已被写入当前目录。现在,我启动MSYS sh.exe并键入make。这也可以。我得到一个带有该库的各种工作测试(作为exe文件)的bin文件夹。在此bin文件夹中,还有一个dll log4cplusUD.dll。现在,我还在src文件夹中找到了相应的LIB log4cplusUD.lib。我当然很熟悉如何将动态库与Embarcadero静态链接。但是在尝试编译时
#pragma hdrstop
#pragma argsused
#ifdef _WIN32
#include <tchar.h>
#else
typedef char _TCHAR;
#define _tmain main
#endif
#include <stdio.h>
#include "log4cplus/logger.h"
#include "log4cplus/consoleappender.h"
#include "log4cplus/loglevel.h"
#include <log4cplus/loggingmacros.h>
#include <iomanip>
using namespace std;
using namespace log4cplus;
int _tmain(int argc, _TCHAR* argv[])
{
log4cplus::initialize ();
SharedAppenderPtr append_1(new ConsoleAppender());
append_1->setName(LOG4CPLUS_TEXT("First"));
Logger::getRoot().addAppender(append_1);
Logger root = Logger::getRoot();
Logger test = Logger::getInstance(LOG4CPLUS_TEXT("test"));
LOG4CPLUS_DEBUG(root,
"This is"
<< " a reall"
<< "y long message." << endl
<< …
Run Code Online (Sandbox Code Playgroud)