Package org.gudy.azureus2.pluginsimpl.local.logging

Source Code of org.gudy.azureus2.pluginsimpl.local.logging.LoggerChannelImpl

/*
* File    : LoggerChannelImpl.java
* Created : 28-Dec-2003
* By      : parg
*
* Azureus - a Java Bittorrent client
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details ( see the LICENSE file ).
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

package org.gudy.azureus2.pluginsimpl.local.logging;

import org.gudy.azureus2.core3.logging.LogAlert;
import org.gudy.azureus2.core3.logging.LogRelation;

/**
* @author parg
*
*/

import java.util.*;

import org.gudy.azureus2.plugins.logging.*;
import org.gudy.azureus2.plugins.logging.Logger;
import org.gudy.azureus2.core3.logging.*;
import org.gudy.azureus2.core3.util.AEDiagnostics;
import org.gudy.azureus2.core3.util.AEDiagnosticsLogger;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.core3.util.FileUtil;

public class
LoggerChannelImpl
  implements LoggerChannel
{
  private static final LogIDs LOGID = org.gudy.azureus2.core3.logging.LogIDs.PLUGIN;
  final private Logger    logger;
  final private String    name;
  final private boolean    timestamp;
  final boolean    no_output;
  final List    listeners = new ArrayList();
 
  private AEDiagnosticsLogger  diagnostic_logger;
 
  protected
  LoggerChannelImpl(
    Logger    _logger,
    String    _name,
    boolean    _timestamp,
    boolean    _no_output )
  {
    logger    = _logger;
    name    = _name;
    timestamp  = _timestamp;
    no_output  = _no_output;
  }
   
  public Logger
  getLogger()
  {
    return( logger );
  }
 
  public String
  getName()
  {
    return( name );
  }
 
  public boolean
  isEnabled()
  {
    return org.gudy.azureus2.core3.logging.Logger.isEnabled();
  }

  public void
  setDiagnostic()
  {
    setDiagnostic( 0, true );
  }
 
  public void
  setForce(
    boolean forceToFile)
  {
    diagnostic_logger.setForced( forceToFile );
  }
 
  public boolean
  getForce()
  {
    return( diagnostic_logger.isForced());
  }
 
  public void
  setDiagnostic(
    long  max_file_size,
    boolean  diag_timestamp )
  {
    if ( diagnostic_logger == null ){
     
      diagnostic_logger = AEDiagnostics.getLogger( FileUtil.convertOSSpecificChars( name, false ));
     
      if ( max_file_size > 0 ){
       
        diagnostic_logger.setMaxFileSize((int)max_file_size );
      }
           
      diagnostic_logger.enableTimeStamp( !timestamp && diag_timestamp );
     
      addListener(
        new LoggerChannelListener()
        {
          public void
          messageLogged(
            int    type,
            String  content )
          {
            diagnostic_logger.log( content );
          }
         
          public void
          messageLogged(
            String    str,
            Throwable  error )
          {
            diagnostic_logger.log( str );
            diagnostic_logger.log( error );
          }
        });
    }
  }
 
  private int LogTypePluginToCore(int pluginLogType) {
    switch (pluginLogType) {
      case LT_INFORMATION:
        return LogEvent.LT_INFORMATION;
      case LT_WARNING:
        return LogEvent.LT_WARNING;
      case LT_ERROR:
        return LogEvent.LT_ERROR;
    }
    return LogEvent.LT_INFORMATION;
  }
 
  private void notifyListeners(int log_type, String data) {
    for (int i = 0; i < listeners.size(); i++) {
      try {
        LoggerChannelListener l = (LoggerChannelListener) listeners.get(i);
        l.messageLogged(log_type, data);
      } catch (Throwable e) {
        Debug.printStackTrace(e);
      }
    }
  }
 
  private void notifyListeners(String listenersText, Throwable error) {
    for (int i = 0; i < listeners.size(); i++) {
      try {
        LoggerChannelListener l = (LoggerChannelListener) listeners.get(i);
        l.messageLogged(listenersText, error);
      } catch (Throwable e) {
        Debug.printStackTrace(e);
      }
    }
  }
 
  public void log(int log_type, String data) {
    notifyListeners(log_type, addTimeStamp(data));

    if (isEnabled() && !no_output) {
      data = "[" + name + "] " + data;

      org.gudy.azureus2.core3.logging.Logger.log(new LogEvent(LOGID,
          LogTypePluginToCore(log_type), data));
    }
  }
 
  public void
  log(
    String  data )
  {
    log( LT_INFORMATION, data );
  }
 
  public void log(Object[] relatedTo, int log_type, String data) {

    String listenerData;
    if (relatedTo != null) {
      StringBuffer text = new StringBuffer();
      for (int i = 0; i < relatedTo.length; i++) {
        Object obj = relatedTo[i];

        if (obj == null)
          continue;

        if (i > 0)
          text.append("; ");

        if (obj instanceof LogRelation) {
          text.append(((LogRelation) obj).getRelationText());
        } else {
          text.append("RelatedTo[")
              .append(obj.toString())
              .append("]");
        }
      }
     
      listenerData = text.toString() + "] " + data;
    }else{
      listenerData = data;
    }
   
    notifyListeners(log_type, addTimeStamp(listenerData));
   
    if (isEnabled() && !no_output) {
      data = "[" + name + "] " + data;
      org.gudy.azureus2.core3.logging.Logger.log(new LogEvent(relatedTo, LOGID,
          LogTypePluginToCore(log_type), data));
    }
  }

  public void log(Object relatedTo, int log_type, String data) {
    log(new Object[] { relatedTo }, log_type, data);
  }
 
  public void log(Throwable error)
  {
    log("", error);
  }

  public void log(String str, Throwable error) {
    notifyListeners(str.equals("") ? "" : addTimeStamp(str), error);

    if (!no_output) {
      LogEvent event = new LogEvent(LOGID, "[" + name + "] " + str, error);
      org.gudy.azureus2.core3.logging.Logger.log(event);
    }
  }

  public void log(Object[] relatedTo, String str, Throwable error) {
    notifyListeners(str.equals("") ? "" : addTimeStamp(str), error);

    if (isEnabled() && !no_output) {
      str = "[" + name + "] " + str;
     
      org.gudy.azureus2.core3.logging.Logger.log(new LogEvent(relatedTo, LOGID,
          str, error));
    }
  }

  public void log(Object relatedTo, String str, Throwable error) {
    log(new Object[] { relatedTo }, str, error);
  }
 
  public void log(Object[] relatedTo, String data) {
    log(relatedTo, LT_INFORMATION, data);
  }

  public void log(Object relatedTo, String data) {
    log(relatedTo, LT_INFORMATION, data);
  }


  // Alert Functions
  // ===============
 
  protected void logAlert(int alert_type, String message, boolean repeatable) {
    // output as log message to any listeners
    for (int i = 0; i < listeners.size(); i++) {
      try {
        ((LoggerChannelListener) listeners.get(i)).messageLogged(alert_type,
            addTimeStamp(message));
      } catch (Throwable e) {
        Debug.printStackTrace(e);
      }
    }

    if (!no_output) {
      int at;

      switch (alert_type) {
        case LoggerChannel.LT_INFORMATION: {
          at = LogAlert.AT_INFORMATION;
          break;
        }
        case LoggerChannel.LT_WARNING: {
          at = LogAlert.AT_WARNING;
          break;
        }
        default: {
          at = LogAlert.AT_ERROR;
          break;
        }
      }

      org.gudy.azureus2.core3.logging.Logger.log(new LogAlert(repeatable, at,
          message));
    }
  }
 
  public void
  logAlert(
    int      alert_type,
    String    message )
  {
    logAlert( alert_type, message, false );
  }
 
  public void
  logAlertRepeatable(
    int      alert_type,
    String    message )
  {
    logAlert( alert_type, message, true );
  }
 
  public void
  logAlert(
    String    message,
    Throwable   e )
  {
    for (int i=0;i<listeners.size();i++){
     
      try{
        ((LoggerChannelListener)listeners.get(i)).messageLogged( addTimeStamp( message ), e );
 
      }catch( Throwable f ){
       
        Debug.printStackTrace( f );
      }
    } 

    if ( !no_output ){
      org.gudy.azureus2.core3.logging.Logger.log(new LogAlert(
          LogAlert.UNREPEATABLE, message, e));
    }
  } 
 
  public void
  logAlertRepeatable(
    String    message,
    Throwable   e )
  {
    for (int i=0;i<listeners.size();i++){
     
      try{
        ((LoggerChannelListener)listeners.get(i)).messageLogged( addTimeStamp( message ), e );
 
      }catch( Throwable f ){
       
        Debug.printStackTrace( f );
      }
    } 
   
    if ( !no_output ){
      org.gudy.azureus2.core3.logging.Logger.log(new LogAlert(
          LogAlert.REPEATABLE, message, e));
    }
  }
 
  // Misc. Functions
  // ===============
 
  public void
  addListener(
    LoggerChannelListener  l )
  {
    listeners.add( l );
  }
 
  public void
  removeListener(
    LoggerChannelListener  l )
  {
    listeners.remove(l);
  }
 
  protected String
  addTimeStamp(
    String  data )
  {
    if ( timestamp  ){
     
      return( getTimeStamp() + data );
     
    }else{
     
      return( data );
    }
  }
 
  protected String
  getTimeStamp()
  {
    Calendar now = GregorianCalendar.getInstance();
   
    String timeStamp =
      "[" + now.get(Calendar.HOUR_OF_DAY)+ ":" + format(now.get(Calendar.MINUTE)) + ":" + format(now.get(Calendar.SECOND)) + "] ";       

    return( timeStamp );
  }
 
  private static String
  format(
    int   n )
  {
    if (n < 10){
      
      return( "0" + n );
     }
   
     return( String.valueOf(n));
  }
}
TOP

Related Classes of org.gudy.azureus2.pluginsimpl.local.logging.LoggerChannelImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.