hengheng123456789

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            297 Posts :: 68 Stories :: 144 Comments :: 0 Trackbacks

             在這里向初學者介紹一個簡單使用日志記錄程序信息的方法,希望有所幫助。


          1、可以在main方法中書寫以下語句進行log。

                  final Logger baseLogger = Logger.getLogger("LogTest");
                  baseLogger.setLevel(Level.INFO);//this set the log level to info. that means you can only pring info message to log file.
                  final Handler[] handlers = baseLogger.getHandlers();
                  for (int i = 0; i < handlers.length; i++) {
                      baseLogger.removeHandler(handlers[i]);
                  }

                  try {
                      baseLogger.addHandler(new DefaultHandler()); //class "DefaultHandler" is the default handler for log records. It currently only logs to a file in the format offered by TextFormatter.
                  } catch (FreeColException e) {
                      e.printStackTrace();
                  }


          2、可以在配置文件(${jdk}\jar\lib下面找到logging.properties文件)里面改日志記錄的級別。

          3、定義"DefaultHandler" 類,用于處理日志。

          public final class DefaultHandler extends Handler {

              private static final String fileName = new String("test.log");

              private FileWriter fileWriter;

              /**
              * The constructor to use.
              * @throws Exception In case the log file could not be created/written to.
              */
              public DefaultHandler() throws Exception {
                  File file = new File(fileName);

                  if (file.exists()) {
                      if (file.isDirectory()) {
                          throw new Exception("Log file \"" + fileName + "\" could not be created.");
                      } else if (file.isFile()) {
                          file.delete();
                      }
                  }

                  try {
                      file.createNewFile();
                  } catch (IOException e) {
                      throw new Exception("Log file \"" + fileName + "\" could not be created.");
                  }

                  if (!file.canWrite()) {
                      throw new Exception("Can not write in log file \"" + fileName + "\".");
                  }

                  try {
                      fileWriter = new FileWriter(file);
                  } catch (IOException e) {
                      throw new Exception("Can not write in log file \"" + fileName + "\".");
                  }

                  // We  use TextFormatter that we build latter.
                  setFormatter(new TextFormatter());
                 
                  try {
                      String str = "version: 1.0\n" 
                                  + "Java vendor: " + System.getProperty("java.vendor") + "\n"
                                  + "Java version: " + System.getProperty("java.version") + "\n"
                                  + "Java WM name: " + System.getProperty("java.vm.name") + "\n"
                                  + "Java WM vendor: " + System.getProperty("java.vm.vendor") + "\n"
                                  + "Java WM version: " + System.getProperty("java.vm.version") + "\n\n"
                                  + "OS name: " + System.getProperty("os.name") + "\n"
                                  + "OS architecture: " + System.getProperty("os.arch") + "\n"
                                  + "OS version: " + System.getProperty("os.version") + "\n\n";
                      fileWriter.write(str, 0, str.length());
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }

               /**
              * Closes this handler so that it will stop handling log records.
              */
              public void close() {
                  try {
                      fileWriter.close();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }


              /**
              * Flushes the data that this handler has logged.
              */
              public void flush() {
                  try {
                      fileWriter.flush();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }


              /**
              * Publishes the given LogRecord by writing its data to a file using
              * a TextFormatter.
              *
              * @param record The log record to publish.
              */
              public void publish(LogRecord record) {
                  if (record.getLevel().intValue() < getLevel().intValue()) {
                      return;
                  }

                  String str = getFormatter().format(record);
                  try {
                      fileWriter.write(str, 0, str.length());
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
                  flush();
              }
          }
             
          4、定義自己的Formatter格式。

          /**
          * Formats a log record's data into human-readable text.
          */
          final class TextFormatter extends Formatter {

              /**
              * The constructor to use.
              */
              public TextFormatter() {
              }

              /**
              * Formats the given log record's data into human-readable text.
              *
              * @param record The log record whose data needs to be formatted.
              * @return The log record's data as a string.
              */
              public String format(LogRecord record) {
                  String level;
                  if (record.getLevel() == Level.INFO) {
                      level = "INFO";
                  } else if (record.getLevel() == Level.ALL) {
                      level = "ALL";
                  } else if (record.getLevel() == Level.SEVERE) {
                      level = "SEVERE";
                  } else if (record.getLevel() == Level.WARNING) {
                      level = "WARNING";
                  } else {
                      level = "UNKNOWN";
                  }

                  //you can build your own result format

                  String result = record.getSourceClassName() + ' ' + record.getSourceMethodName();
                  result += "\n\t" + level + ": " + record.getMessage().replaceAll("\n", "\n\t");
                  result += "\n\t" + new Date(record.getMillis()).toString();
                  result += "\n\tThread ID: " + record.getThreadID() + '\n';

                  return result;
              }
          }

          5、實際應用中的使用.

          public class Client {
              private static final Logger logger = Logger.getLogger(Client.class.getName());

              private void createDirs() {
                  String dir = System.getProperty("user.home");
                  String fileSeparator = System.getProperty("file.separator");

                  if (!dir.endsWith(fileSeparator)) {
                      dir += fileSeparator;
                  }
                  dir += "test";

                  File file = new File(dir);
                  if (file.exists() && file.isFile()) {
                      logger.warning("Could not create .freecol under ~ because there already exists a regular file with the same name.");
                      return;
                  } else if (!file.exists()) {
                      file.mkdir();
                     logger.info("Could not create .freecol under ~ because there already exists a regular file with the same name.");
                   }
               }
          }

          posted on 2007-04-25 15:55 哼哼 閱讀(3077) 評論(1)  編輯  收藏 所屬分類: JAVA-Common

          Feedback

          # re: (基礎)使用java.util.logging.Logger類[未登錄] 2014-04-01 11:49 123
          123456789  回復  更多評論
            

          主站蜘蛛池模板: 布尔津县| 四会市| 武夷山市| 大关县| 阿拉尔市| 晋城| 巫溪县| 武定县| 固镇县| 望谟县| 沙雅县| 青铜峡市| 拉萨市| 太康县| 漳州市| 乌拉特中旗| 鹤峰县| 湖州市| 吴堡县| 莆田市| 乌拉特前旗| 高阳县| 江孜县| 昭通市| 泰来县| 河池市| 和平县| 南开区| 宁陵县| 土默特右旗| 苍溪县| 大埔区| 廊坊市| 周宁县| 合山市| 北碚区| 江北区| 伽师县| 辛集市| 甘谷县| 西安市|