C/C++领域速度最快的程序诊断日志库 Pantheios 介绍(二)

2014-11-24 11:02:52 · 作者: · 浏览: 2
y() 需要返回一个非 0 结尾的字符串,函数 pantheios_fe_isSeverityLogged() 返回一个非 0 值,以及实现函数 pantheios_fe_init() 和 pantheios_fe_uninit(),例子如下:
PANTHEIOS_CALL(int) pantheios_fe_init(void* reserved, void** ptoken)
{
*ptoken = NULL;
return 0;
}
PANTHEIOS_CALL(void) pantheios_fe_uninit(void* token){}
PANTHEIOS_CALL(char const*) pantheios_fe_processIdentity(void* token)
{
return "My Process";
}
PANTHEIOS_CALL(int) pantheios_fe_isSeverityLogged(void* token, int severity, int backEndId)
{
return 1; // Allow all levels
}
Back-end(后端)
后端库通过提供三个函数来实现后端日志输出:
1. PANTHEIOS_CALL(int) pantheios_be_init(char const* processIdentity, int reserved, void** ptoken);
2. PANTHEIOS_CALL(void) pantheios_be_uninit(void* token);
3. PANTHEIOS_CALL(int) pantheios_be_logEntry(void* feToken, void* beToken, int severity, char const* entry, size_t cchEntry);
pantheios_be_init() 和 pantheios_be_uninit() 只在库初始化(反初始化)时调用一次,应用层要求输出日志并且 pantheios_fe_isSeverityLogged() 返回非 0 时,pantheios_be_logEntry() 被调用一次。
后台库的选择在链接时刻实现,Pantheios 已经实现了下面几个后端库:
l be.ACE - 日志输出给 ACE 日志框架
l be.COMErrorObject - 日志输出给 COM 错误对象
l be.fprintf - 通过 fprintf() 输出日志给控制台
l be.null - 什么也不输出
l be.syslog - 使用 unix 的 SysLog API 函数,按 Syslog 协议输出日志
l be.Win32Console - 输出日志给 windows 的控制台窗口,注意,日志级别不同,颜色也不同
l be.Win32Debugger - 输出日志给 windows 调试窗口
l be.Win32syslog - 使用 windows 的 SysLog 协议输出日志
l be.WindowsEventLog - 输出日志给 Windows Event Log
还有一个神奇的后端库 be.lrsplit,它采用组合模式,输出日志到本地后端和远程后端。
pantheios 提供的后端库使用指导
太简单了,处理链接时指定需要使用的库,其它什么也不用做!比如,vc9 使用 be.fprintf 后端库,你需要指定链接下面这些库:
debug
pantheios.1.be.fprintf.vc9.mt.debug.lib 和 pantheios.1.bec.fprintf.vc9.mt.debug.lib
release
pantheios.1.be.fprintf.vc9.mt.lib 和 pantheios.1.bec.fprintf.vc9.mt.lib
为什么要使用两个库呢?是因为为支持 be.lrsplit,pantheios 实现的这些后端库都由四个部分组成,列表如下:

名字
独立使用接口库
本地端接口库
远端接口库
公共实现库
ACE
be.ACE
bel.ACE
ber.ACE

bec.ACE
COM Error Object
be.COMErrorObject
bel.COMErrorObject
ber.COMErrorObject
bec.COMErrorObject
file
be.file
bel.file
ber.file
bec.file
fprintf
be.fprintf
bel.fprintf
ber.fprintf
bec.fprintf
null
be.null
bel.null
ber.null
bec.null
SysLog
be.syslog
bel.syslog
ber.syslog
bec.syslog
Win32 Console
be.Win32Console
bel.Win32Console
ber.Win32Console
bec.Win32Console
Win32 Debugger
be.Win32Debugger
bel.Win32Debugger
ber.Win32Debugger
bec.Win32Debugger
Win32 SysLog
be.Win32sysLog
bel.Win32sysLog
ber.Win32sysLog
bec.Win32sysLog
Windows Event Log
be.WindowsEventLog
bel.WindowsEventLog
ber.WindowsEventLog
bec.WindowsEventLog


作者:lzy0168