如何使用log4cplus检索日志条目
How to retrieve log entries using log4cplus?
log4cplus功能强大,但我不知道如何使用它检索日志条目?有什么特点吗?log4cplus提供了什么api之类的东西吗?
嗯,我不确定你到底想要什么。log4cplus文档为您提供了使用它的示例。例如:
BasicConfigurator config;
config.configure();
Logger logger = Logger::getInstance("mylogger");
LOG4CPLUS_WARN(logger, "Hello, World!");
这样您将在控制台上获得日志。如果您想将log4cplus配置为在文件中记录内容,您可以使用如下文件:
### logs.properties
# root logger
log4cplus.rootLogger=INFO, Main
# specific logger
log4cplus.logger.myloggerINFO, Main
log4cplus.additivity.mylogger=false
# appender that automatically rolls files
log4cplus.appender.Main=log4cplus::DailyRollingFileAppender
log4cplus.appender.Main.Schedule=DAILY
log4cplus.appender.Main.File=logs/mylogs.log
log4cplus.appender.Main.Append=true
log4cplus.appender.Main.MaxBackupIndex=100
log4cplus.appender.Main.MaxFileSize=100KB
log4cplus.appender.Main.layout=log4cplus::PatternLayout
log4cplus.appender.Main.layout.ConversionPattern=%D | %-5.5p | %-20.20c | %m|%n
在c++程序中:
PropertyConfigurator config("logs.properties");
config.configure();
使用提供的宏来记录一些东西:
logger = Logger::getInstance("mylogger");
LOG4CPLUS_DEBUG(logger, message);
LOG4CPLUS_WARN(logger, message);
LOG4CPLUS_INFO(logger, message);
LOG4CPLUS_ERROR(logger, message);
请参见log4cplus示例开始。如果你需要更多的信息,请告诉我。
my two cents
编辑:井日志的存储取决于你的appender。你可以有一个标准文件(FileAppender),或者一组文件(RollingFileAppender),等等。通过这种方式,您可以通过查看文件来查看旧日志。您也可以使用系统日志,或者编写您自己的appender
在编程上,一种方法是使用DailyRollingFileAppender。然后,您可以打开对应于特定日期的文件,并通过读取文件内容来获取日志。另一种方法是编写log4cplus DBMS附加程序并使用SQL库读取它们。我知道没有标准的API来返回log4cplus的日志。
是的,有一种方法可以做到这一点,但不是现成的。实现抽象类Appender,并通过实现append虚函数在那里做任何你需要的事情,还为你所需的功能提供一个接口:
#ifndef STRINGAPPENDER_H
#define STRINGAPPENDER_H
#include <string>
#include <log4cplus/fileappender.h>
#include <log4cplus/config.hxx>
#include <log4cplus/appender.h>
#include <log4cplus/fstreams.h>
#include <log4cplus/helpers/property.h>
#include <log4cplus/helpers/timehelper.h>
/* I derived from FileAppender for i needed access to the stream underneath,
* feel free to derive from Appender as well
*/
class StringAppender : public log4cplus::FileAppender {
public:
log4cplus::tofstream & out;
StringAppender(std::string & name) : log4cplus::FileAppender (name),
out(log4cplus::FileAppender::out){}
virtual void append (const log4cplus::spi::InternalLoggingEvent &event)
{
//implement your logic here. You could store events in std::vector
log4cplus::FileAppender::append(event);
}
std::string retrieve_last_message(){/*to implement*/}
virtual void close (){}
virtual ~StringAppender () {}
};
#endif /* STRINGAPPENDER_H */
客户端代码中的:
#include <log4cplus/configurator.h>
#include <log4cplus/logger.h>
#include <StringAppender.h>
int main(){
std::string filename = "test.log";
log4cplus::SharedAppenderPtr append_1(new StringAppender(filename));
log4cplus::Logger log = log4cplus::Logger::getRoot();
log.addAppender(append_1);
//reason i wanted the stream to be publicly available
//i needed it in my library test boost::test
unit_test_log.set_stream(((StringAppender &)*append_1.get()).out);
//some testing folows...
}
相关文章:
- 使用VerQueryValue检索应用程序的文件描述
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 是否可以从格式字符串中检索"width"
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 是否可以配置提升日志刷新?
- 跟踪日志中的T.11803()是什么意思?
- 如何在QByteArray中放置和检索位字段而不会感到痛苦?
- 如何在Qt中从数据库中检索二进制数据?
- 如何从C++代码中检索 QML 的文本字段中的文本?
- 从 opencv c++ 中的矢量中检索固定的帧数
- 加快在C++中读取/处理日志文件的速度
- 如何将消息时间戳写入日志文件?
- 如何在不等待检索的情况下获取C++中的内存位置?
- 如何在 QTreeWidget 中检索特定项目的 mimeData?
- C++从字符串中检索几行
- 分析包含 NMEA 句子的日志文件C++
- 如何修复输出日志中的"EnableInput can only be specified on a Pawn for its Controller"错误
- sd_journal_send发送二进制数据.如何使用日志检索数据?
- 如何在Windows XP中检索所有事件日志
- 如何使用log4cplus检索日志条目