Correction would need to be made for thread id in sprintf, the code below
assumes it is long long, but on 32 but systems it is int.
tid = pthread_getthreadid_np();
sprintf(myfmt, "<%s.%03ld %016llx> %s", tempTimeStr, t.tv_usec/1000,
*((long long *)&tid), fmt);
Nadir K. Amra
Nadir Amra/Rochester/[EMAIL PROTECTED] wrote on 02/05/2006 11:28:07 AM:
> Note I have not looked at axis2 code, so I am talking canceptually....
>
> I am assuming there is a point where there is some initialization going
on
> prior to anyone using the trace that is tied to configuration. At that
> time, one can set a global file handle to the log file by calling
> trace_init() which simply contains the following code:
>
> FILE * traceFp = fopen(logFile, "w+");
> setvbuf(traceFp, NULL, _IOFBF, (size_t)(8*1024));
>
> The above assumes trace records are no longer than 8K. This will ensure
no
> buffering takes place.
>
> Then, in the actual routine that performs the trace:
>
> #include <stdlib.h>
> #include <stdio.h>
> #include <stdarg.h>
> #include <pthread.h>
>
> void trace(const char *fmt, ... )
> {
> char tempTimeStr[200];
> struct timeval t;
> struct tm *lTime;
> pthread_id_np_t tid;
> va_list args;
> char myfmt[8*1024];
>
> if (traceFp == NULL)
> return;
>
> gettimeofday(&t, NULL);
> lTime = localtime((const time_t *)&t.tv_sec);
> strftime(tempTimeStr, 100, "%d/%b/%Y %H:%M:%S", lTime);
>
> tid = pthread_getthreadid_np();
>
> sprintf(myfmt, "<%s.%03ld %016llx> %s", tempTimeStr, t.tv_usec/1000,
> *((long long *)&tid), fmt);
>
> va_start(args, fmt);
> vfprintf(traceFp, myfmt, args);
> va_end(args);
> fflush(traceFp);
> }
>
>
> The above code is thread-safe and not only prints out the date and time
> (included milli-seconds), but the thread ID also.
>
>
> Nadir K. Amra
>
>
> Samisa Abeysinghe <[EMAIL PROTECTED]> wrote on 02/03/2006
> 10:51:11 PM:
>
> > Hi All,
> > Once we have the threads in place, we have to ensure that our
> > logging mechanism is thread safe.
> > May be we can learn some stuff from Apache httpd code.
> >
> > Unfortunately, we are not lucky as much as Java guys, we do not
have
>
> > a log4j equivalent. We have log4c http://log4c.sourceforge.net/. But I
> > am not convinced of its maturity and licence.
> > Thoughts please...
> > Thanks,
> > Samisa...
>