mirror of https://github.com/tstack/lnav.git
[log-format] fix line-format where a variable can span lines
Fixes #337
This commit is contained in:
parent
876b37ade0
commit
5539e21c05
|
@ -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) !=
|
else if (ypc->is_level(1) || jlu->jlu_format->elf_value_defs.find(field_name) !=
|
||||||
jlu->jlu_format->elf_value_defs.end()) {
|
jlu->jlu_format->elf_value_defs.end()) {
|
||||||
if (!jlu->jlu_format->jlf_hide_extra &&
|
if (!jlu->jlu_format->jlf_hide_extra) {
|
||||||
find_if(line_format.begin(), line_format.end(),
|
if (find_if(line_format.begin(), line_format.end(),
|
||||||
json_field_cmp(external_log_format::JLF_VARIABLE,
|
json_field_cmp(external_log_format::JLF_VARIABLE,
|
||||||
field_name)) == line_format.end()) {
|
field_name)) == line_format.end()) {
|
||||||
jlu->jlu_sub_line_count += 1;
|
jlu->jlu_sub_line_count += 1;
|
||||||
for (size_t lpc = 0; lpc < len; lpc++) {
|
|
||||||
if (str[lpc] == '\n') {
|
|
||||||
jlu->jlu_sub_line_count += 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
jlu->jlu_sub_line_count += std::count(&str[0], &str[len], '\n');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -263,6 +263,7 @@ dist_noinst_DATA = \
|
||||||
listview_output.4 \
|
listview_output.4 \
|
||||||
listview_output.5 \
|
listview_output.5 \
|
||||||
listview_output.6 \
|
listview_output.6 \
|
||||||
|
log.clog \
|
||||||
logfile_access_log.0 \
|
logfile_access_log.0 \
|
||||||
logfile_access_log.1 \
|
logfile_access_log.1 \
|
||||||
logfile_bad_access_log.0 \
|
logfile_bad_access_log.0 \
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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"}
|
|
@ -25,6 +25,64 @@ check_output "json log format is not working" <<EOF
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
|
||||||
|
run_test ${lnav_test} -n \
|
||||||
|
-I ${test_dir} \
|
||||||
|
${test_dir}/log.clog
|
||||||
|
|
||||||
|
check_output "multi-line-format json log format is not working" <<EOF
|
||||||
|
2016-08-03T12:06:31.009 - ;Exception initializing page context; java.lang.NoClassDefFoundError: javax/el/StaticFieldELResolver
|
||||||
|
at org.apache.jasper.runtime.JspFactoryImpl.internalGetPageContext(JspFactoryImpl.java:172)
|
||||||
|
at org.apache.jasper.runtime.JspFactoryImpl.getPageContext(JspFactoryImpl.java:123)
|
||||||
|
at org.apache.jsp.errors._404_002dnot_002dfound_jsp._jspService(_404_002dnot_002dfound_jsp.java:38)
|
||||||
|
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111)
|
||||||
|
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
|
||||||
|
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:411)
|
||||||
|
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473)
|
||||||
|
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377)
|
||||||
|
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
|
||||||
|
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
|
||||||
|
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
|
||||||
|
at collective.config.startup.DamFilter.doFilter(DamFilter.java:270)
|
||||||
|
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
|
||||||
|
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
|
||||||
|
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748)
|
||||||
|
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:488)
|
||||||
|
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:411)
|
||||||
|
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338)
|
||||||
|
at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:476)
|
||||||
|
at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:345)
|
||||||
|
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:210)
|
||||||
|
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
|
||||||
|
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
|
||||||
|
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957)
|
||||||
|
at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:683)
|
||||||
|
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
|
||||||
|
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
|
||||||
|
at org.apache.coyote.AbstractProtocol\$AbstractConnectionHandler.process(AbstractProtocol.java:620)
|
||||||
|
at org.apache.tomcat.util.net.JIoEndpoint\$SocketProcessor.run(JIoEndpoint.java:316)
|
||||||
|
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
|
||||||
|
at java.util.concurrent.ThreadPoolExecutor\$Worker.run(ThreadPoolExecutor.java:617)
|
||||||
|
at org.apache.tomcat.util.threads.TaskThread\$WrappingRunnable.run(TaskThread.java:61)
|
||||||
|
at java.lang.Thread.run(Thread.java:744)
|
||||||
|
Caused by: java.lang.ClassNotFoundException: javax.el.StaticFieldELResolver
|
||||||
|
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
|
||||||
|
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
|
||||||
|
... 33 common frames omitted
|
||||||
|
|
||||||
|
@version: 1
|
||||||
|
logger_name: org.apache.jasper.runtime.JspFactoryImpl
|
||||||
|
thread_name: http-bio-0.0.0.0-8081-exec-198
|
||||||
|
level_value: 40000
|
||||||
|
customer: foobaz
|
||||||
|
2016-08-03T12:06:31.009 - ;Exception initializing page context;
|
||||||
|
@version: 1
|
||||||
|
logger_name: org.apache.jasper.runtime.JspFactoryImpl
|
||||||
|
thread_name: http-bio-0.0.0.0-8081-exec-198
|
||||||
|
level_value: 40000
|
||||||
|
customer: foobaz
|
||||||
|
EOF
|
||||||
|
|
||||||
|
|
||||||
run_test ${lnav_test} -n \
|
run_test ${lnav_test} -n \
|
||||||
-I ${test_dir} \
|
-I ${test_dir} \
|
||||||
-c ';select * from test_log' \
|
-c ';select * from test_log' \
|
||||||
|
|
Loading…
Reference in New Issue