Exemplo n.º 1
0
  /**
   * Enables logging for given logger name and given severity. Everything logged to the object is
   * going to go to the returned CharSequence object which can be used to check the content or
   * converted <code>toString</code>.
   *
   * <p>The logging stops when the returned object is garbage collected.
   *
   * @param loggerName the name to capture logging for
   * @param level the level of details one wants to get
   * @return character sequence which can be check or converted to string
   * @since 1.27
   */
  public static CharSequence enable(String loggerName, Level level) {
    IL il = new IL(false);
    class MyPs extends PrintStream implements CharSequence {
      private ByteArrayOutputStream os;

      public MyPs() {
        this(new ByteArrayOutputStream());
      }

      private MyPs(ByteArrayOutputStream arr) {
        super(arr);
        os = arr;
      }

      public int length() {
        return toString().length();
      }

      public char charAt(int index) {
        return toString().charAt(index);
      }

      public CharSequence subSequence(int start, int end) {
        return toString().subSequence(start, end);
      }

      @Override
      public String toString() {
        return os.toString();
      }
    }

    Logger l = Logger.getLogger(loggerName);
    if (l.getLevel() == null || l.getLevel().intValue() > level.intValue()) {
      l.setLevel(level);
    }
    MyPs ps = new MyPs();
    Log log = new Log(l, ps);
    log.setLevel(level);
    l.addHandler(log);
    return ps;
  }