Mercurial > projects > ldc
comparison tango/tango/util/log/DateLayout.d @ 132:1700239cab2e trunk
[svn r136] MAJOR UNSTABLE UPDATE!!!
Initial commit after moving to Tango instead of Phobos.
Lots of bugfixes...
This build is not suitable for most things.
author | lindquist |
---|---|
date | Fri, 11 Jan 2008 17:57:40 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
131:5825d48b27d1 | 132:1700239cab2e |
---|---|
1 /******************************************************************************* | |
2 | |
3 copyright: Copyright (c) 2004 Kris Bell. All rights reserved | |
4 | |
5 license: BSD style: $(LICENSE) | |
6 | |
7 version: Initial release: May 2004 | |
8 | |
9 author: Kris | |
10 | |
11 *******************************************************************************/ | |
12 | |
13 module tango.util.log.DateLayout; | |
14 | |
15 private import tango.text.Util; | |
16 | |
17 private import tango.time.Clock, | |
18 tango.time.WallClock; | |
19 | |
20 private import tango.text.convert.Integer; | |
21 | |
22 private import tango.util.log.Event, | |
23 tango.util.log.EventLayout; | |
24 | |
25 /******************************************************************************* | |
26 | |
27 A layout with ISO-8601 date information prefixed to each message | |
28 | |
29 *******************************************************************************/ | |
30 | |
31 public class DateLayout : EventLayout | |
32 { | |
33 private bool localTime; | |
34 | |
35 private static char[6] spaces = ' '; | |
36 | |
37 /*********************************************************************** | |
38 | |
39 Ctor with indicator for local vs UTC time. Default is | |
40 local time. | |
41 | |
42 ***********************************************************************/ | |
43 | |
44 this (bool localTime = true) | |
45 { | |
46 this.localTime = localTime; | |
47 } | |
48 | |
49 /*********************************************************************** | |
50 | |
51 Format message attributes into an output buffer and return | |
52 the populated portion. | |
53 | |
54 ***********************************************************************/ | |
55 | |
56 char[] header (Event event) | |
57 { | |
58 char[] level = event.getLevelName; | |
59 | |
60 // convert time to field values | |
61 auto tm = event.getTime; | |
62 auto dt = (localTime) ? WallClock.toDate(tm) : Clock.toDate(tm); | |
63 | |
64 // format date according to ISO-8601 (lightweight formatter) | |
65 char[20] tmp = void; | |
66 return layout (event.scratch.content, "%0-%1-%2 %3:%4:%5,%6 %7%8 %9 - ", | |
67 convert (tmp[0..4], dt.date.year), | |
68 convert (tmp[4..6], dt.date.month), | |
69 convert (tmp[6..8], dt.date.day), | |
70 convert (tmp[8..10], dt.time.hours), | |
71 convert (tmp[10..12], dt.time.minutes), | |
72 convert (tmp[12..14], dt.time.seconds), | |
73 convert (tmp[14..17], dt.time.millis), | |
74 spaces [0 .. $-level.length], | |
75 level, | |
76 event.getName | |
77 ); | |
78 } | |
79 | |
80 /********************************************************************** | |
81 | |
82 Convert an integer to a zero prefixed text representation | |
83 | |
84 **********************************************************************/ | |
85 | |
86 private char[] convert (char[] tmp, int i) | |
87 { | |
88 return format (tmp, cast(long) i, Style.Unsigned, Flags.Zero); | |
89 } | |
90 } |