首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用java Grok api解析日志文件,但在Grok联机调试器中工作

使用java Grok api解析日志文件,但在Grok联机调试器中工作
EN

Stack Overflow用户
提问于 2017-08-18 12:12:50
回答 1查看 493关注 0票数 0

嗨,当我使用grok调试器https://grokdebug.herokuapp.com/测试一个日志文件时,我遇到了一个问题--当我使用Grok调试器https://grokdebug.herokuapp.com/测试时,它工作得很好,但是在我的代码中,它不会在我的代码中运行。

下面是我要解析的文件中的日志行:

调试2015-06-17 14:44:57,475 (com.test.logging.exceptionmanager.ExceptionTreeModel:findNodeByIdRecursively:651) -找不到Id: 1913的节点

这是我的密码:

代码语言:javascript
复制
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());
            }       }}

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-13 14:43:13

工作守则:

代码语言:javascript
复制
 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());
            }   }}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45756384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档