最简单的使用
#include "Poco/Logger.h"
#include "Poco/AutoPtr.h"
#include "Poco/ConsoleChannel.h"
int main()
{
/* 1.获取 root logger */
auto &logger = Poco::Logger::root();
/* 2.设置管道 */
Poco::AutoPtr<Poco::ConsoleChannel> consoleChannel(new Poco::ConsoleChannel);
logger.setChannel(consoleChannel);
/* 3.打印日志 */
poco_error(logger, "This is an error message");
return 0;
}
利用 Formatter 格式化输出
#include "Poco/Logger.h"
#include "Poco/AutoPtr.h"
#include "Poco/ConsoleChannel.h"
#include "Poco/PatternFormatter.h"
#include "Poco/FormattingChannel.h"
int main()
{
/* 1.获取 root logger */
auto &logger = Poco::Logger::root();
/* 2.设置管道 */
/* 2.1 创建控制台管道 */
Poco::AutoPtr<Poco::ConsoleChannel> consoleChannel(new Poco::ConsoleChannel);
/* 2.2 创建 Formatter */
// 关于格式化控制符的说明可以参见 PatternFormatter.h 中的描述
Poco::AutoPtr<Poco::PatternFormatter> patternFormatter(
new Poco::PatternFormatter("[%H:%M:%S] [%U(%u)] %p: %t"));
patternFormatter->setProperty("times", "local"); // 格式化中的时间显示为本地时间
/* 2.3 创建 Formatting Channel */
Poco::AutoPtr<Poco::FormattingChannel> formattingChannel(
new Poco::FormattingChannel(patternFormatter, consoleChannel));
/* 2.4 将 Formatting Channel 设置给 logger */
logger.setChannel(formattingChannel);
/* 3.打印日志 */
poco_error(logger, "This is an error message");
return 0;
}
从配置文件读取配置
关于如何写配置文件请见 LoggingConfigurator.h 中的描述。
关于如何写 FileChannel 请见 FileChannel.h 中的描述。
log.properties−−−−−−−−−−−−
logging.loggers.root.channel = splitter
logging.loggers.root.level = trace
logging.formatters.f1.class = PatternFormatter
logging.formatters.f1.pattern = [%H:%M:%S] [%U(%u)] %p: %t
logging.formatters.f1.times = local
logging.channels.c1.class = ConsoleChannel
logging.channels.c1.formatter = f1
logging.channels.c2.class = FileChannel
logging.channels.c2.path = message.log
logging.channels.c2.formatter = f1
logging.channels.c2.rotation = 10K
logging.channels.c2.archive = timestamp
logging.channels.c2.times = local
logging.channels.c2.purgeCount = 10
logging.channels.c2.compress = true
logging.channels.splitter.class = SplitterChannel
logging.channels.splitter.channels = c1, c2
main.cpp−−−−−−−−
#include "Poco/AutoPtr.h"
#include "Poco/Util/PropertyFileConfiguration.h"
#include "Poco/Util/LoggingConfigurator.h"
#include "Poco/Exception.h"
#include "Poco/Logger.h"
#include "Poco/PatternFormatter.h"
int main()
{
try
{
Poco::AutoPtr<Poco::Util::PropertyFileConfiguration> propertyFileConfiguration(
new Poco::Util::PropertyFileConfiguration("log.properties"));
Poco::Util::LoggingConfigurator().configure(propertyFileConfiguration);
}
catch (Poco::Exception &e)
{
std::cerr << e.displayText() << std::endl;
return -1;
}
auto &logger = Poco::Logger::root();
poco_error(logger, "This is an error message");
poco_debug(logger, "This is a debug message");
poco_fatal(logger, "This is a fatal error!");
system("pause");
return 0;
}