POCO: 日志的使用

最简单的使用

#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;
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值