MemoryLogger.java
上传用户:liming6160
上传日期:2022-06-07
资源大小:785k
文件大小:4k
源码类别:

J2ME

开发平台:

Java

  1. /*
  2.  *    Copyright (C) 2001 - 2007 Mobicom-Kavkaz, Inc
  3.  *    MFRadio - stream radio client for Java 2 Micro Edition
  4.  *    
  5.  *    Visit the project page at: http://mfradio.sourceforge.net
  6.  *
  7.  *    This program is free software; you can redistribute it and/or modify
  8.  *    it under the terms of the GNU General Public License as published by
  9.  *    the Free Software Foundation; either version 2 of the License, or
  10.  *    (at your option) any later version.
  11.  *
  12.  *    This program is distributed in the hope that it will be useful,
  13.  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.  *    GNU General Public License for more details.
  16.  *
  17.  *    You should have received a copy of the GNU General Public License
  18.  *    along with this program; if not, write to the Free Software
  19.  *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20.  *
  21.  *    Java (TM) and all Java (TM)-based marks are a trademark or 
  22.  *    registered trademark of Sun Microsystems, Inc, in the United States 
  23.  *    and other countries.
  24.  */
  25. package ru.mobicomk.mfradio.util;
  26. import java.util.Date;
  27. import ru.mobicomk.mfradio.controller.UIController;
  28. import ru.mobicomk.mfradio.iface.Logger;
  29. /**
  30.  * @author  Roman Bondarenko
  31.  */
  32. public class MemoryLogger 
  33.     implements Logger {
  34.     
  35.     // Members /////////////////////////////////////////////////////////////////
  36.     //
  37.     protected static final int MAX_LOG_SIZE = 1024 * 3;
  38.     
  39.     protected StringBuffer logBuffer_;
  40.     protected UIController controller_;
  41.     
  42.     
  43.     // Public iface ////////////////////////////////////////////////////////////
  44.     //
  45.     
  46.     public MemoryLogger(UIController controller) {
  47.         controller_ = controller;
  48.         logBuffer_ = new StringBuffer();
  49.         addTime();
  50.     }
  51.     
  52.     public String toString() {
  53.         return logBuffer_.toString();
  54.     }
  55.     
  56.     // Logger iface ////////////////////////////////////////////////////////////
  57.     //
  58.     public void log(String msg) {
  59.         String thread = Thread.currentThread().toString();
  60.         String logItem = "[" + thread.substring(14, thread.length() - 1) + "] " + msg;
  61.         
  62.         System.out.println(logItem);
  63.      
  64.         synchronized (logBuffer_) {
  65.             logBuffer_.append(logItem + "n");
  66.         }
  67.         
  68.         checkSave();
  69.     }
  70.     public void log(Throwable t) {
  71.         String thread = Thread.currentThread().toString();
  72.         String logItem = "[" + thread.substring(14, thread.length() - 1) + "] " + t.getMessage();
  73.         
  74.         System.out.println(logItem);
  75.         t.printStackTrace();
  76.         
  77.         synchronized (logBuffer_) {
  78.             logBuffer_.append(logItem + "n");
  79.         }
  80.         
  81.         checkSave();              
  82.     }
  83.     
  84.     public void flush () {
  85.         logBuffer_.delete(0, logBuffer_.length());
  86.     }
  87.     
  88.     
  89.     // Privates ////////////////////////////////////////////////////////////////
  90.     //
  91.     protected void addTime() {
  92.         Date now = new Date();
  93.         logBuffer_.append("nn==== " + now.toString()+ "nn");
  94.     }
  95.     
  96.     protected void checkSave() {
  97.         if (logBuffer_.length() > MAX_LOG_SIZE) {
  98.             synchronized (logBuffer_) {
  99.                 String log2Save = logBuffer_.toString();
  100.                 logBuffer_.delete(0, logBuffer_.length());
  101.                 addTime();
  102.                 logBuffer_.append(log2Save.substring((int)(MAX_LOG_SIZE / 3)));
  103.                 log2Save = null;
  104.             }
  105.         }
  106.     }
  107. }