为什么在ACE_ERROR中 %N:%l: 不能正确展开?
为什么在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: @@@@@@@@@@@@@@@@
#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)
我比较了一下定义,差别只有一处,难道是那里的问题?估计要跟踪进去才知道了。
如果我没看错的话%p,是小写的吧。
印象里小写的%p貌似打印进程ID,
大写的%P才是打印Errno吧 查了下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的架构相当复杂,看起来应该比较花时间,等有精力的时候再去看吧。。。 ACE_ERROR((LM_ERROR,
"%N:%l %p\n",
"@@@@@@@@@@@@@@@@"));
这么写就可以了。
原因,%N%l需要放在第一个字符串中,ACE日志才会识别。
放在后面的字符串中,不会进行转义。 ok, 谢谢modern:handshake
页:
[1]