Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * 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.lf5.util;
 
 
 import javax.swing.*;
 import java.io.*;
 import java.util.Date;

Provides utility methods for input and output streams.

Author(s):
Brad Marlborough
Richard Hurst
 
 
 // Contributed by ThoughtWorks Inc.
 
 public class LogFileParser implements Runnable {
   //--------------------------------------------------------------------------
   //   Constants:
   //--------------------------------------------------------------------------
   public static final String RECORD_DELIMITER = "[slf5s.start]";
   public static final String ATTRIBUTE_DELIMITER = "[slf5s.";
   public static final String DATE_DELIMITER =  + "DATE]";
   public static final String THREAD_DELIMITER =  + "THREAD]";
   public static final String CATEGORY_DELIMITER =  + "CATEGORY]";
   public static final String LOCATION_DELIMITER =  + "LOCATION]";
   public static final String MESSAGE_DELIMITER =  + "MESSAGE]";
   public static final String PRIORITY_DELIMITER =  + "PRIORITY]";
   public static final String NDC_DELIMITER =  + "NDC]";
 
   //--------------------------------------------------------------------------
   //   Protected Variables:
   //--------------------------------------------------------------------------
 
   //--------------------------------------------------------------------------
   //   Private Variables:
   //--------------------------------------------------------------------------
   private static SimpleDateFormat _sdf = new SimpleDateFormat("dd MMM yyyy HH:mm:ss,S");
   private LogBrokerMonitor _monitor;
   private InputStream _in = null;
 
   //--------------------------------------------------------------------------
   //   Constructors:
   //--------------------------------------------------------------------------
   public LogFileParser(File filethrows IOException,
       FileNotFoundException {
     this(new FileInputStream(file));
   }
 
   public LogFileParser(InputStream streamthrows IOException {
      = stream;
   }
   //--------------------------------------------------------------------------
   //   Public Methods:
   //--------------------------------------------------------------------------
 
  
Starts a new thread to parse the log file and create a LogRecord. See run().

Parameters:
LogBrokerMonitor
 
   public void parse(LogBrokerMonitor monitorthrows RuntimeException {
      = monitor;
     Thread t = new Thread(this);
     t.start();
   }

  
Parses the file and creates new log records and adds the record to the monitor.
 
   public void run() {
 
     int index = 0;
    int counter = 0;
    LogRecord temp;
    boolean isLogFile = false;
        .getBaseFrame(), "Loading file...");
    try {
      String logRecords = loadLogFile();
      while ((counter = logRecords.indexOf(index)) != -1) {
        temp = createLogRecord(logRecords.substring(indexcounter));
        isLogFile = true;
        if (temp != null) {
          .addMessage(temp);
        }
        index = counter + .length();
      }
      if (index < logRecords.length() && isLogFile) {
        temp = createLogRecord(logRecords.substring(index));
        if (temp != null) {
          .addMessage(temp);
        }
      }
      if (isLogFile == false) {
        throw new RuntimeException("Invalid log file format");
      }
      SwingUtilities.invokeLater(new Runnable() {
        public void run() {
          destroyDialog();
        }
      });
    } catch (RuntimeException e) {
      destroyDialog();
      displayError("Error - Invalid log file format.\nPlease see documentation"
          + " on how to load log files.");
    } catch (IOException e) {
      destroyDialog();
      displayError("Error - Unable to load log file!");
    }
     = null;
  }
  //--------------------------------------------------------------------------
  //   Protected Methods:
  //--------------------------------------------------------------------------
  protected void displayError(String message) {
        .getBaseFrame(), message);
  }
  //--------------------------------------------------------------------------
  //   Private Methods:
  //--------------------------------------------------------------------------
  private void destroyDialog() {
    .hide();
  }

  
Loads a log file from a web server into the LogFactor5 GUI.
  private String loadLogFile(InputStream streamthrows IOException {
    BufferedInputStream br = new BufferedInputStream(stream);
    int count = 0;
    int size = br.available();
    StringBuffer sb = null;
    if (size > 0) {
      sb = new StringBuffer(size);
    } else {
      sb = new StringBuffer(1024);
    }
    while ((count = br.read()) != -1) {
      sb.append((charcount);
    }
    br.close();
    br = null;
    return sb.toString();
  }
  private String parseAttribute(String nameString record) {
    int index = record.indexOf(name);
    if (index == -1) {
      return null;
    }
    return getAttribute(indexrecord);
  }
  private long parseDate(String record) {
    try {
      String s = parseAttribute(record);
      if (s == null) {
        return 0;
      }
      Date d = .parse(s);
      return d.getTime();
    } catch (ParseException e) {
      return 0;
    }
  }
  private LogLevel parsePriority(String record) {
    String temp = parseAttribute(record);
    if (temp != null) {
      try {
        return LogLevel.valueOf(temp);
      } catch (LogLevelFormatException e) {
        return .;
      }
    }
    return .;
  }
  private String parseThread(String record) {
    return parseAttribute(record);
  }
  private String parseCategory(String record) {
    return parseAttribute(record);
  }
  private String parseLocation(String record) {
    return parseAttribute(record);
  }
  private String parseMessage(String record) {
    return parseAttribute(record);
  }
  private String parseNDC(String record) {
    return parseAttribute(record);
  }
  private String parseThrowable(String record) {
    return getAttribute(record.length(), record);
  }
  private LogRecord createLogRecord(String record) {
    if (record == null || record.trim().length() == 0) {
      return null;
    }
    LogRecord lr = new Log4JLogRecord();
    lr.setMillis(parseDate(record));
    lr.setLevel(parsePriority(record));
    lr.setCategory(parseCategory(record));
    lr.setLocation(parseLocation(record));
    lr.setNDC(parseNDC(record));
    lr.setMessage(parseMessage(record));
    return lr;
  }
  private String getAttribute(int indexString record) {
    int start = record.lastIndexOf(index - 1);
    if (start == -1) {
      return record.substring(0, index);
    }
    start = record.indexOf("]"start);
    return record.substring(start + 1, index).trim();
  }
  //--------------------------------------------------------------------------
  //   Nested Top-Level Classes or Interfaces
  //--------------------------------------------------------------------------
New to GrepCode? Check out our FAQ X