POCO C++库学习和分析 -- 日志 (一)
日志对于程序来说是非常重要的,特别是对一些大型程序而言。一旦程序被发布,在现场日志几乎是程序员唯一可以获取程序信息的手段。Poco作为一个框架类库,提供了非常多的日志种类供程序员选用。文章将分两个部分,对于Poco日志进行介绍。第一部分主要以翻译Poco文档为主,第二部分则探讨Poco日志的实现。
1. Poco库日志接口
1.1 总体介绍
Poco中的日志模块主要涉及下列几个部分。
1. 消息,日志和通道
2. 格式
3. 执行效率的考量
模块框架图:

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可以是任意字符串。
消息参数可以被用于最终的格式输出。
消息参数支持下标索引。