poco mysql longtext_POCO C++库学习和分析 -- 日志 (一)

POCO C++库学习和分析 -- 日志 (一)

日志对于程序来说是非常重要的,特别是对一些大型程序而言。一旦程序被发布,在现场日志几乎是程序员唯一可以获取程序信息的手段。Poco作为一个框架类库,提供了非常多的日志种类供程序员选用。文章将分两个部分,对于Poco日志进行介绍。第一部分主要以翻译Poco文档为主,第二部分则探讨Poco日志的实现。

1. Poco库日志接口

1.1  总体介绍

Poco中的日志模块主要涉及下列几个部分。

1. 消息,日志和通道

2. 格式

3. 执行效率的考量

模块框架图:

1366082432_7454.jpg

1366082439_3484.jpg

1366082444_5395.jpg

1366082448_4998.jpg

1.2  消息(Message类):

1. 所有的消息都被存储并通过类Poco::Message传递

2. 一个消息包括了下述特性:

a. 优先级

b. 消息源

c. 消息内容

d. 时间戳

e. 进程与线程标记

f. 可选参数(名字-值)对

消息优先级:

Poco定义了8种消息优先级:

PRIO_FATAL

PRIO_CRITICAL

PRIO_ERROR

PRIO_WARNING

PRIO_NOTICE

PRIO_INFORMATION

PRIO_DEBUG

PRIO_TRACE

可以通过函数设置和获取消息优先级:

void setPriority(Priority prio)

Priority getPriority() const

消息源:

消息源用来描述日志消息的源。通常状态下,使用Poco::Logger的名字来命名。因此应该合理的命名Poco::Logger的名字。

可以通过函数设置和获取消息源:

void setSource(const std::string& source)

const std::string& getSource() const

消息内容:

在Poco中消息内容是不考虑格式和长度等问题的,只是消息内容。当消息最终输出时,消息内容有可能被类Poco::formatter修改。

可以通过函数设置和获取消息内容:

void setText(const std::string& text)

const std::string& getText() const

消息时间戳:

记录消息产生时的时间戳,精度为毫秒。

可以通过函数设置和获取时间戳:

void setTime(const Timestamp& time)

const Timestamp& getTime() const

进程和线程标识符:

进程标识符(PID)为长整形的int值,用来存储系统的进程ID。

线程标识符(TID)同样为长整形的int值,用于存储当前线程的ID值。

同样的当前线程的名字也会被存储。进程标识符(PID)、线程标识符(TID)、线程名在Poco::Message初始化时会自动生成。

可以使用下列函数对进程标识符(PID)、线程标识符(TID)、线程名进行操作:

void setThread(const std::string& threadName)

const std::string& getThread() const

void setTid(long tid)

long getTid() const

void setPid(long pid)

long getPid() const

消息参数:

一个消息可以存储任意数目的name-value对 。

name-value可以是任意字符串。

消息参数可以被用于最终的格式输出。

消息参数支持下标索引。

1.3 Logger类:

应用程序可以使用Poco::Logger类去产生日志消息。每一个日志对象内部都包含了一个通道对象(Channel),通道用于最终把消息送到目的地。

每一个logger对象都有名字,logger对象的名字会被用于命名所有由此对象产生的消息的消息源名称。名字一旦被设定,将不能被改变。

每一个Poco::Logge对象都有其自己的优先级。有了优先级后,Poco::Logge对象便可以对消息进行过滤。只有消息的优先级比Poco::Logge对象的优先级高,消息才会被Poco::Logge对象所传递。

Logger的继承体系。

1. 基于Logger的名字,可以形成日志的树状继承体系。

2. 一个Logger对象的名字包含了一个或多个部分,不同部分之间使用'.'分隔。每个日志组件的名称都包含了上级日志组件的名称

3. 存在一个特殊的Logger,即root Logger,其名字为空。它是所有Logger的根。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值