⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jzjlogger.java

📁 基于javazip的二进制发表发布版,也就是winzip的java版本
💻 JAVA
字号:
package org.jr.jzj;

/**
 * <p>Copyright: Copyright (c) 2002-2003</p>
 * <p>Company: JavaResearch(http://www.javaresearch.org)</p>
 * <p>最后更新日期:2003年1月9日
 * @author Cherami,Barney,Brain
 * @version 0.8
 */

import java.io.*;
import java.util.*;
import java.util.logging.*;
import java.util.prefs.*;

/**
 * 系统的日志管理器,负责整个系统的日志的控制和维护。
 * <p><b>由于将管理器和类实例放在了同一个类来表达,因此不是很合适,以后会进行重构和分离。</b>
 * <p>由于有很多的日志工具,因此使用这个类进行封装方便以后更改底层的实现方式。
 * <p>目前使用的是JDK1.4的java.util.logging.Logger类。
 */
public class JZJLogger {
  private static FileHandler logFileHandler; //日志文件处理器
  private static Level level; //日志记录级别
  private static ArrayList loggers = new ArrayList(); //管理器管理的所有日志类实例列表
  private static boolean inited = false; //日志管理器是否完成初始化标志
  private Logger logger; //实际的日志类实例
  private static JZJLogger globalLogger; //全局日志类实例,完成系统信息的记录
  private static String logFileName = "JZJlogs.log"; //日志文件的文件名
  private String name; //日志类的类名
  private static boolean isDebugable = true; //是否输出调试信息
  Preferences preference = JZipJar.preference;
  public static final int OFF = 0;
  public static final int ALL = 1;
  public static final int WARNING = 4;
  public static final int ERROR = 8;
  /**
   * 构造方法,在管理器没有初始化时应该进行缺省初始化。
   * @param c 日志实例的类名
   */
  public JZJLogger(Class c) {
    //日志管理器在没有初始化时进行缺省初始化
    if (!inited) {
      init(null, ALL, true);
    }
    name = c.getName();
    logger = Logger.getLogger(name);
    logger.addHandler(logFileHandler);
    loggers.add(logger);
    logger.setLevel(level);
    if (globalLogger != null) {
      globalLogger.info("new JZJLogger:" + name);
    }
  }

  /**
   * 得到日志实例的名称(类名)。
   * @return 日志实例的名称
   */
  public String getName() {
    return name;
  }

  /**
   * 日志管理器的初始化方法。
   * @param fileName 日志文件的文件名
   * @param level 日志记录的级别
   * @throws IOException 在日志文件生成出错的情况下抛出异常
   */
  public static void init(String fileName, int level) {
    init(fileName, level, true);
  }

  /**
   * 日志管理器的初始化方法。
   * @param fileName 日志文件的文件名
   * @param level 日志记录的级别
   * @param isDebugable 是否输出调试信息
   * @throws IOException 在日志文件生成出错的情况下抛出异常
   */
  public static void init(String fileName, int level, boolean isDebugable) {
    if (!inited) {
      try {
        setFileHandler(fileName);
      }
      catch (IOException e) {

      }
      setLevel(getLevel(level));
      JZJLogger.isDebugable = isDebugable;
      inited = true;
      globalLogger = new JZJLogger(JZJLogger.class);
      globalLogger.info("JZJLogger initialize." + "\tlog file:" + fileName +
                        ".\tlevel:" + level);
    }
  }

  private static Level getLevel(int level) {
    switch (level) {
      case OFF:
        return Level.OFF;
      case ALL:
        return Level.ALL;
      case WARNING:
        return Level.WARNING;
      case ERROR:
        return Level.SEVERE;
      default:
        return Level.OFF;
    }

  }

  /**
   * 得到日志实例的实际的底层的日志类实例。
   * @return 实际的底层的日志类实例
   */
  protected Logger getLogger() {
    return logger;
  }

  /**
   * 设置日志信息的格式。
   * @param formatter 格式实例
   */
  public static void setFormatter(Formatter formatter) {
    logFileHandler.setFormatter(formatter);
  }

  /**
   * 设置系统的日志文件处理器。
   * @param fileName 日志文件的文件名
   * @throws IOException 创建日志文件出错时抛出此异常
   */
  private static void setFileHandler(String fileName) throws IOException {
    setFileHandler(fileName, new SimpleFormatter());
  }

  /**
   * 设置系统的日志文件处理器。
   * @param fileName 日志文件的文件名
   * @param formatter 格式实例
   * @throws IOException 创建日志文件出错时抛出此异常
   */
  private static void setFileHandler(String fileName, Formatter formatter) throws
      IOException {
    if (fileName != null) {
      logFileName = fileName;
    }
    logFileHandler = new FileHandler(logFileName);
    setFormatter(formatter);
  }

  /**
   * 设置日志记录的级别。
   * @param level 日志记录的级别
   */
  public static void setLevel(Level level) {
    JZJLogger.level = level;
    Iterator iterator = loggers.iterator();
    while (iterator.hasNext()) {
      JZJLogger log = (JZJLogger) iterator.next();
      log.logger.setLevel(level);
    }

  }

  /**
   * 将信息作为错误写入日志。
   * @param message 错误信息
   */
  public void error(String message) {
    logger.severe(message);
  }

  /**
   * 将信息作为警告写入日志。
   * @param message 警告信息
   */
  public void warning(String message) {
    logger.warning(message);
  }

  /**
   * 将信息写入日志。
   * @param message 信息
   */

  public void info(String message) {
    logger.info(message);
  }

  /**
   * 是否输出调试信息并写入日志。
   * @return 输出时返回true,否则返回false
   */
  public static boolean isDebugable() {
    return isDebugable;
  }

  /**
   * 设置是否输出调试信息并写入日志。
   * @param isDebugable 是否输出调试信息并写入日志
   */
  public static void setDebugable(boolean isDebugable) {
    JZJLogger.isDebugable = isDebugable;
  }

  /**
   * 将调试信息输出并写到日志,但是如果管理器不运行输出调试信息的情况下此方法没有任何作用。
   * @param message 调试信息
   */
  public void debug(String message) {
    if (isDebugable) {
      logger.info(message);
    }
  }

  /**
   * 将调试信息输出并写到日志,但是如果管理器不运行输出调试信息的情况下此方法没有任何作用。
   * @param message 整型的调试信息
   */
  public void debug(int message) {
    if (isDebugable) {
      logger.info(String.valueOf(message));
    }
  }

  /**
   * 将调试信息输出并写到日志,但是如果管理器不运行输出调试信息的情况下此方法没有任何作用。
   * @param message 调试信息,实际写入的是对象的toString方法得到的字符串
   */
  public void debug(Object message) {
    if (isDebugable) {
      if (message != null) {
        logger.info(message.toString());
      }
      else {
        logger.info("null");
      }
    }
  }

  //TODO 其他的debug方法,需要一整套,目前只使用到以上几个
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -