1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
|
/*******************************************************************************
copyright: Copyright (c) 2004 Kris Bell. All rights reserved
license: BSD style: $(LICENSE)
version: Initial release: May 2004
author: Kris
*******************************************************************************/
module tango.util.log.LayoutDate;
private import tango.text.Util;
private import tango.time.Clock,
tango.time.WallClock;
private import tango.util.log.Log;
private import Integer = tango.text.convert.Integer;
/*******************************************************************************
A layout with ISO-8601 date information prefixed to each message
*******************************************************************************/
public class LayoutDate : Appender.Layout
{
private bool localTime;
/***********************************************************************
Ctor with indicator for local vs UTC time. Default is
local time.
***********************************************************************/
this (bool localTime = true)
{
this.localTime = localTime;
}
/***********************************************************************
Subclasses should implement this method to perform the
formatting of the actual message content.
***********************************************************************/
void format (LogEvent event, scope size_t delegate(const(void)[]) dg)
{
const(char)[] level = event.levelName;
// convert time to field values
auto tm = event.time;
auto dt = (localTime) ? WallClock.toDate(tm) : Clock.toDate(tm);
// format date according to ISO-8601 (lightweight formatter)
char[20] tmp = void;
char[256] tmp2 = void;
dg (layout (tmp2, "%0-%1-%2 %3:%4:%5,%6 %7 [%8] - ",
convert (tmp[0..4], dt.date.year),
convert (tmp[4..6], dt.date.month),
convert (tmp[6..8], dt.date.day),
convert (tmp[8..10], dt.time.hours),
convert (tmp[10..12], dt.time.minutes),
convert (tmp[12..14], dt.time.seconds),
convert (tmp[14..17], dt.time.millis),
level,
event.name
));
dg (event.toString());
}
/**********************************************************************
Convert an integer to a zero prefixed text representation
**********************************************************************/
private char[] convert (char[] tmp, long i)
{
return Integer.formatter (tmp, i, 'u', '?', 8);
}
}
|