Here is a sample:
{
"@timestamp" => "2015-06-03T11:12:43.776Z",
"message" => "2015-06-03 16:40:30,356 [DefaultQuartzScheduler_Worker-9] ERROR StackTrace - Full Stack Trace:\norg.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only\nhawkeyes.logat hawkeyes.quartz.JobTemplate.execute(JobTemplate.groovy:10)\nhawkeyes.logat org.quartz.core.JobRunShell.run(JobRunShell.java:202)\nhawkeyes.logat org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525)",
"@version" => "1",
"tags" => [
[0] "multiline",
[1] "hawkeyes_log",
[2] "log4j"
],
"type" => "hawkeyes",
"host" => "hawkeyesTest",
"path" => "/mnt/log/hawkeyeslogs/hawkeyes.log",
"date" => "2015-06-03 16:40:30,356",
"thread_name" => "DefaultQuartzScheduler_Worker-9",
"log_level" => "ERROR",
"content" => "StackTrace - Full Stack Trace:\norg.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only\nhawkeyes.logat hawkeyes.quartz.JobTemplate.execute(JobTemplate.groovy:10)\nhawkeyes.logat org.quartz.core.JobRunShell.run(JobRunShell.java:202)\nhawkeyes.logat org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525)"
Here is my grok config:
grok {
match => { "message" =>
"%{TIMESTAMP_ISO8601:date} \[(?<thread_name>.+?)\] (?<log_level>\w+)\s*(?<content>.*)"
}
}
In logstash 1.4, the content
variable will only get the first line content("StackTrace - Full Stack Trace:"). But in logstash 1.5, this variable will hold the whole multiline message.
How do I make this variable only the first line?