Java的日志:日志和窗口( JFrame窗口) : 日志 « 语言基础知识 « Java

En
Java
1. 图形用户界面
2. 三维图形动画
3. 高级图形
4. 蚂蚁编译
5. Apache类库
6. 统计图
7. 
8. 集合数据结构
9. 数据类型
10. 数据库JDBC
11. 设计模式
12. 开发相关类
13. EJB3
14. 电子邮件
15. 事件
16. 文件输入输出
17. 游戏
18. 泛型
19. GWT
20. Hibernate
21. 本地化
22. J2EE平台
23. 基于J2ME
24. JDK-6
25. JNDI的LDAP
26. JPA
27. JSP技术
28. JSTL
29. 语言基础知识
30. 网络协议
31. PDF格式RTF格式
32. 映射
33. 常规表达式
34. 脚本
35. 安全
36. Servlets
37. Spring
38. Swing组件
39. 图形用户界面
40. SWT-JFace-Eclipse
41. 线程
42. 应用程序
43. Velocity
44. Web服务SOA
45. 可扩展标记语言
Java 教程
Java » 语言基础知识 » 日志屏幕截图 
Java的日志:日志和窗口( JFrame窗口)
Java的日志:日志和窗口( JFrame窗口)
 
/*
Logging In Java with the JDK 1.4 Logging API and Apache log4j
by Samudra Gupta    
Apress Copyright 2003 
ISBN:1590590996

*/

import java.util.logging.*;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;

class LogWindow extends JFrame {
  private int width;

  private int height;

  private JTextArea textArea = null;

  private JScrollPane pane = null;

  public LogWindow(String title, int width, int height) {
    super(title);
    setSize(width, height);
    textArea = new JTextArea();
    pane = new JScrollPane(textArea);
    getContentPane().add(pane);
    setVisible(true);
  }

  /**
   * This method appends the data to the text area.
   
   @param data
   *            the Logging information data
   */
  public void showInfo(String data) {
    textArea.append(data);
    this.getContentPane().validate();
  }
}

class WindowHandler extends Handler {
  //the window to which the logging is done
  private LogWindow window = null;

  private Formatter formatter = null;

  private Level level = null;

  //the singleton instance
  private static WindowHandler handler = null;

  /**
   * private constructor, preventing initialization
   */
  private WindowHandler() {
    configure();
    if (window == null)
      window = new LogWindow("Logging window"500200);
  }

  /**
   * The getInstance method returns the singleton instance of the
   * WindowHandler object It is synchronized to prevent two threads trying to
   * create an instance simultaneously. @ return WindowHandler object
   */

  public static synchronized WindowHandler getInstance() {

    if (handler == null) {
      handler = new WindowHandler();
    }
    return handler;
  }

