Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何解析原始日志文件转储并提取相关信息_Java_Logging - Fatal编程技术网

Java 如何解析原始日志文件转储并提取相关信息

Java 如何解析原始日志文件转储并提取相关信息,java,logging,Java,Logging,解析原始日志文件转储并提取相关信息 以下是两个事件的日志文件提取。每个事件由**分隔,如下所示: 01/23/13 17:29:25 |-| ***************************************************************** 01/23/13 17:29:25 |-| MTCLPrint: processCodesoftPrintRequest() [-WEB--JU-LBCH-Wed Jan 23 17:29:25 CST 2013]... 01

解析原始日志文件转储并提取相关信息

以下是两个事件的日志文件提取。每个事件由**分隔,如下所示:

01/23/13 17:29:25 |-| *****************************************************************
01/23/13 17:29:25 |-| MTCLPrint: processCodesoftPrintRequest() [-WEB--JU-LBCH-Wed Jan 23 17:29:25 CST 2013]...
01/23/13 17:29:25 |-|   ==> CS Label: [JU , LBCH , 70005023489 , JU Filtrete UPC0 3 Up Label , JU Filtrete UPC0 Labels 3 up , JUCHIZ01 , Qty: 1100]
01/23/13 17:29:26 |-| TrkgNbr: [-WEB--JU-LBCH-Wed Jan 23 17:29:25 CST 2013] ,CSPid: 5372
01/23/13 17:29:27 |-| Sending print job to -\\JUFP01\JUCHIZ01 [-WEB--JU-LBCH-Wed Jan 23 17:29:25 CST 2013]...
01/23/13 17:29:29 |-| Cannot delete file in temp dir (mergeAndPrint) - P786406707_67724_818342796.prn
01/23/13 17:29:29 |-| MTCLPrint: processCodesoftPrintRequest() [-WEB--JU-LBCH-Wed Jan 23 17:29:25 CST 2013]...complete.
01/23/13 17:29:29 |-| ~~~~ MTCL Print Web Service is terminated. ~~~~
01/23/13 17:29:56 |-| ~~~~ MTCL Print Web Service is started. ~~~~
01/23/13 17:29:56 |-| *****************************************************************
01/23/13 17:29:56 |-| MTCLPrint: processCodesoftPrintRequest() [-WEB--SDL-P1-Wed Jan 23 17:29:56 CST 2013]...
01/23/13 17:29:56 |-|   ==> CS Label: [SDL , P1 , 70000437403 , SDL GenericShip.CS7Z170 10-2006 REV , Medina HD Two Part Inter. Label , Z170 Packer , Qty: 1]
01/23/13 17:29:56 |-| TrkgNbr: [-WEB--SDL-P1-Wed Jan 23 17:29:56 CST 2013] ,CSPid: 8840
01/23/13 17:29:58 |-| Sending print job to -\\SPPRT10\SDL-PR-Zebra03 [-WEB--SDL-P1-Wed Jan 23 17:29:56 CST 2013]...
01/23/13 17:29:58 |-| Cannot delete file in temp dir (mergeAndPrint) - P1905794774_98669_986327948.prn
01/23/13 17:29:58 |-| MTCLPrint: processCodesoftPrintRequest() [-WEB--SDL-P1-Wed Jan 23 17:29:56 CST 2013]...complete.
01/23/13 17:29:58 |-| ~~~~ MTCL Print Web Service is terminated. ~~~~
01/23/13 17:30:11 |-| ~~~~ MTCL Print Web Service is started. ~~~~
应用程序日志转储一系列类似的重复日志。我需要解析这个文件,并通过Java程序将其输入MS Excel

以下是我需要从上述原始数据转储中提取的相关数据:

01/23/13 17:29:25 |-|   ==> CS Label: [JU , LBCH , 70005023489 , JU Filtrete UPC0 3 Up Label , JU Filtrete UPC0 Labels 3 up , JUCHIZ01 , Qty: 1100]

01/23/13 17:29:56 |-|   ==> CS Label: [SDL , P1 , 70000437403 , SDL GenericShip.CS7Z170 10-2006 REV , Medina HD Two Part Inter. Label , Z170 Packer , Qty: 1]

