`
sjk2013
  • 浏览: 2182672 次
文章分类
社区版块
存档分类
最新评论

调整ACE日志时间输出格式

 
阅读更多
ACE日志输出时用%D输出时间:
ACE_DEBUG ((LM_INFO, ACE_TEXT ("%DHi Mom/n")));
结果如:
Thu Mar 13 2008 17:38:01.453000Hi Mom
格式不符合中文习惯,并且太长。我把源码改了一下,这样输出时间时符合中国习惯(比如:08-05-12 09:37:20.123),并且节省输出长度(Windows下只能输出到毫秒,所以秒后面只要3位小数即可),改完重新编译ACE库即可。
// ACE.cpp,v 4.357 2003/11/05 23:30:46 shuston Exp
#include "ace/ACE.h"
#if defined (ACE_LACKS_INLINE_FUNCTIONS)
#include "ace/ACE.i"
#endif /* ACE_LACKS_INLINE_FUNCTIONS */
… …
// Returns the current timestamp in the form
// "hour:minute:second:microsecond."The month, day, and year are
// also stored in the beginning of the date_and_time array.
ACE_TCHAR *
ACE::timestamp (ACE_TCHARdate_and_time[],
intdate_and_timelen,
intreturn_pointer_to_first_digit)
{
//ACE_TRACE ("ACE::timestamp");
if (date_and_timelen < 35)
{
errno = EINVAL;
return 0;
}
#if defined (WIN32)
// Emulate Unix.Win32 does NOT support all the UNIX versions
// below, so DO we need this ifdef.
static const ACE_TCHAR *day_of_week_name[] =
{
ACE_LIB_TEXT ("Sun"),
ACE_LIB_TEXT ("Mon"),
ACE_LIB_TEXT ("Tue"),
ACE_LIB_TEXT ("Wed"),
ACE_LIB_TEXT ("Thu"),
ACE_LIB_TEXT ("Fri"),
ACE_LIB_TEXT ("Sat")
};
static const ACE_TCHAR *month_name[] =
{
ACE_LIB_TEXT ("Jan"),
ACE_LIB_TEXT ("Feb"),
ACE_LIB_TEXT ("Mar"),
ACE_LIB_TEXT ("Apr"),
ACE_LIB_TEXT ("May"),
ACE_LIB_TEXT ("Jun"),
ACE_LIB_TEXT ("Jul"),
ACE_LIB_TEXT ("Aug"),
ACE_LIB_TEXT ("Sep"),
ACE_LIB_TEXT ("Oct"),
ACE_LIB_TEXT ("Nov"),
ACE_LIB_TEXT ("Dec")
};
SYSTEMTIME local;
::GetLocalTime (&local);
/*更改以下两句,输出08-05-12 09:37:20.123的格式
ACE_OS::sprintf (date_and_time,
ACE_LIB_TEXT ("%3s %3s %2d %04d %02d:%02d:%02d.%06d"),
day_of_week_name[local.wDayOfWeek],
month_name[local.wMonth - 1],
(int) local.wDay,
(int) local.wYear,
(int) local.wHour,
(int) local.wMinute,
(int) local.wSecond,
(int) (local.wMilliseconds * 1000));
return &date_and_time[15 + (return_pointer_to_first_digit != 0)*/
ACE_OS::sprintf (date_and_time,
ACE_LIB_TEXT ("%02d-%02d-%02d %02d:%02d:%02d.%03d"),
(int) local.wYear - 2000,
(int) local.wMonth,
(int) local.wDay,
(int) local.wHour,
(int) local.wMinute,
(int) local.wSecond,
(int) local.wMilliseconds);
return &date_and_time[9];
#else /* UNIX */
ACE_TCHARtimebuf[26]; // This magic number is based on the ctime(3c) man page.
ACE_Time_Valuecur_time = ACE_OS::gettimeofday ();
time_tsecs = cur_time.sec ();
ACE_OS::ctime_r (&secs,
timebuf,
sizeof timebuf);
// date_and_timelen > sizeof timebuf!
ACE_OS::strsncpy (date_and_time,
timebuf,
date_and_timelen);
charyeartmp[5];
ACE_OS::strsncpy (yeartmp,
&date_and_time[20],
5);
chartimetmp[9];
ACE_OS::strsncpy (timetmp,
&date_and_time[11],
9);
ACE_OS::sprintf (&date_and_time[11],
"%s %s.%06ld",
yeartmp,
timetmp,
cur_time.usec ());
date_and_time[33] = '/0';
return &date_and_time[15 + (return_pointer_to_first_digit != 0)];
#endif /* WIN32 */
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics