ACE服务端编程5:ACE日志输出和跟踪
服务器程序经常需要在命令行中显示错误消息、状态或者用来跟踪程序的执行路径,最简单的方法是使用printf。
ACE提供了更强大日志设施:
1、可以在编译时启用或禁用宏;
2、可以动态的启用或禁用宏;
3、支持日志严重级别;
4、支持日志重定向;
5、支持多线程安全和线程级配置;
使用ACE的日志相关功能,需要引入<ace/Log_Msg.h>头文件。
ACE日志输出
ACE提供了两个宏来支持日志输出:ACE_DEBUG、ACE_ERROR。
这两个宏的内部实现和行为都是一样,只是为了在语义上区分调试信息和错误信息。
在引入<ace/Log_Msg.h>头文件前添加以下定义可以关闭日志输出,ACE_DEBUG、ACE_ERROR将被替换为空语句:
#define ACE_NLOGGING 1
ACE_DEBUG、ACE_ERROR的使用示例:
ACE_DEBUG((LM_STARTUP, ACE_TEXT("Startup.\n"))); ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("hook2: %d\n"),
*paramp)); ACE_ERROR((LM_ERROR, ACE_TEXT("config file %s is not found.\n"), szConfigFile.c_str())
使用ACE_DEBUG、ACE_ERROR宏需要注意的地方是需要使用两对括号来包过参数。
第一个参数是严重级别,ACE可配置日志严重级别来显示或关闭该级别的日志输出:
LM_DEBUG、LM_ERROR、LM_INFO、LM_ALERT、LM_WARNING等,级别没有优先级之分,最常用的是LM_DEBUG、LM_ERROR。
第二个参数支持格式化字符串,常用的指令集:
%A:浮点数
%s:字符串
%d:十进制数
%M:严重级别
%N:文件名称
%P:进程ID
%t:线程ID
%D:当前时间
%I:缩进
ACE调用跟踪
ACE定义了ACE_TRACE宏用于跟踪函数的调用,具体说就是在其定义的地方产生输出,在退出其作用域时产生另一条输出。
ACE_TRACE的实现是被展开为一个栈上的对象,在其构造和析构函数中分别输出日志。
void foo()
{
ACE_TRACE(ACE_TEXT("foo\n"))
int a = ;
int b = ;
int c = b;
}
ACE_TRACE只接收单个字符串,不支持格式化字符串,输出的日志严重级别为LM_TRACE。
ACE_TRACE默认是禁用的,网上经常有朋友反映看不到ACE_TRACE的输出,而很多回答也是错的,单纯在项目中定义#define ACE_NTRACE 0也是无法起作用的。
必须在ace/config.h头文件中,在引用其他头文件前定义并且重新编译ACE库:
#define ACE_NTRACE 0
记录,为更好的自己!转载请注明出处!
ACE服务端编程5:ACE日志输出和跟踪的更多相关文章
- ACE服务端编程3:ACE跨平台之分配堆内存
ACE服务端编程系列的第三篇,探究ACE解决不同编译器之间分配堆内存的差异. 在ACE的官方示例中会看到大量的ACE_NEW_RETURN,ACE_NEW这样的宏,这是ACE为了消除不同编译器编译的代 ...
- ACE服务端编程4:ACE跨平台之运行时初始化和关闭
参考APG里的说法:平台差异及不兼容性的一个特别的方面,是对象的运行时初始化和程序关闭时这些对象的相应析构. ACE为了明确管理对象的清理,定义了ACE_Object_Manager类,这个类不仅涉及 ...
- ACE服务端编程2:ACE跨平台之数据类型和宽字符
ACE网络库的主要优势之一就是跨平台,ACE提供了操作系统API和编译器级别的跨平台解决方法,使开发人员不用再去关心操作系统和编译器的差异,但因此也带来了ACE的复杂性. ACE网络库的组织结构主要分 ...
- ACE服务端编程1:使用VS2010编译ACE6.0及从ACE5.6升级的注意事项
ACE是一个跨平台的用于并发通信的C++框架,项目开始时使用的是ACE 5.6发布版,目前最新的ACE版本是6.3.0. 网上一直有一种黑ACE的氛围,主要黑点在于ACE的复杂和作者的背景,结合实际应 ...
- Photon Server 服务端编程
Photon Server 和 Unity3D 数据交互: Photon Server 服务端编程 Unity3D 客户端编程 VS2017 之 MYSQL实体数据模 一:Photon Server的 ...
- Linux多线程服务端编程一些总结
能接触这本书是因为上一个项目是用c++开发基于Linux的消息服务器,公司没有使用第三方的网络库,卷起袖子就开撸了.个人因为从业经验较短,主 要负责的是业务方面的编码.本着兴趣自己找了这本书.拿到书就 ...
- 《Linux 多线程服务端编程:使用 muduo C++ 网络库》电子版上市
<Linux 多线程服务端编程:使用 muduo C++ 网络库> 电子版已在京东和亚马逊上市销售. 京东购买地址:http://e.jd.com/30149978.html 亚马逊Kin ...
- 《Linux多线程服务端编程:使用muduo C++网络库》上市半年重印两次,总印数达到了9000册
<Linux多线程服务端编程:使用muduo C++网络库>这本书自今年一月上市以来,半年之内已经重印两次(加上首印,一共是三次印刷),总印数达到了9000册,这在技术书里已经算是相当不错 ...
- 《Linux多线程服务端编程》笔记——多线程服务器的适用场合
如果要在一台多核机器上提供一种服务或执行一个任务,可用的模式有 运行一个单线程的进程 运行一个多线程的进程 运行多个单线程的进程 运行多个多线程的进程 这些模式之间的比较已经是老生常谈,简单地总结 模 ...
随机推荐
- 【RL系列】马尔可夫决策过程——Jack‘s Car Rental
本篇请结合课本Reinforcement Learning: An Introduction学习 Jack's Car Rental是一个经典的应用马尔可夫决策过程的问题,翻译过来,我们就直接叫它“租 ...
- ntp时钟服务器配置
集群中时间不同步有可能会让大数据的应用程序运行混乱,造成不可预知的问题,比如Hbase,当时间差别过大时就会挂掉,所以在大数据集群中,ntp服务,应该作为一种基础的服务,以下在演示在CentOS 7. ...
- javascript event对象操作
js代码: $(".leads_detail").click(function(e){ e = e || event; var t = e.target || e.srcEleme ...
- 4. 基本socket函数
一.创建socket /* 创建一个socket */ int socket(int family, int type, int protocol); /* 参数说明 */ // domain:使用哪 ...
- 基于NABCD评论作品,及改进建议
组名:杨老师粉丝群 组长:乔静玉 组员:吴奕瑶 刘佳瑞 公冶令鑫 杨磊 杨金铭 张宇 卢帝同 一.拉格朗日2018--<飞词> 1.1 NABCD分析 N(Need,需求) ...
- PSP DAILY软件功能说明书
PSP DAILY软件功能说明书 一.开发背景 你在完成了一周的软件工程作业后,需要提交一个PSP图表,里面有4项,如下所示: 1.本周PSP表格,包含每项任务的开始.中断.结束.最终时间,格式如下: ...
- 敏捷开发与xp实践 实验报告
20162315 敏捷开发与xp实践 实验报告 实验任务 1.在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好 ...
- psp项目计划
日期/任务 听课 编写程序 阅读书籍 查阅资料 日总计 周一 2h 0.5h 2.5 周二 1h 1 周三 1h 周四 2h 0.5h 2.5 周五 3 ...
- Java单例模式&static成员变量 区别
当需要共享的变量很多时,使用static变量占用内存的时间过长,在类的整个生命周期. 而对象只是存在于对象的整个生命周期. //饿汉式 class Single//类一加载,对象就已经存在了. { ...
- C++ auto_ptr智能指针的用法
C++中指针申请和释放内存通常采用的方式是new和delete.然而标准C++中还有一个强大的模版类就是auto_ptr,它可以在你不用的时候自动帮你释放内存.下面简单说一下用法. 用法一: std: ...