From 26c7a07735051f2e2137eb118e4dded3d4790f4a Mon Sep 17 00:00:00 2001 From: Mark Spencer Date: Fri, 11 Mar 2005 07:24:10 +0000 Subject: [PATCH] Add timestamping to console (bug #3653 with minor mods) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5163 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- asterisk.8.gz | Bin 2340 -> 2458 bytes asterisk.c | 10 +++++++++- asterisk.sgml | 20 +++++++++++++++++++- include/asterisk/options.h | 1 + logger.c | 24 ++++++++++++++++++++---- 5 files changed, 49 insertions(+), 6 deletions(-) diff --git a/asterisk.8.gz b/asterisk.8.gz index 916f4d137719abff002b8aa2cbf8360436998564..abbd0c45312bcbb54d0220a7c64661cf50b7f7b3 100755 GIT binary patch literal 2458 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 literal 2340 zcmV+<3ETD`iwFp%#`-`217UM?WpZhAYc4nd-B?X?8@Um^&#yq~kd;#uWm`FHxm>QL zB$majC9z0a>r|WrI0MdLH3N(R3@PT2-=5cv`JiZR_L!|b*ct-pMx(pm>juVOPsFOw zUR2W5GFPIIUaXZeLN>uxGU!y6o35>WdsefBTgpE)pRji{(K@%e#E~wKZ?IMaLwD- zum6Uh60%PFNAYI-8b42xWW2l)caz&`(ocOo6O*z$s~cBam>*QB>cYZ)uiRF-F^eq! zad$so&X!5?b#vK?e%&m@KLrNPicPkC_*O6SR2v%oS37=%|7ROrD*QMc|4icwHaHsp zNaMM)O?@=+L=)sSX|irAd1j0_bAvtG-E!AfN}`~p-Dh)g`e0}CS0abZ zPVTkIkxW_Qcjj*AB@NgDc*CkLzn-DaxdhM*t634bfU|5=| zEq3=po3v~)=tmBxk1B{QTXnje&2h}hmyx*rc!kg9qc&zgN^Zs%Z!cc;;-_oaAb^$H zY9N7agcF~%@;D&?zXST{Z*VfxWSA_)>iRY*q|0{FsRIL6Z$@H@f3xNFotQ6XBk^%@ zcJcaRBo>#;k@#e7?Spgyb!C6E|{ll3i=Hw@}IYQdks?(>@`VC2Eeo z`UONKTw@FcW2X^U!d(gkjrfa^iGApMf$zlDoM|J`d)YUXfr{`}+nsU%ooF#Dh<`^1 z;cmwhqG9ATG>sw(5kssEwtn(Z-1U)pwxKNIxW23EfT7`XrL&>bthL9#1 znFLTm0__g+H9|erB~pVu@f<4!e28pJ(#8RA0ZuCc91b`vV9)Jw$SU&a$vuvp=N8jElYm8JRvcatb@u6JiE=6x*CuQLUlY#1#*=lDBxrJN6nquQUIS5iar-Mr9Xpy+uEiz^_0({S)hul%x zoVqb)@v2I^rP4Kuxb8xh$spHo>xlcY-aEx1V%DIJ3d{x*xjnhzkgPxmIX9b;LE4-O zYS5)yT~!^3tsEUlvsaKx+&!XpyM0ZSqi#EjN459JCD*1oYDYaNG@RqwGbko^%NYzR ziTaqn$YX6{Q?;mh6^zcbuS?m2nK`OeM?p?z8>VGsU~I7u$`YBtv?flOBcD{-@F>FM ztP1F3WWY3zhm)Z+#Ik@|S_X}*#hEPPw~xWXQK@y#I&MbiL{32a5ql$0vQgf%jut{a zzR)wEoj^>HJ2U~NR@6;(O%8Qtxs#Re3zY2(qyl8pg1YVbZOyEE46kBimQQCXT&3K&VqDg;Bc~kJh^qx(eEagnP73?pUI0 zrUq_jdo=Z)8=0zvyne`fIt<2ffxc}(jzm&@{r>tF;Q9|{vzTOEYgq1q>P@#*OA*f! zCFwQ-9hKwRtNi0 z83xbVz7u_cBYIdRWK0jc&W{f*n-e+HX*r-99pjR?i%-7iZh;Hcz7%;hhToJ`=u|b5G*L7j`G;9l)s4pF|~Hbh}~F*u^Ej zEW{&Re*V~+e>uD-aiH2K2}ZT@q3{0)>-3r>+IK9p#(tdXTsIZHVnwyf=~PTUE$^f1 zzg~TseIUOUs;r}ZH~1o(dhcM#^R;}c!^=<>hC0ncOGeQ$-IN#|7co}15EY<0^hi#; zCq*Rt(_qyHUUp?0+(wyg`K^bumEMuSCL?5+5?71q^=!3_e3TtNGf{b{;(ev3oaDdM K9BR0h6#xL2c#cZ| diff --git a/asterisk.c b/asterisk.c index 2390f65dc4..cb31376cf3 100755 --- a/asterisk.c +++ b/asterisk.c @@ -81,6 +81,7 @@ int option_initcrypto=0; int option_nocolor; int option_dumpcore = 0; int option_cache_record_files = 0; +int option_timestamp = 0; int option_overrideconfig = 0; int option_reconnect = 0; int fully_booted = 0; @@ -1539,6 +1540,7 @@ static int show_cli_help(void) { printf(" -r Connect to Asterisk on this machine\n"); printf(" -R Connect to Asterisk, and attempt to reconnect if disconnected\n"); printf(" -t Record soundfiles in /var/tmp and move them where they belong after they are done.\n"); + printf(" -T Display the time in [Mmm dd hh:mm:ss] format for each line of output to the CLI.\n"); printf(" -v Increase verbosity (multiple v's = more verbose)\n"); printf(" -x Execute command (only valid with -r)\n"); printf("\n"); @@ -1611,6 +1613,9 @@ static void ast_readconfig(void) { /* verbose level (-v at startup) */ if (!strcasecmp(v->name, "verbose")) { option_verbose= atoi(v->value); + /* whether or not to force timestamping. (-T at startup) */ + } else if (!strcasecmp(v->name, "timestamp")) { + option_timestamp = ast_true(v->value); /* whether or not to support #exec in config files */ } else if (!strcasecmp(v->name, "execincludes")) { option_exec_includes = ast_true(v->value); @@ -1700,7 +1705,7 @@ int main(int argc, char *argv[]) } */ /* Check for options */ - while((c=getopt(argc, argv, "thfdvVqprRgcinx:U:G:C:")) != -1) { + while((c=getopt(argc, argv, "tThfdvVqprRgcinx:U:G:C:")) != -1) { switch(c) { case 'd': option_debug++; @@ -1738,6 +1743,9 @@ int main(int argc, char *argv[]) case 't': option_cache_record_files++; break; + case 'T': + option_timestamp++; + break; case 'x': option_exec++; xarg = optarg; diff --git a/asterisk.sgml b/asterisk.sgml index fb569d533e..b84ad0020a 100755 --- a/asterisk.sgml +++ b/asterisk.sgml @@ -21,7 +21,7 @@ asterisk - + file user group @@ -190,6 +190,24 @@ + + -t + + + When recording files, write them first into a temporary holding directory, + then move them into the final location when done. + + + + + -T + + + Add timestamp to all non-command related output going to the console + when running with verbose and/or logging to the console. + + + -U user diff --git a/include/asterisk/options.h b/include/asterisk/options.h index 5cbdeab0f6..2a3cf237cc 100755 --- a/include/asterisk/options.h +++ b/include/asterisk/options.h @@ -31,6 +31,7 @@ extern int option_nocolor; extern int fully_booted; extern int option_exec_includes; extern int option_cache_record_files; +extern int option_timestamp; extern char defaultlanguage[]; extern time_t ast_startuptime; extern time_t ast_lastreloadtime; diff --git a/logger.c b/logger.c index 502a9719fb..a8f7fe3fe1 100755 --- a/logger.c +++ b/logger.c @@ -601,14 +601,14 @@ void ast_log(int level, const char *file, int line, const char *function, const if (level != __LOG_VERBOSE) { sprintf(linestr, "%d", line); - snprintf(buf, sizeof(buf), "%s %s[%ld]: %s:%s %s: ", + snprintf(buf, sizeof(buf), option_timestamp ? "[%s] %s[%ld]: %s:%s %s: " : "%s %s[%ld]: %s:%s %s: ", date, term_color(tmp1, levels[level], colors[level], 0, sizeof(tmp1)), (long)GETTID(), term_color(tmp2, file, COLOR_BRWHITE, 0, sizeof(tmp2)), term_color(tmp3, linestr, COLOR_BRWHITE, 0, sizeof(tmp3)), term_color(tmp4, function, COLOR_BRWHITE, 0, sizeof(tmp4))); - + ast_console_puts(buf); va_start(ap, fmt); vsnprintf(buf, sizeof(buf), fmt, ap); @@ -616,7 +616,7 @@ void ast_log(int level, const char *file, int line, const char *function, const ast_console_puts(buf); } } else if ((chan->logmask & (1 << level)) && (chan->fileptr)) { - snprintf(buf, sizeof(buf), "%s %s[%ld]: ", date, + snprintf(buf, sizeof(buf), option_timestamp ? "[%s] %s[%ld]: " : "%s %s[%ld]: ", date, levels[level], (long)GETTID()); fprintf(chan->fileptr, buf); va_start(ap, fmt); @@ -657,13 +657,30 @@ extern void ast_verbose(const char *fmt, ...) static int replacelast = 0, complete; struct msglist *m; struct verb *v; + time_t t; + struct tm tm; + char date[40]; + char *datefmt; + va_list ap; va_start(ap, fmt); ast_mutex_lock(&msglist_lock); + time(&t); + localtime_r(&t, &tm); + strftime(date, sizeof(date), dateformat, &tm); + + if (option_timestamp) { + datefmt = alloca(strlen(date) + 3 + strlen(fmt) + 1); + if (datefmt) { + sprintf(datefmt, "[%s] %s", date, fmt); + fmt = datefmt; + } + } vsnprintf(stuff + pos, sizeof(stuff) - pos, fmt, ap); opos = pos; pos = strlen(stuff); + if (stuff[strlen(stuff)-1] == '\n') complete = 1; else @@ -703,7 +720,6 @@ extern void ast_verbose(const char *fmt, ...) } } /* else fprintf(stdout, stuff + opos); */ - ast_log(LOG_VERBOSE, "%s", stuff); if (strlen(stuff)) { if (stuff[strlen(stuff)-1] != '\n')