Mercurial > projects > ldc
comparison tango/tango/util/log/SocketAppender.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.SocketAppender; | |
14 | |
15 private import tango.util.log.Appender; | |
16 | |
17 private import tango.io.Buffer, | |
18 tango.io.Console; | |
19 | |
20 private import tango.net.SocketConduit, | |
21 tango.net.InternetAddress; | |
22 | |
23 /******************************************************************************* | |
24 | |
25 Appender for sending formatted output to a Socket. | |
26 | |
27 *******************************************************************************/ | |
28 | |
29 public class SocketAppender : Appender | |
30 { | |
31 private Mask mask; | |
32 private IBuffer buffer; | |
33 private SocketConduit conduit; | |
34 private InternetAddress address; | |
35 private bool connected; | |
36 | |
37 /*********************************************************************** | |
38 | |
39 Create with the given Layout and address | |
40 | |
41 ***********************************************************************/ | |
42 | |
43 this (InternetAddress address, EventLayout layout = null) | |
44 { | |
45 setLayout (layout); | |
46 | |
47 this.address = address; | |
48 this.conduit = new SocketConduit; | |
49 this.buffer = new Buffer (conduit); | |
50 | |
51 // Get a unique fingerprint for this class | |
52 this.mask = register (address.toString); | |
53 } | |
54 | |
55 /*********************************************************************** | |
56 | |
57 Return the fingerprint for this class | |
58 | |
59 ***********************************************************************/ | |
60 | |
61 Mask getMask () | |
62 { | |
63 return mask; | |
64 } | |
65 | |
66 /*********************************************************************** | |
67 | |
68 Return the name of this class | |
69 | |
70 ***********************************************************************/ | |
71 | |
72 char[] getName () | |
73 { | |
74 return this.classinfo.name; | |
75 } | |
76 | |
77 /*********************************************************************** | |
78 | |
79 Append an event to the output. If the operations fails | |
80 we have to revert to an alternative logging strategy, | |
81 which will probably require a backup Appender specified | |
82 during construction. For now we simply echo to Cerr if | |
83 the socket has become unavailable. | |
84 | |
85 ***********************************************************************/ | |
86 | |
87 void append (Event event) | |
88 { | |
89 auto layout = getLayout(); | |
90 | |
91 if (buffer) | |
92 { | |
93 try { | |
94 if (! connected) | |
95 { | |
96 conduit.connect (address); | |
97 connected = true; | |
98 } | |
99 | |
100 buffer (layout.header (event)); | |
101 buffer (layout.content (event)); | |
102 buffer (layout.footer (event)) (); | |
103 return; | |
104 } catch (Exception e) | |
105 { | |
106 connected = false; | |
107 Cerr ("SocketAppender.append :: "~e.toString).newline; | |
108 } | |
109 } | |
110 | |
111 Cerr (layout.content(event)).newline; | |
112 } | |
113 | |
114 /*********************************************************************** | |
115 | |
116 Close the socket associated with this Appender | |
117 | |
118 ***********************************************************************/ | |
119 | |
120 void close () | |
121 { | |
122 if (conduit) | |
123 conduit.detach; | |
124 conduit = null; | |
125 } | |
126 } |