  /**
   * This method loads the configuration properties from the JDK level
   * configuration file with the help of the LogManager class. It then sets
   * its level, filter and formatter properties.
   */
  private void configure() {
    LogManager manager = LogManager.getLogManager();
    String className = this.getClass().getName();
    String level = manager.getProperty(className + ".level");
    String filter = manager.getProperty(className + ".filter");
    String formatter = manager.getProperty(className + ".formatter");

    //accessing super class methods to set the parameters
    setLevel(level != null ? Level.parse(level: Level.INFO);
    setFilter(makeFilter(filter));
    setFormatter(makeFormatter(formatter));

  }

  /**
   * private method constructing a Filter object with the filter name.
   
   @param filterName
   *            the name of the filter
   @return the Filter object
   */
  private Filter makeFilter(String filterName) {
    Class c = null;
    Filter f = null;
    try {
      c = Class.forName(filterName);
      f = (Filterc.newInstance();
    catch (Exception e) {
      System.out.println("There was a problem to load the filter class: "
          + filterName);
    }
    return f;
  }

  /**
   * private method creating a Formatter object with the formatter name. If no
   * name is specified, it returns a SimpleFormatter object
   
   @param formatterName
   *            the name of the formatter
   @return Formatter object
   */
  private Formatter makeFormatter(String formatterName) {
    Class c = null;
    Formatter f = null;

    try {
      c = Class.forName(formatterName);
      f = (Formatterc.newInstance();
    catch (Exception e) {
      f = new SimpleFormatter();
    }
    return f;
  }

  /**
   * This is the overridden publish method of the abstract super class
   * Handler. This method writes the logging information to the associated
   * Java window. This method is synchronized to make it thread-safe. In case
   * there is a problem, it reports the problem with the ErrorManager, only
   * once and silently ignores the others.
   
   * @record the LogRecord object
   *  
   */
  public synchronized void publish(LogRecord record) {
    String message = null;
    //check if the record is loggable
    if (!isLoggable(record))
      return;
    try {
      message = getFormatter().format(record);
    catch (Exception e) {
      reportError(null, e, ErrorManager.FORMAT_FAILURE);
    }

    try {
      window.showInfo(message);
    catch (Exception ex) {
      reportError(null, ex, ErrorManager.WRITE_FAILURE);
    }

  }

  public void close() {
  }

  public void flush() {
  }
}

public class CustomHandlerDemo {
  private WindowHandler handler = null;

  private Logger logger = null;

  public CustomHandlerDemo() {
    handler = WindowHandler.getInstance();
    //obtaining a logger instance and setting the handler
    logger = Logger.getLogger("sam.logging.handler");
    logger.addHandler(handler);
  }

  /**
   * This method publishes the log message
   */
  public void logMessage() {
    logger.info("Hello from WindowHandler...");
  }

  public static void main(String args[]) {
    //logging with the help of a logger
    CustomHandlerDemo demo = new CustomHandlerDemo();
    demo.logMessage();
    //using the handler.publish() to log
    WindowHandler h = WindowHandler.getInstance();
    LogRecord r = new LogRecord(Level.WARNING,
        "The Handler publish method...");
    h.publish(r);
  }
}


           
         
  
Related examples in the same category
1. 日志级别日志级别
2. 简单的日志格式范例简单的日志格式范例
3. 日志文件FileHandler和SimpleFomatter日志文件FileHandler和SimpleFomatter
4. 日志多个句柄日志多个句柄
5. 日志多个处理器2日志多个处理器2
6. 覆写LogRecord toString ( )覆写LogRecord toString ( )
7. 电子邮件记录器电子邮件记录器
8. 日志文件与FileHandler日志文件与FileHandler
9. 日志级别日志级别
10. 创建自定义日志级别
11. 日志记录级别操纵日志记录级别操纵
12. 配置日志配置日志
13. 如何撰写自定义日志处理如何撰写自定义日志处理
14. Log Client Filter
15. 日志HTML表格式
16. 日志实例1日志实例1
17. 基本记录实例
18. Java Log:Basic Logging Java Log:Basic Logging
19. Java的日志:层次记录Java的日志:层次记录
20. Java的日志:各种记录方法Java的日志:各种记录方法
21. Java的日志:流处理器演示Java的日志:流处理器演示
22. Java的日志:文件处理程序演示Java的日志:文件处理程序演示
23. Java的日志:内存处理演示Java的日志:内存处理演示
24. Java的日志:套接字句柄演示
25. Java的日志:基本记录2Java的日志:基本记录2
26. Java的日志:记录服务器
27. Java的日志:日志过滤器Java的日志:日志过滤器
28. Java的日志:XML的日志
29. Java的日志:候补XML的日志Java的日志:候补XML的日志
30. Java的日志:定位记录Java的日志:定位记录
31. Java的记录:自定义XML格式Java的记录:自定义XML格式
32. Java的日志:远程配置阅读器
33. 文件记录器
34. 设置格式的记录器句柄
35. 内存句柄演示
36. 套接字句柄演示
37. 基于记录XMLFormatter
38. #define the properties for the SocketHandler
39. 自定义过滤器
40. 基础上StreamHandler使用正则表达式
41. 典型的记录程序
42. 确定邮件是否将被记录
43. 记录方法调用
44. 记录异常
45. 最大限度地减少记录码
46. Preventing a Logger from Forwarding Log Records to Its Parent
47. 写作日志记录到日志文件
48. 文件处理程序附加
49. 写作日志记录到标准错误
50. 在一种状况出现后书写日志记录
51. Create a memory handler with a memory of 100 records and dumps the records into the file my.log
52. 设置过滤器的记录器句柄
53. Comparing Log Levels: To compare the severity of two logging levels, use Level.intValue().
54. 创建自定义格式的记录器句柄
55. 限制大小的日志文件
56. Limiting the Size of a Log by Using a Rotating Sequence of Files
57. Configuring Logger Default Values with a Properties File
58. Determining When the Logging Configuration Properties are Reread
59. 解析一个XML文件的同时处理错误
60. An example of a program providing the functionality of logging
61. 使用记录器简单格式化和FileHandler
62. Logger with XMLFormatter and FileHandler
63. 流处理器
64. FileHandler的格式
65. 嵌入式文件处理程序和记录仪
66. 配置演示
67. config.properties
68. 使用FileHandler改变XML
69. 本地化记录
70. 定义您自定义的格式
71. 远程ConfigReader与URLConnection
72. 窗口句柄:在一个窗口(JFrame)显示日志消息
73. 创建日志的包名称创建日志的包名称
74. 记录器演示
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.