KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > protomatter > syslog > HTMLSyslogTextFormatter


1 package com.protomatter.syslog;
2
3 /**
4  * {{{ The Protomatter Software License, Version 1.0
5  * derived from The Apache Software License, Version 1.1
6  *
7  * Copyright (c) 1998-2002 Nate Sammons. All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution,
22  * if any, must include the following acknowledgment:
23  * "This product includes software developed for the
24  * Protomatter Software Project
25  * (http://protomatter.sourceforge.net/)."
26  * Alternately, this acknowledgment may appear in the software itself,
27  * if and wherever such third-party acknowledgments normally appear.
28  *
29  * 4. The names "Protomatter" and "Protomatter Software Project" must
30  * not be used to endorse or promote products derived from this
31  * software without prior written permission. For written
32  * permission, please contact support@protomatter.com.
33  *
34  * 5. Products derived from this software may not be called "Protomatter",
35  * nor may "Protomatter" appear in their name, without prior written
36  * permission of the Protomatter Software Project
37  * (support@protomatter.com).
38  *
39  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
40  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
41  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
42  * DISCLAIMED. IN NO EVENT SHALL THE PROTOMATTER SOFTWARE PROJECT OR
43  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
45  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
46  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
47  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
48  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
49  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
50  * SUCH DAMAGE. }}}
51  */

52
53 import java.io.PrintWriter JavaDoc;
54 import java.util.*;
55 import java.text.*;
56 import java.net.*;
57 import java.io.*;
58
59 import com.protomatter.util.*;
60
61 /**
62  * A log entry formatter that produces HTML.
63  *
64  * @see com.protomatter.sylog.xml.HTMLSyslogTextFormatter_Helper XML configuration class
65  */

66 public class HTMLSyslogTextFormatter
67 extends SimpleSyslogTextFormatter
68 {
69   private String JavaDoc styleSheet = "syslog-stylesheet.css";
70
71   private static char[] DEBUG = "DEBUG".toCharArray();
72   private static char[] INFO = "INFO".toCharArray();
73   private static char[] WARNING = "WARNING".toCharArray();
74   private static char[] ERROR = "ERROR".toCharArray();
75   private static char[] FATAL = "FATAL".toCharArray();
76   private static char[] UNKNOWN_LEVEL = "UNKNOWN".toCharArray();
77
78   /**
79    * Private constructor so nobody goes around creating these.
80    */

81   public HTMLSyslogTextFormatter()
82   {
83     super();
84   }
85
86   /**
87    * Set the stylesheet to use.
88    */

89   public void setStyleSheet(String JavaDoc styleSheet)
90   {
91     this.styleSheet = styleSheet;
92   }
93
94   /**
95    * Get the stylesheet being used.
96    */

97   public String JavaDoc getStyleSheet()
98   {
99     return this.styleSheet;
100   }
101
102   protected char[] getStringForLevel(int level)
103   {
104     switch (level)
105     {
106       case Syslog.DEBUG: return DEBUG;
107       case Syslog.INFO: return INFO;
108       case Syslog.WARNING: return WARNING;
109       case Syslog.ERROR: return ERROR;
110       case Syslog.FATAL: return FATAL;
111       default: return UNKNOWN_LEVEL;
112     }
113   }
114
115   /**
116    * Format a log entry.
117    */

118   public void formatLogEntry(StringBuffer JavaDoc b, SyslogMessage message)
119   {
120     int columns = 0;
121
122     b.append("<TR>\n");
123
124     b.append("<TD CLASS=\"SYSLOG-DATE\">");
125     b.append(formatDate(message.time));
126     b.append("</TD>\n");
127     columns++;
128
129     char[] level = getStringForLevel(message.level);
130     b.append("<TD CLASS=\"SYSLOG-LEVEL-");
131     b.append(level);
132     b.append("\">");
133     b.append(level);
134     b.append("</TD>\n");
135     columns++;
136
137     if (getShowChannel())
138     {
139       b.append("<TD CLASS=\"SYSLOG-CHANNEL\">");
140       if (message.channel.equals(Syslog.ALL_CHANNEL))
141         b.append("ALL_CHANNEL");
142       else if (message.channel.equals(Syslog.DEFAULT_CHANNEL))
143         b.append("DEFAULT_CHANNEL");
144       else
145         b.append(message.channel);
146       b.append("</TD>\n");
147       columns++;
148     }
149
150     if (getShowHostName())
151     {
152       b.append("<TD CLASS=\"SYSLOG-HOSTNAME\">");
153       b.append(getHostname(message.host));
154       b.append("</TD>\n");
155       columns++;
156     }
157
158     if (getShowThreadName())
159     {
160       b.append("<TD CLASS=\"SYSLOG-THREADNAME\">");
161       b.append(message.threadName);
162       b.append("</TD>\n");
163       columns++;
164     }
165
166     b.append("<TD CLASS=\"SYSLOG-LOGGERCLASS\">");
167     //b.append(trimFromLastPeriod(message.loggerClassname));
168
formatLoggerClassName(b, message);
169     b.append("</TD>\n");
170     columns++;
171
172     String JavaDoc msg = null;
173     if (message.msg != null)
174       msg = message.msg.toString();
175     else
176       msg = "&nbsp;";
177
178     b.append("<TD CLASS=\"SYSLOG-MESSAGE\">");
179     b.append(msg);
180     b.append("</TD>\n");
181     columns++;
182
183     b.append("</TR>\n");
184
185     if (message.detail != null)
186     {
187       b.append("<TR>\n");
188       b.append("<TD>&nbsp;</TD>\n");
189       b.append("<TD CLASS=\"SYSLOG-DETAIL\" COLSPAN=\""
190         + (columns -1) + "\"><PRE>");
191       int len = b.length();
192       formatMessageDetail(b, message);
193       if (b.length() == len)
194         b.append("&nbsp;");
195       b.append("</PRE></TD>\n</TR>\n");
196     }
197   }
198
199   /**
200    * Get the log header. This simply returns an empty string.
201    */

202   public String JavaDoc getLogHeader()
203   {
204     StringBuffer JavaDoc b = new StringBuffer JavaDoc(64);
205     b.append("<HTML>\n");
206     b.append("<HEAD>\n");
207     b.append("<TITLE>");
208     b.append(Syslog.getResourceString(MessageConstants.HTML_OUTPUT_MESSAGE));
209     b.append("</TITLE>\n");
210     b.append("<LINK REL=\"stylesheet\" TYPE=\"text/css\" HREF=\"");
211     b.append(getStyleSheet());
212     b.append("\" TITLE=\"Style\">\n");
213     b.append("</HEAD>\n");
214     b.append("<BODY BGCOLOR=\"#FFFFFF\">\n");
215     b.append("<TABLE BORDER=\"1\" CELLPADDING=\"2\" CELLSPACING=\"0\">\n");
216     return b.toString();
217   }
218
219   /**
220    * Get the log footer. This simply returns an empty string.
221    */

222   public String JavaDoc getLogFooter()
223   {
224     StringBuffer JavaDoc b = new StringBuffer JavaDoc(64);
225     b.append("</TABLE>\n");
226     b.append("</BODY>\n");
227     b.append("</HTML>\n");
228     return b.toString();
229   }
230 }
231
Popular Tags