Search code examples
javajsonparsinggroklogparser

parsing log file using java Grok api not working but working in Grok online debugger


Hi I have a problem when parsing a log file using code and grok api downloaded from Github (I'm not using logstash) when I test using Grok debugger https://grokdebug.herokuapp.com/ it works fine but in my code it won't

here is a log line from the file I want to parse :

DEBUG 2015-06-17 14:44:57,475 (com.test.logging.exceptionmanager.ExceptionTreeModel:findNodeByIdRecursively:651) - Could not find node with Id: 1913

and this is my code :

public class LogParse {

public static void main(String[] args) throws GrokException {


        // Get an instance of grok
        Grok grok = new Grok();

        // add a pattern to grok
        grok.addPattern("LOGLEVEL", "\\w+");
        grok.addPattern("YEAR", "\\w+");
        grok.addPattern("MONTHNUM", "\\w+");
        grok.addPattern("MONTHDAY", "\\w+");
        grok.addPattern("HOUR", "\\w+");
        grok.addPattern("MINUTE", "\\w+");
        grok.addPattern("SECOND", "\\w+");
        grok.addPattern("GREEDYDATA", "\\w+");



     grok.compile("%{LOGLEVEL:loglevel} %{YEAR:year}-%{MONTHNUM:month}-%{MONTHDAY:day} %{HOUR:hour}:%{MINUTE:minute}:%{SECOND:second} %{GREEDYDATA:data}");


        try{
               FileInputStream fstream = new FileInputStream("C://file.log");
               BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
               String log;
                //output
                BufferedWriter output = new BufferedWriter(new FileWriter("out.json"));

               /* read log line by line */
               while ((log = br.readLine()) != null)   {

                 System.out.println (log);
                 Match gm = grok.match(log);
                    gm.captures();

                    //output
                    System.out.println(gm.toJson());
                    output.write(gm.toJson());
                    output.newLine();

               }
               output.close();
               fstream.close();

            } catch (Exception e) {
                 System.err.println("Error: " + e.getMessage());
            }       }}

thanks for your help.


Solution

  • The working code :

     public class LogParse {
        public static void main(String[] args) throws GrokException, IOException {
    
    
            // Get an instance of grok
            Grok grok = new Grok();
    
            // add a pattern to grok
            grok.addPattern("LOGLEVEL", "\\w+");
            grok.addPattern("YEAR", "\\w+");
            grok.addPattern("MONTHNUM", "((?:0?[1-9]|1[0-2]))");
            grok.addPattern("MONTHDAY", "(?:[+-]?(?:[0-9]+))");
            grok.addPattern("HOUR", "(?:[+-]?(?:[0-9]+))");
            grok.addPattern("MINUTE", "(?:[+-]?(?:[0-9]+))");
            grok.addPattern("SECOND", "(?:(?:[0-5][0-9]|60)(?:[:.,][0-9]+)?)");
            grok.addPattern("GREEDYDATA", ".*");
    
    
            grok.compile("%{LOGLEVEL:loglevel} %{YEAR:year}-%{MONTHNUM:month}-%{MONTHDAY:day} %{HOUR:hour}:%{MINUTE:minute}:%{SECOND:second} (%{GREEDYDATA:data}) - %{GREEDYDATA:message} %{GREEDYDATA:Erreur}");
            grok.compile("%{LOGLEVEL:loglevel} %{YEAR:year}-%{MONTHNUM:month}-%{MONTHDAY:day} %{HOUR:hour}:%{MINUTE:minute}:%{SECOND:second} (%{GREEDYDATA:data}) - %{GREEDYDATA:message}");
    
    
            try{
    
                   FileInputStream fstream = new FileInputStream("C://file.log");
                   BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
                   String log;
                    //output
                    BufferedWriter output = new BufferedWriter(new FileWriter("out.json"));
    
                   /* read log line by line */
                   while ((log = br.readLine()) != null)   {
    
                     System.out.println (log);
                     Match gm = grok.match(log);
                        gm.captures();
    
                        //output
                        System.out.println(gm.toJson());
                        output.write(gm.toJson());
                        output.newLine();
    
                   }
                   output.close();
                   fstream.close();
    
                } catch (Exception e) {
                     System.err.println("Error: " + e.getMessage());
                }   }}