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

📄 textpaneappender.java

📁 log4j的源码
💻 JAVA
字号:
/* * Copyright 1999-2005 The Apache Software Foundation. *  * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *  *      http://www.apache.org/licenses/LICENSE-2.0 *  * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.apache.log4j.gui;import java.awt.Color;import java.awt.Image;import java.awt.Toolkit;import java.io.*;import java.net.URL;import java.util.Enumeration;import java.util.StringTokenizer;import java.util.Hashtable;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JTextPane;import javax.swing.text.AttributeSet;import javax.swing.text.BadLocationException;import javax.swing.text.MutableAttributeSet;import javax.swing.text.SimpleAttributeSet;import javax.swing.text.StyleConstants;import javax.swing.text.StyledDocument;import javax.swing.text.TabSet;import javax.swing.text.TabStop;import org.apache.log4j.*;import org.apache.log4j.spi.LoggingEvent;import org.apache.log4j.helpers.Loader;import org.apache.log4j.helpers.QuietWriter;import org.apache.log4j.helpers.TracerPrintWriter;import org.apache.log4j.helpers.OptionConverter;/** * <b>Experimental</b> TextPaneAppender. <br> * * * Created: Sat Feb 26 18:50:27 2000 <br> * * @author Sven Reimers */public class TextPaneAppender extends AppenderSkeleton {      JTextPane textpane;  StyledDocument doc;  TracerPrintWriter tp;  StringWriter sw;  QuietWriter qw;  Hashtable attributes;  Hashtable icons;    private String label;    private boolean fancy;      final String LABEL_OPTION = "Label";  final String COLOR_OPTION_FATAL = "Color.Emerg";  final String COLOR_OPTION_ERROR = "Color.Error";  final String COLOR_OPTION_WARN = "Color.Warn";  final String COLOR_OPTION_INFO = "Color.Info";  final String COLOR_OPTION_DEBUG = "Color.Debug";  final String COLOR_OPTION_BACKGROUND = "Color.Background";  final String FANCY_OPTION = "Fancy";  final String FONT_NAME_OPTION = "Font.Name";  final String FONT_SIZE_OPTION = "Font.Size";    public static Image loadIcon ( String path ) {    Image img = null;    try {      URL url = ClassLoader.getSystemResource(path);      img = (Image) (Toolkit.getDefaultToolkit()).getImage(url);    } catch (Exception e) {      System.out.println("Exception occured: " + e.getMessage() + 			 " - " + e );       }	    return (img);  }    public TextPaneAppender(Layout layout, String name) {    this();    this.layout = layout;    this.name = name;    setTextPane(new JTextPane());    createAttributes();    createIcons();  }      public TextPaneAppender() {    super();    setTextPane(new JTextPane());    createAttributes();    createIcons();    this.label="";    this.sw = new StringWriter();    this.qw = new QuietWriter(sw, errorHandler);    this.tp = new TracerPrintWriter(qw);    this.fancy =true;  }  public  void close() {      }    private void createAttributes() {	    Priority prio[] = Priority.getAllPossiblePriorities();        attributes = new Hashtable();    for (int i=0; i<prio.length;i++) {      MutableAttributeSet att = new SimpleAttributeSet();      attributes.put(prio[i], att);      StyleConstants.setFontSize(att,14);    }    StyleConstants.setForeground((MutableAttributeSet)attributes.get(Priority.ERROR),Color.red);    StyleConstants.setForeground((MutableAttributeSet)attributes.get(Priority.WARN),Color.orange);    StyleConstants.setForeground((MutableAttributeSet)attributes.get(Priority.INFO),Color.gray);    StyleConstants.setForeground((MutableAttributeSet)attributes.get(Priority.DEBUG),Color.black);  }  private void createIcons() {    Priority prio[] = Priority.getAllPossiblePriorities();        icons = new Hashtable();    for (int i=0; i<prio.length;i++) {      if (prio[i].equals(Priority.FATAL))	icons.put(prio[i],new ImageIcon(loadIcon("icons/RedFlag.gif")));      if (prio[i].equals(Priority.ERROR))			icons.put(prio[i],new ImageIcon(loadIcon("icons/RedFlag.gif")));      if (prio[i].equals(Priority.WARN))			icons.put(prio[i],new ImageIcon(loadIcon("icons/BlueFlag.gif")));      if (prio[i].equals(Priority.INFO))			icons.put(prio[i],new ImageIcon(loadIcon("icons/GreenFlag.gif")));      if (prio[i].equals(Priority.DEBUG))			icons.put(prio[i],new ImageIcon(loadIcon("icons/GreenFlag.gif")));    }  }  public void append(LoggingEvent event) {    String text = this.layout.format(event);    String trace="";    // Print Stacktrace    // Quick Hack maybe there is a better/faster way?    if (event.throwable!=null) {      event.throwable.printStackTrace(tp);      for (int i=0; i< sw.getBuffer().length(); i++) {	if (sw.getBuffer().charAt(i)=='\t')	  sw.getBuffer().replace(i,i+1,"        ");      }      trace = sw.toString();      sw.getBuffer().delete(0,sw.getBuffer().length());    }    try {      if (fancy) {	textpane.setEditable(true);	textpane.insertIcon((ImageIcon)icons.get(event.priority));	textpane.setEditable(false);      }      doc.insertString(doc.getLength(),text+trace,		       (MutableAttributeSet)attributes.get(event.priority));	}	    catch (BadLocationException badex) {      System.err.println(badex);    }	    textpane.setCaretPosition(doc.getLength());  }    public  JTextPane getTextPane() {    return textpane;  }    private  static  Color parseColor (String v) {    StringTokenizer st = new StringTokenizer(v,",");    int val[] = {255,255,255,255};    int i=0;    while (st.hasMoreTokens()) {      val[i]=Integer.parseInt(st.nextToken());      i++;    }    return new Color(val[0],val[1],val[2],val[3]);  }    private  static  String colorToString(Color c) {    // alpha component emitted only if not default (255)    String res = ""+c.getRed()+","+c.getGreen()+","+c.getBlue();    return c.getAlpha() >= 255 ? res : res + ","+c.getAlpha();  }  public  void setLayout(Layout layout) {    this.layout=layout;  }    public  void setName(String name) {    this.name = name;  }        public  void setTextPane(JTextPane textpane) {    this.textpane=textpane;    textpane.setEditable(false);    textpane.setBackground(Color.lightGray);    this.doc=textpane.getStyledDocument();  }            private  void setColor(Priority p, String v) {    StyleConstants.setForeground(		      (MutableAttributeSet)attributes.get(p),parseColor(v));	  }    private  String getColor(Priority p) {    Color c =  StyleConstants.getForeground(		      (MutableAttributeSet)attributes.get(p));    return c == null ? null : colorToString(c);  }    /////////////////////////////////////////////////////////////////////  // option setters and getters    public  void setLabel(String label) {    this.label = label;  }  public  String getLabel() {    return label;  }    public  void setColorEmerg(String color) {    setColor(Priority.FATAL, color);  }  public  String getColorEmerg() {    return getColor(Priority.FATAL);  }    public  void setColorError(String color) {    setColor(Priority.ERROR, color);  }  public  String getColorError() {    return getColor(Priority.ERROR);  }    public  void setColorWarn(String color) {    setColor(Priority.WARN, color);  }  public  String getColorWarn() {    return getColor(Priority.WARN);  }    public  void setColorInfo(String color) {    setColor(Priority.INFO, color);  }  public  String getColorInfo() {    return getColor(Priority.INFO);  }    public  void setColorDebug(String color) {    setColor(Priority.DEBUG, color);  }  public  String getColorDebug() {    return getColor(Priority.DEBUG);  }    public  void setColorBackground(String color) {    textpane.setBackground(parseColor(color));  }  public  String getColorBackground() {    return colorToString(textpane.getBackground());  }    public  void setFancy(boolean fancy) {    this.fancy = fancy;  }  public  boolean getFancy() {    return fancy;  }    public  void setFontSize(int size) {    Enumeration e = attributes.elements();    while (e.hasMoreElements()) {      StyleConstants.setFontSize((MutableAttributeSet)e.nextElement(),size);    }    return;  }    public  int getFontSize() {    AttributeSet attrSet = (AttributeSet) attributes.get(Priority.INFO);    return StyleConstants.getFontSize(attrSet);  }    public  void setFontName(String name) {    Enumeration e = attributes.elements();    while (e.hasMoreElements()) {      StyleConstants.setFontFamily((MutableAttributeSet)e.nextElement(),name);    }    return;  }    public  String getFontName() {    AttributeSet attrSet = (AttributeSet) attributes.get(Priority.INFO);    return StyleConstants.getFontFamily(attrSet);  }  public  boolean requiresLayout() {    return true;  }} // TextPaneAppender

⌨️ 快捷键说明

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