diff --git a/src/log_format.cc b/src/log_format.cc index 5634fbd6..70874353 100644 --- a/src/log_format.cc +++ b/src/log_format.cc @@ -994,16 +994,13 @@ static int read_json_field(yajlpp_parse_context *ypc, const unsigned char *str, } else if (ypc->is_level(1) || jlu->jlu_format->elf_value_defs.find(field_name) != jlu->jlu_format->elf_value_defs.end()) { - if (!jlu->jlu_format->jlf_hide_extra && - find_if(line_format.begin(), line_format.end(), - json_field_cmp(external_log_format::JLF_VARIABLE, - field_name)) == line_format.end()) { - jlu->jlu_sub_line_count += 1; - for (size_t lpc = 0; lpc < len; lpc++) { - if (str[lpc] == '\n') { - jlu->jlu_sub_line_count += 1; - } + if (!jlu->jlu_format->jlf_hide_extra) { + if (find_if(line_format.begin(), line_format.end(), + json_field_cmp(external_log_format::JLF_VARIABLE, + field_name)) == line_format.end()) { + jlu->jlu_sub_line_count += 1; } + jlu->jlu_sub_line_count += std::count(&str[0], &str[len], '\n'); } } diff --git a/test/Makefile.am b/test/Makefile.am index 8c8f2089..d561a81d 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -263,6 +263,7 @@ dist_noinst_DATA = \ listview_output.4 \ listview_output.5 \ listview_output.6 \ + log.clog \ logfile_access_log.0 \ logfile_access_log.1 \ logfile_bad_access_log.0 \ diff --git a/test/formats/jsontest/lnav-logstash.json b/test/formats/jsontest/lnav-logstash.json new file mode 100644 index 00000000..863b9db6 --- /dev/null +++ b/test/formats/jsontest/lnav-logstash.json @@ -0,0 +1,41 @@ +{ + "logstash_dam": { + "title" : "Logstash Java JSON", + "url" : "https://github.com/logstash/logstash-logback-encoder", + "description" : "Log format for DAM Logstash JSON", + "json" : true, + "hide-extra" : false, + "file-pattern" : "\\.clog.*", + "multiline": false, + "line-format" : + [ + { "field" : "@timestamp" }, + " ", + { "field" : "ipaddress" }, + " ", + { "field" : "message" }, + " ", + { "field" : "stack_trace", "default-value" : "" } + ], + "timestamp-field" : "@timestamp", + "body-field" : "message", + "level-field" : "level", + "level" : { + "trace" : "TRACE", + "debug" : "DEBUG", + "info" : "INFO", + "error" : "ERROR", + "warning" : "WARN" + }, + "value" : { + "logger_name" : { + "kind" : "string", + "identifier" : true + }, + "ipaddress" : { + "kind" : "string", + "identifier" : true + } + } + } +} diff --git a/test/log.clog b/test/log.clog new file mode 100644 index 00000000..14e4ed98 --- /dev/null +++ b/test/log.clog @@ -0,0 +1,2 @@ +{"@timestamp":"2016-08-03T12:06:31.009-0500","@version":1,"message":";Exception initializing page context;","logger_name":"org.apache.jasper.runtime.JspFactoryImpl","thread_name":"http-bio-0.0.0.0-8081-exec-198","level":"ERROR","level_value":40000,"stack_trace":"java.lang.NoClassDefFoundError: javax/el/StaticFieldELResolver\n\tat org.apache.jasper.runtime.JspFactoryImpl.internalGetPageContext(JspFactoryImpl.java:172)\n\tat org.apache.jasper.runtime.JspFactoryImpl.getPageContext(JspFactoryImpl.java:123)\n\tat org.apache.jsp.errors._404_002dnot_002dfound_jsp._jspService(_404_002dnot_002dfound_jsp.java:38)\n\tat org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:731)\n\tat org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:411)\n\tat org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473)\n\tat org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:731)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)\n\tat collective.config.startup.DamFilter.doFilter(DamFilter.java:270)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)\n\tat org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748)\n\tat org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:488)\n\tat org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:411)\n\tat org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338)\n\tat org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:476)\n\tat org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:345)\n\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:210)\n\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)\n\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)\n\tat org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957)\n\tat org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:683)\n\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)\n\tat org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)\n\tat org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)\n\tat org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)\n\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n\tat java.lang.Thread.run(Thread.java:744)\nCaused by: java.lang.ClassNotFoundException: javax.el.StaticFieldELResolver\n\tat org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)\n\tat org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)\n\t... 33 common frames omitted\n","customer":"foobaz"} +{"@timestamp":"2016-08-03T12:06:31.009-0500","@version":1,"message":";Exception initializing page context;","logger_name":"org.apache.jasper.runtime.JspFactoryImpl","thread_name":"http-bio-0.0.0.0-8081-exec-198","level":"ERROR","level_value":40000,"customer":"foobaz"} diff --git a/test/test_json_format.sh b/test/test_json_format.sh index 701e1569..ec8a7251 100644 --- a/test/test_json_format.sh +++ b/test/test_json_format.sh @@ -25,6 +25,64 @@ check_output "json log format is not working" <