Package com.prupe.mcpatcher

Source Code of com.prupe.mcpatcher.MCLogger

package com.prupe.mcpatcher;

import com.prupe.mcpatcher.MCLogger$1;
import com.prupe.mcpatcher.MCLogger$ErrorLevel;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;

public class MCLogger {
  private static final HashMap<String, MCLogger> allLoggers = new HashMap();
  public static final Level ERROR = new MCLogger$ErrorLevel();
  private static final long FLOOD_INTERVAL = 1000L;
  private static final long FLOOD_REPORT_INTERVAL = 5000L;
  private static final int FLOOD_LIMIT = 100;
  private static final int FLOOD_LEVEL = Level.CONFIG.intValue();
  private final String logPrefix;
  private final Logger logger;
  private boolean flooding;
  private long lastFloodReport;
  private int floodCount;
  private long lastMessage = System.currentTimeMillis();
  private boolean enabled = false;

  public static MCLogger getLogger(String category) {
    return getLogger(category, category);
  }

  public static synchronized MCLogger getLogger(String category, String logPrefix) {
    MCLogger logger = (MCLogger)allLoggers.get(category);

    if (logger == null) {
      logger = new MCLogger(category, logPrefix);
      allLoggers.put(category, logger);
    }

    return logger;
  }

  private MCLogger(String category, String logPrefix) {
    this.logPrefix = logPrefix;
    this.logger = Logger.getLogger(category);
    this.logger.setLevel(Config.getLogLevel(category));
    this.logger.setUseParentHandlers(false);
    this.logger.addHandler(new MCLogger$1(this));
  }

  private boolean checkFlood() {
    long now = System.currentTimeMillis();
    boolean showFloodMessage = false;

    if (now - this.lastMessage > 1000L) {
      if (this.flooding) {
        this.reportFlooding(now);
        this.flooding = false;
      } else {
        this.floodCount = 0;
      }
    } else if (this.flooding && now - this.lastFloodReport > 5000L) {
      this.reportFlooding(now);
      showFloodMessage = true;
    }

    this.lastMessage = now;
    ++this.floodCount;

    if (this.flooding) {
      return showFloodMessage;
    } else if (this.floodCount > 100) {
      this.flooding = true;
      this.lastFloodReport = now;
      this.reportFlooding(now);
      return false;
    } else {
      return true;
    }
  }

  private void reportFlooding(long now) {
    if (this.floodCount > 0) {
      this.logger.log(Level.WARNING, String.format("%d flood messages dropped in the last %ds", new Object[] {Integer.valueOf(this.floodCount), Long.valueOf((now - this.lastFloodReport) / 1000L)}));
    }

    this.floodCount = 0;
    this.lastFloodReport = now;
  }

  public boolean isLoggable(Level level) {
    return this.logger.isLoggable(level);
  }

  public void setLevel(Level level) {
    this.logger.setLevel(level);
  }

  public void log(Level level, String format, Object ... params) {
    if (this.isLoggable(level)) {
      if (level.intValue() >= FLOOD_LEVEL && !this.checkFlood()) {
        return;
      }

      this.logger.log(level, String.format(format, params));
    }
  }

  public void severe(String format, Object ... params) {
    if (enabled) {
      this.log(Level.SEVERE, format, params);
    }
  }

  public void error(String format, Object ... params) {
    if (enabled) {
      this.log(ERROR, format, params);
    }
  }

  public void warning(String format, Object ... params) {
    if (enabled) {
      this.log(Level.WARNING, format, params);
    }
  }

  public void info(String format, Object ... params) {
    if (enabled) {
      this.log(Level.INFO, format, params);
    }
  }

  public void config(String format, Object ... params) {
    if (enabled) {
      this.log(Level.CONFIG, format, params);
    }
  }

  public void fine(String format, Object ... params) {
    if (enabled) {
      this.log(Level.FINE, format, params);
    }
  }

  public void finer(String format, Object ... params) {
    if (enabled) {
      this.log(Level.FINER, format, params);
    }
  }

  public void finest(String format, Object ... params) {
    if (enabled) {
      this.log(Level.FINEST, format, params);
    }
  }

  static String access$000(MCLogger x0) {
    return x0.logPrefix;
  }
}
TOP

Related Classes of com.prupe.mcpatcher.MCLogger

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.