1 14 package org.compiere.util; 15 16 import java.util.*; 17 import java.sql.Timestamp ; 18 19 import org.apache.log4j.*; 20 import org.apache.log4j.spi.*; 21 22 29 public class LogBuffer extends AppenderSkeleton 30 { 31 35 public static LogBuffer get() 36 { 37 if (s_appender == null) 38 s_appender = new LogBuffer(); 39 return s_appender; 40 } 41 42 43 private static LogBuffer s_appender; 44 45 46 47 50 public LogBuffer() 51 { 52 super(); 53 this.setThreshold(Level.WARN); 54 for (int i = 0; i < SIZE; i++) 56 m_buffer.add(null); 57 } 59 60 private static final int SIZE = 64; 61 62 private ArrayList m_buffer = new ArrayList (SIZE); 63 64 private int m_index = 0; 65 66 69 public boolean requiresLayout() 70 { 71 return false; 72 } 74 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 } 90 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 } 103 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 value = m_buffer.get(index--); 116 if (value != null) 117 list.add(value); 118 if (index < 0) 119 index = SIZE - 1; 120 } 121 } 122 LoggingEvent[] retValue = new LoggingEvent[list.size()]; 124 list.toArray(retValue); 125 return retValue; 126 } 128 131 public void close() 132 { 133 m_buffer = null; 134 } 136 137 138 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 cn.add("Throwable"); 150 cn.add("Trace"); 151 return cn; 152 } 154 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 (events[i].timeStamp)); 168 cols.add(events[i].getLevel()); 169 cols.add(events[i].getLoggerName()); 170 cols.add(events[i].getMessage()); 171 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 rows.add(cols); 188 } 189 return rows; 190 } 192 } | Popular Tags |