找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4815|回复: 5

为什么在ACE_ERROR中 %N:%l: 不能正确展开?

[复制链接]
发表于 2009-11-15 18:08:32 | 显示全部楼层 |阅读模式
为什么在ACE_ERROR%N:%l:
不能正确展开?而ACE_DEBUG却可以

比如:

ACE_ERROR
((LM_ERROR,
"%p\n",
"%N:%l: @@@@@@@@@@@@@@@@"));
ACE_DEBUG
((LM_DEBUG,
"%N:%l: @@@@@@@@@@@@@@@@\n"));
结果为:

%N:%l: @@@@@@@@@@@@@@@@: Success
../test.cpp:155: @@@@@@@@@@@@@@@@
发表于 2009-11-16 20:53:01 | 显示全部楼层
#define ACE_DEBUG  ( X    )   
Value:
do { \
    int __ace_error = ACE_Log_Msg::last_error_adapter (); \
    ACE_Log_Msg *ace___ = ACE_Log_Msg::instance (); \
    ace___->conditional_set (__FILE__, __LINE__, 0, __ace_error); \
    ace___->log X; \
  } while (0)

#define ACE_ERROR  ( X    )   
Value:
do { \
    int __ace_error = ACE_Log_Msg::last_error_adapter (); \
    ACE_Log_Msg *ace___ = ACE_Log_Msg::instance (); \
    ace___->conditional_set (__FILE__, __LINE__, -1, __ace_error); \
    ace___->log X; \
  } while (0)


我比较了一下定义,差别只有一处,难道是那里的问题?估计要跟踪进去才知道了。


发表于 2009-11-17 10:25:58 | 显示全部楼层
如果我没看错的话%p,是小写的吧。
印象里小写的%p貌似打印进程ID,
大写的%P才是打印Errno吧
 楼主| 发表于 2009-11-19 16:46:38 | 显示全部楼层
查了下APG。
P:Current process ID
p:Specified character string, followed by the appropriate errno message, that is, as done by perror()
N: File name where logging macro appears
l: Line number where logging macro appears
只能跟进去看了,但是Log_Msg的架构相当复杂,看起来应该比较花时间,等有精力的时候再去看吧。。。
发表于 2009-11-19 16:53:42 | 显示全部楼层
ACE_ERROR((LM_ERROR,
                "%N:%l %p\n",
                "@@@@@@@@@@@@@@@@"));
这么写就可以了。
原因,%N%l需要放在第一个字符串中,ACE日志才会识别。
放在后面的字符串中,不会进行转义。
 楼主| 发表于 2009-11-19 16:55:54 | 显示全部楼层
ok, 谢谢modern:handshake
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-22 18:17 , Processed in 0.021875 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表