原始数据总是以“CS Label:”开头,后跟“[”,然后有7个字段用逗号分隔。我需要将这7个字段提取到excel工作表中的列中。实现这一点的最有效方法是什么?

我看到了以下算法:

  • 逐行读取文件
  • 如果行包含
    CS标签
    字符串,则对其进行处理(否则放弃)
  • 提取方括号中的所有内容(可以使用正则表达式,也可以使用普通的
    String
    方法)
  • 在逗号上拆分此字符串,并修剪空格
  • 将此信息添加到某些结构并发布到Excel
  • 给你:

    public class DateFunctions {
        // Date related Logic
        private Date startDate;
        private Integer delta;
    
        @SuppressWarnings("resource")
        public DateFunctions() {
            // ApplicationContext ctx = new
            // ClassPathXmlApplicationContext("date-properties.xml");
            ApplicationContext ctx = new FileSystemXmlApplicationContext(
                    "c:\\logAnalyzer\\date-properties.xml");
            // Initializing date related data from spring configuration file
            startDate = (Date) ctx.getBean("startDate");
            delta = (Integer) ctx.getBean("delta");
        }
    
        public boolean isTimeDiffAcceptable(Date logDate) {
    
            DateTime dt1, dt2;
            Integer minutesDiff;
    
            dt1 = new DateTime(logDate);
            dt2 = new DateTime(startDate);
    
            int daysDiff = Days.daysBetween(dt1, dt2).getDays();
    
            if (daysDiff == 0) {
                minutesDiff = dt1.getMinuteOfDay() - dt2.getMinuteOfDay();
            } else {
                minutesDiff = 0;
            }
    
            // System.out.println("minutesDiff : " + minutesDiff);
            // System.out.println("delta : " + delta);
    
            if (minutesDiff < 0 && (-1 * minutesDiff) < delta) {
                return true;
            } else {
                return false;
            }
        }
    
        public Date getStartDate() {
            return startDate;
        }
    
        public void setStartDate(Date startDate) {
            this.startDate = startDate;
        }
    
        public Integer getDelta() {
            return delta;
        }
    
        public void setDelta(Integer delta) {
            this.delta = delta;
        }
    
    }
    
    公共类函数{
    //日期相关逻辑
    私人日期开始日期;
    私有整数增量;
    @抑制警告(“资源”)
    公共日期函数(){
    //ApplicationContext ctx=新建
    //ClassPathXmlApplicationContext(“date properties.xml”);
    ApplicationContext ctx=新文件系统XMLApplicationContext(
    “c:\\logAnalyzer\\date properties.xml”);
    //从spring配置文件初始化日期相关数据
    startDate=(日期)ctx.getBean(“startDate”);
    delta=(整数)ctx.getBean(“delta”);
    }
    公共布尔值可接受(日期日志日期){
    日期时间dt1,dt2;
    整数分差;
    dt1=新的日期时间(logDate);
    dt2=新的日期时间(startDate);
    int daysDiff=Days.daysBetween(dt1,dt2).getDays();
    如果(daysDiff==0){
    minutesDiff=dt1.getMinuteOfDay()-dt2.getMinuteOfDay();
    }否则{
    分钟差=0;
    }
    //System.out.println(“minutesDiff:+minutesDiff”);
    //System.out.println(“delta:+delta”);
    如果(分钟差<0&(-1*分钟差)
    然后,format log方法将允许您将日志放入excel工作表中

    public class FormatLog {
    
        private String searchRequiredString, searchStartString, searchEndString;
        private String regex, line;
        private Integer lengthStartStr, lengthEndStr;
    
        private File inputFile;
    
        private Integer rowNum, colNum;
        private HSSFCell cell;
    
        private String[] ary;
    
        private Logger log;
    
        // Initializing data in constructor
        public FormatLog() {
            // initializing the logger for log4j
            log = Logger.getLogger(FormatLog.class);
    
            @SuppressWarnings("resource")
            ApplicationContext ctx = new ClassPathXmlApplicationContext(
                    "spring.xml");
    
            // Initializing search String related parameters
            searchRequiredString = (String) ctx.getBean("searchRequiredString");
            searchStartString = (String) ctx.getBean("searchStartString");
            searchEndString = (String) ctx.getBean("searchEndString");
            regex = (String) ctx.getBean("regex");
    
            // Initializing the Log Input File
            inputFile = (File) ctx.getBean("inputFile");
    
            // Computing some start parameters
            lengthStartStr = searchStartString.length();
            lengthEndStr = searchEndString.length();
    
            // Row Number initialized to -1
            rowNum = -1;
        }
    
        /*
         * Input: None Output: Integer rowNum - number of rows processed.
         */
        @SuppressWarnings({ "resource", "deprecation" })
        public Integer stringManipulation() {
    
            // setting header text
            String[] headerText = { "Date", "Facility Name", "Work Center",
                    "ID Nbr", "Preference", "Format", "Printer Name", "Qty" };
            DateFunctions df = new DateFunctions();
            try {
                FileOutputStream fileOut = new FileOutputStream(
                        "c:\\logAnalyzer\\FormattedLogsELC.xls");
                HSSFWorkbook workbook = new HSSFWorkbook();
                HSSFSheet worksheet = workbook.createSheet("ELC Log Worksheet - "
                        + df.getStartDate().toString());
    
                BufferedReader br = new BufferedReader(new FileReader(inputFile));
                while ((line = br.readLine()) != null) {
                    // Create the StringBuilder
                    StringBuilder builder = new StringBuilder(line);
    
                    Integer indexRequired = builder.indexOf(searchRequiredString);
                    if (indexRequired > 0) {
    
                        String date = builder.subSequence(1, 17).toString();
                        log.debug(date);
                        Date logDate = new Date(date);
                        if (df.isTimeDiffAcceptable(logDate)) {
    
                            log.debug(builder.toString());
                            Integer indexStart = builder.indexOf(searchStartString);
                            Integer indexEnd = builder.indexOf(searchEndString);
                            String s = builder.subSequence(
                                    indexStart + lengthStartStr,
                                    indexEnd - lengthEndStr + 1).toString();
                            // adding date to the string s
                            s = date + "," + s;
                            log.debug(s);
                            ary = s.split(regex);
                            if (ary.length != headerText.length) {
                                log.warn("Review row number : " + rowNum
                                        + ". Unexpected data was found");
                            }
    
                            // incrementing RowNumber for workbook calculation.
                            rowNum++;
                            if (rowNum == 0) {
                                log.info("Setting Header Text");
                                ary = headerText;
                            }
                            log.info("Row Number: " + rowNum
                                    + " extracted for time : " + date);
                            // Create a new wb row.
                            HSSFRow row = worksheet.createRow(rowNum);
                            for (colNum = 0; colNum < ary.length; colNum++) {
                                ary[colNum] = ary[colNum].trim();
                                log.debug(ary[colNum]);
                                cell = row.createCell(colNum);
                                cell.setCellValue(ary[colNum]);
                            }// end for
                        }// end if timeDiff
                    }// end if indexRequired
                } // while
    
                // write to workbook and close it
                workbook.write(fileOut);
                fileOut.flush();
                fileOut.close();
    
            } catch (FileNotFoundException e) {
                log.error(e);
            } catch (IOException e) {
                log.error(e);
            }
    
            if (rowNum < 0) {
                log.warn("No rows were written to the excel file.");
                log.warn("Application Logs provided may be out of the Wily alert window if no exception was thrown.");
    
            } else {
                log.info("Success");
            }
    
            // Returns the rows processed
            return rowNum;
        }
    }
    
    公共类格式化日志{
    私有字符串searchRequiredString、searchStartString、searchEndString;
    私有字符串正则表达式,行;
    专用整数lengthStartStr、LengthDSTR;
    私有文件输入文件;
    私有整数rowNum,colNum;
    专用HSSFCell单元;
    私有字符串[]元;
    私人日志记录器;
    //在构造函数中初始化数据
    公共格式化日志(){
    //初始化log4j的记录器
    log=Logger.getLogger(FormatLog.class);
    @抑制警告(“资源”)
    ApplicationContext ctx=新类路径XmlApplicationContext(
    “spring.xml”);
    //初始化搜索字符串相关参数
    searchRequiredString=(String)ctx.getBean(“searchRequiredString”);
    searchStartString=(String)ctx.getBean(“searchStartString”);
    searchEndString=(String)ctx.getBean(“searchEndString”);
    regex=(字符串)ctx.getBean(“regex”);
    //正在初始化日志输入文件
    inputFile=(File)ctx.getBean(“inputFile”);
    //计算一些起动参数
    lengthStartStr=searchStartString.length();
    LengthDSTR=searchEndString.length();
    //行号已初始化为-1
    rowNum=-1;
    }
    /*
    *输入:无输出:整数rowNum-处理的行数。
    */
    @SuppressWarnings({“资源”、“弃用”})
    公共整数字符串处理(){
    //设置标题文本
    字符串[]headerText={“日期”、“设施名称”、“工作中心”,
    “ID编号”、“首选项”、“格式”、“打印机名称”、“数量”};
    DateFunctions df=新的DateFunctions();
    试一试{
    FileOutputStream fileOut=新的FileOutputStream(
    “c:\\logAnalyzer\\FormattedLogsELC.xls”);
    HSSFWorkbook=新的HSSFWorkbook();
    HSSFSheet工作表=工作簿.createSheet(“ELC日志工作表-
    +df.getStartDate().toString());
    BufferedReader br=新的BufferedReader(新文件读取器(inputFile));
    而((line=br.readLine())!=null){
    //创建StringBuilder
    StringBuilder=新的StringBuilder(线);
    整数indexRequired=builder.indexOf(searchRequiredString);
    如果(indexRequired>0){
    字符串日期=builder.subSequence(1,17).toString();
    log.debug(日期);
    日期日志日期=新日期(日期);
    if(df.isTimeDiffAcceptable(日志日期)){
    log.debug(builder.toString());
    整数indexStart=builder.indexOf(searchStartString);
    整数indexEnd=builder.indexOf(searchEndString);
    字符串s=builder.subSequence(
    indexStart+lengthStartStr,
    indexEnd-lengthDSTR+1).toString();
    //将日期添加到字符串s
    s=日期+“,”+s;
    日志调试;
    ary=s.split(正则表达式);
    如果(ary.length!=标题文本