Package net.sf.robocode.io

Source Code of net.sf.robocode.io.Logger

/**
* Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://robocode.sourceforge.net/license/epl-v10.html
*/
package net.sf.robocode.io;


import net.sf.robocode.security.HiddenAccess;
import net.sf.robocode.util.StringUtil;
import robocode.control.events.BattleErrorEvent;
import robocode.control.events.BattleMessageEvent;
import robocode.control.events.IBattleListener;

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;


/**
* This is a class used for logging.
*
* @author Flemming N. Larsen (original)
* @author Mathew A. Nelson (original)
*/
public class Logger {
  public static final PrintStream realOut = System.out;
  public static final PrintStream realErr = System.err;

  private static IBattleListener logListener;
 
  private final static StringBuffer logBuffer = new StringBuffer();

  public static void setLogListener(IBattleListener logListener) {
    Logger.logListener = logListener;
  }

  public static void logMessage(String s) {
    logMessage(s, true);
  }

  public static void logMessage(String s, boolean newline) {
    if (logListener == null) {
      if (System.getProperty("logMessages", "true").equalsIgnoreCase("true")) {
        s = StringUtil.toBasicLatin(s);
        if (newline) {
          realOut.println(s);
        } else {
          realOut.print(s);
          realOut.flush();
        }
      }
    } else {
      synchronized (logBuffer) {
        if (!HiddenAccess.isSafeThread()) {
          // we just queue it, to not let unsafe thread travel thru system
          logBuffer.append(s);
          logBuffer.append("\n");
        } else if (newline) {
          logListener.onBattleMessage(new BattleMessageEvent(logBuffer + s));
          logBuffer.setLength(0);
        } else {
          logBuffer.append(s);
        }
      }
    }
  }

  public static void logWarning(String s) {
    logMessage("Warning: " + s, true);
  }

  public static void logError(String message, Throwable t) {
    logError(message + ":\n" + toStackTraceString(t));
  }

  public static void logError(Throwable t) {
    logError(toStackTraceString(t));
  }

  public static void logError(String s) {
    if (logListener == null) {
      if (System.getProperty("logErrors", "true").equalsIgnoreCase("true")) {
        s = StringUtil.toBasicLatin(s);
        realErr.println(s);
      }
    } else {
      logListener.onBattleError(new BattleErrorEvent(s));
    }
  }

  private static String toStackTraceString(Throwable t) {
    if (t == null) {
      return "";
    }
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    PrintStream ps = new PrintStream(baos);

    t.printStackTrace(ps);
    ps.close();
    return baos.toString();
  }

  public static void printlnToRobotsConsole(String s) {
    // this will get redirected to robot's console
    System.out.println(s);
  }
}
TOP

Related Classes of net.sf.robocode.io.Logger

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.