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

📄 streamhandler.java

📁 gcc的JAVA模块的源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
       * platform encoding. However, java.io.OutputStreamWriter needs       * another constructor for the default platform encoding, passing       * null would throw an exception.       */      if (encoding == null)	writer = new OutputStreamWriter(out);      else	writer = new OutputStreamWriter(out, encoding);    }  }  /**   * Changes the output stream to which this handler publishes   * logging records.   *   * @throws SecurityException if a security manager exists and   *         the caller is not granted the permission to control   *         the logging infrastructure.   *   * @throws NullPointerException if <code>out</code>   *         is <code>null</code>.   */  protected void setOutputStream(OutputStream out)    throws SecurityException  {    LogManager.getLogManager().checkAccess();    /* Throw a NullPointerException if out is null. */    out.getClass();    try    {      changeWriter(out, getEncoding());    }    catch (UnsupportedEncodingException ex)    {      /* This seems quite unlikely to happen, unless the underlying       * implementation of java.io.OutputStreamWriter changes its       * mind (at runtime) about the set of supported character       * encodings.       */      throw new RuntimeException(ex.getMessage());    }  }  /**   * Publishes a <code>LogRecord</code> to the associated output   * stream, provided the record passes all tests for being loggable.   * The <code>StreamHandler</code> will localize the message of the   * log record and substitute any message parameters.   *   * <p>Most applications do not need to call this method directly.   * Instead, they will use use a {@link Logger}, which will create   * LogRecords and distribute them to registered handlers.   *   * <p>In case of an I/O failure, the <code>ErrorManager</code>   * of this <code>Handler</code> will be informed, but the caller   * of this method will not receive an exception.   *   * <p>If a log record is being published to a   * <code>StreamHandler</code> that has been closed earlier, the Sun   * J2SE 1.4 reference can be observed to silently ignore the   * call. The GNU implementation, however, intentionally behaves   * differently by informing the <code>ErrorManager</code> associated   * with this <code>StreamHandler</code>.  Since the condition   * indicates a programming error, the programmer should be   * informed. It also seems extremely unlikely that any application   * would depend on the exact behavior in this rather obscure,   * erroneous case -- especially since the API specification does not   * prescribe what is supposed to happen.   *    * @param record the log event to be published.   */  public void publish(LogRecord record)  {    String formattedMessage;    if (!isLoggable(record))      return;    if (streamState == STATE_FRESH)    {      try      {        writer.write(formatter.getHead(this));      }      catch (java.io.IOException ex)      {	reportError(null, ex, ErrorManager.WRITE_FAILURE);	return;      }      catch (Exception ex)      {	reportError(null, ex, ErrorManager.GENERIC_FAILURE);	return;      }      streamState = STATE_PUBLISHED;    }    try    {      formattedMessage = formatter.format(record);    }    catch (Exception ex)    {      reportError(null, ex, ErrorManager.FORMAT_FAILURE);      return;    }    try    {      writer.write(formattedMessage);    }    catch (Exception ex)    {      reportError(null, ex, ErrorManager.WRITE_FAILURE);    }  }  /**   * Checks whether or not a <code>LogRecord</code> would be logged   * if it was passed to this <code>StreamHandler</code> for publication.   *   * <p>The <code>StreamHandler</code> implementation first checks   * whether a writer is present and the handler's level is greater   * than or equal to the severity level threshold.  In a second step,   * if a {@link Filter} has been installed, its {@link   * Filter#isLoggable(LogRecord) isLoggable} method is   * invoked. Subclasses of <code>StreamHandler</code> can override   * this method to impose their own constraints.   *   * @param record the <code>LogRecord</code> to be checked.   *   * @return <code>true</code> if <code>record</code> would   *         be published by {@link #publish(LogRecord) publish},   *         <code>false</code> if it would be discarded.   *   * @see #setLevel(Level)   * @see #setFilter(Filter)   * @see Filter#isLoggable(LogRecord)   *   * @throws NullPointerException if <code>record</code> is   *         <code>null</code>.  */  public boolean isLoggable(LogRecord record)  {    return (writer != null) && super.isLoggable(record);  }  /**   * Forces any data that may have been buffered to the underlying   * output device.   *   * <p>In case of an I/O failure, the <code>ErrorManager</code>   * of this <code>Handler</code> will be informed, but the caller   * of this method will not receive an exception.   *   * <p>If a <code>StreamHandler</code> that has been closed earlier   * is closed a second time, the Sun J2SE 1.4 reference can be   * observed to silently ignore the call. The GNU implementation,   * however, intentionally behaves differently by informing the   * <code>ErrorManager</code> associated with this   * <code>StreamHandler</code>.  Since the condition indicates a   * programming error, the programmer should be informed. It also   * seems extremely unlikely that any application would depend on the   * exact behavior in this rather obscure, erroneous case --   * especially since the API specification does not prescribe what is   * supposed to happen.   */  public void flush()  {    try    {      checkOpen();      if (writer != null)        writer.flush();    }    catch (Exception ex)    {      reportError(null, ex, ErrorManager.FLUSH_FAILURE);    }  }  /**   * Closes this <code>StreamHandler</code> after having forced any   * data that may have been buffered to the underlying output   * device.    *   * <p>As soon as <code>close</code> has been called,   * a <code>Handler</code> should not be used anymore. Attempts   * to publish log records, to flush buffers, or to modify the   * <code>Handler</code> in any other way may throw runtime   * exceptions after calling <code>close</code>.</p>   *   * <p>In case of an I/O failure, the <code>ErrorManager</code>   * of this <code>Handler</code> will be informed, but the caller   * of this method will not receive an exception.</p>   *   * <p>If a <code>StreamHandler</code> that has been closed earlier   * is closed a second time, the Sun J2SE 1.4 reference can be   * observed to silently ignore the call. The GNU implementation,   * however, intentionally behaves differently by informing the   * <code>ErrorManager</code> associated with this   * <code>StreamHandler</code>.  Since the condition indicates a   * programming error, the programmer should be informed. It also   * seems extremely unlikely that any application would depend on the   * exact behavior in this rather obscure, erroneous case --   * especially since the API specification does not prescribe what is   * supposed to happen.   *   * @throws SecurityException if a security manager exists and   *         the caller is not granted the permission to control   *         the logging infrastructure.   */  public void close()    throws SecurityException  {    LogManager.getLogManager().checkAccess();    try    {      /* Although  flush also calls checkOpen, it catches       * any exceptions and reports them to the ErrorManager       * as flush failures.  However, we want to report       * a closed stream as a close failure, not as a       * flush failure here.  Therefore, we call checkOpen()       * before flush().       */      checkOpen();      flush();      if (writer != null)      {	if (formatter != null)	{	  /* Even if the StreamHandler has never published a record,	   * it emits head and tail upon closing. An earlier version	   * of the GNU Classpath implementation did not emitted	   * anything. However, this had caused XML log files to be	   * entirely empty instead of containing no log records.	   */	  if (streamState == STATE_FRESH)            writer.write(formatter.getHead(this));	  if (streamState != STATE_CLOSED)	    writer.write(formatter.getTail(this));	}	streamState = STATE_CLOSED;        writer.close();      }    }    catch (Exception ex)    {      reportError(null, ex, ErrorManager.CLOSE_FAILURE);    }  }}

⌨️ 快捷键说明

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