On 2015/5/20 17:00, Daniel P. Berrange wrote: > On Wed, May 20, 2015 at 06:29:55AM +0000, Gonglei (Arei) wrote: >> Hi, >> >> At present, Qemu use g_time_val_to_iso8601() to get the UTC added to >> error_report() >> (commit 5e2ac5191), TBH this way is very simply, we just need invoke >> standard glib functions to >> complete the job. >> >> But in the cloud computing and data center scenarios, there are many >> Other open source components, such as kernel, libvirt, openstack which are >> all using local time >> to record the message logs, only Qemu is using the UTC time. When we want to >> find a error >> message of Qemu, we should convert the UTC time to local time manually, and >> unfortunately >> different countries have different local time, what a trouble thing the >> converting is. >> >> So, my question is: Can we convert the UTC time to local time in Qemu? >> >> Any thoughts? Thanks. > > Actually, libvirt uses UTC for logging almost exclusively for quite a > while, because AFAIK, there is no async signal safe way to convert to > localtime in POSIX / glibc > Thanks for correcting me :)
Regards, -Gonglei > commit 3ec128989606278635a7c5dfbeee959692d12e15 > Author: Daniel P. Berrange <berra...@redhat.com> > Date: Tue Nov 29 12:11:01 2011 +0000 > > Add internal APIs for dealing with time > > The logging APIs need to be able to generate formatted timestamps > using only async signal safe functions. This rules out using > gmtime/localtime/malloc/gettimeday(!) and much more. > > Introduce a new internal API which is async signal safe. > > virTimeMillisNowRaw replacement for gettimeofday. Uses clock_gettime > where available, otherwise falls back to the unsafe > gettimeofday > > virTimeFieldsNowRaw replacements for gmtime(), convert a timestamp > virTimeFieldsThenRaw into a broken out set of fields. No localtime() > replacement is provided, because converting to > local time is not practical with only async signal > safe APIs. > > virTimeStringNowRaw replacements for strftime() which print a timestamp > virTimeStringThenRaw into a string, using a pre-determined format, with > a fixed size buffer (VIR_TIME_STRING_BUFLEN) > > For each of these there is also a version without the Raw postfix > which raises a full libvirt error. These versions are not async > signal safe > > Regards, > Daniel >