KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > compiere > util > LogBuffer


1 /******************************************************************************
2  * The contents of this file are subject to the Compiere License Version 1.1
3  * ("License"); You may not use this file except in compliance with the License
4  * You may obtain a copy of the License at http://www.compiere.org/license.html
5  * Software distributed under the License is distributed on an "AS IS" basis,
6  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
7  * the specific language governing rights and limitations under the License.
8  * The Original Code is Compiere ERP & CRM Business Solution
9  * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc.
10  * Portions created by Jorg Janke are Copyright (C) 1999-2003 Jorg Janke, parts
11  * created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved.
12  * Contributor(s): ______________________________________.
13  *****************************************************************************/

14 package org.compiere.util;
15
16 import java.util.*;
17 import java.sql.Timestamp JavaDoc;
18
19 import org.apache.log4j.*;
20 import org.apache.log4j.spi.*;
21
22 /**
23  * Client Log Buffer.
24  * Stores the most recent 128 events (Warn/Error)
25  *
26  * @author Jorg Janke
27  * @version $Id: LogBuffer.java,v 1.2 2003/10/31 05:30:56 jjanke Exp $
28  */

29 public class LogBuffer extends AppenderSkeleton
30 {
31     /**
32      * Get Client Log Appender
33      * @return appender
34      */

35     public static LogBuffer get()
36     {
37         if (s_appender == null)
38         s_appender = new LogBuffer();
39         return s_appender;
40     }
41
42     /** Appender */
43     private static LogBuffer s_appender;
44
45     /*************************************************************************/
46
47     /**
48      * Constructor
49      */

50     public LogBuffer()
51     {
52         super();
53         this.setThreshold(Level.WARN);
54         // Init Buffer
55
for (int i = 0; i < SIZE; i++)
56             m_buffer.add(null);
57     } // LogAppender
58

59     /** Buffer Size */
60     private static final int SIZE = 64;
61     /** The Buffer */
62     private ArrayList m_buffer = new ArrayList (SIZE);
63     /** Buffer last used Index */
64     private int m_index = 0;
65
66     /**
67      * No Layout required
68      */

69     public boolean requiresLayout()
70     {
71         return false;
72     } // requiresLayout
73

74     /**
75      * Append Log
76      */

77     public void append (LoggingEvent event)
78     {
79         if (m_buffer == null)
80             return;
81         synchronized (m_buffer)
82         {
83             m_index++;
84             if (m_index == SIZE)
85                 m_index = 0;
86             m_buffer.set(m_index, event);
87         }
88     } // append
89

90     /**
91      * Reset Buffer
92      */

93     public void resetBuffer()
94     {
95         synchronized (m_buffer)
96         {
97             for (int i = 0; i < SIZE; i++)
98                 m_buffer.set(i, null);
99             m_index = 0;
100         }
101     } // resetBuffer
102

103     /**
104      * Get Array of events with most recent first
105      * @return array of events
106      */

107     public LoggingEvent[] getEvents()
108     {
109         ArrayList list = new ArrayList();
110         synchronized (m_buffer)
111         {
112             int index = m_index;
113             for (int i = 0; i < SIZE; i++)
114             {
115                 Object JavaDoc value = m_buffer.get(index--);
116                 if (value != null)
117                     list.add(value);
118                 if (index < 0)
119                     index = SIZE - 1;
120             }
121         }
122         // Convert to Array
123
LoggingEvent[] retValue = new LoggingEvent[list.size()];
124         list.toArray(retValue);
125         return retValue;
126     } // getEvents
127

128     /**
129      * Clean up
130      */

131     public void close()
132     {
133         m_buffer = null;
134     } // close
135

136     /*************************************************************************/
137
138     /**
139      * Get ColumnNames of Log Entries
140      */

141     public Vector getColumnNames(Properties ctx)
142     {
143         Vector cn = new Vector();
144         cn.add("Time");
145         cn.add("Level");
146         cn.add("Logger");
147         cn.add("Message");
148         //
149
cn.add("Throwable");
150         cn.add("Trace");
151         return cn;
152     } // getColumnNames
153

154     /**
155      * Get Log Data
156      * @return data array
157      */

158     public Vector getLogData()
159     {
160         LoggingEvent[] events = getEvents();
161         System.out.println("getLogData - " + events.length);
162         Vector rows = new Vector(events.length);
163         
164         for (int i = 0; i < events.length; i++)
165         {
166             Vector cols = new Vector ();
167             cols.add(new Timestamp JavaDoc(events[i].timeStamp));
168             cols.add(events[i].getLevel());
169             cols.add(events[i].getLoggerName());
170             cols.add(events[i].getMessage());
171             //
172
ThrowableInformation ti = events[i].getThrowableInformation();
173             if (ti == null)
174             {
175                 cols.add(null);
176                 cols.add(null);
177             }
178             else
179             {
180                 cols.add(ti.getThrowable());
181                 if (ti.getThrowableStrRep() != null && ti.getThrowableStrRep().length > 1)
182                     cols.add(ti.getThrowableStrRep()[1]);
183                 else
184                     cols.add(null);
185             }
186             //
187
rows.add(cols);
188         }
189         return rows;
190     } // getDaya
191

192 } // LogAppender
193
Popular Tags