spring - 意外字符('-'(代码 45)):需要空格分隔根级值
问题描述
我正在使用grok的logstash过滤器并将日志文件导入elasticsearch。我想将我的日志文件分成 4 个部分,分别是时间、日志级别、类(已编辑:对不起,我的错,它是线程,而不是类)和消息。
下面是我使用 lob-back.xml 由 spring-boot 生成的日志文件的几行
2019-09-17 16:25:01,116 INFO [main]: org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:initialize:Initializing ExecutorService 'taskScheduler'
2019-09-17 16:25:01,225 INFO [main]: org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:initialize:Initializing ExecutorService 'applicationTaskExecutor'
我得到的错误如下:
[2019-09-17T16:25:01,425][ERROR][logstash.codecs.json] JSON parse error, original data now in message field {:error=>#<LogStash::Json::ParserError:
Unexpected character ('-' (code 45)): Expected space separating root-level values
"; line: 1, column: 6]>, :data=>"2019-09-17 16:25:01,043 INFO [main]: org.springframework.security.web.DefaultSecurityFilterChain:<init>:Creating filter chain: Ant [pattern='/v2/api-docs'], []\r"}
我的logstash配置:
input {
file {
path => "C:/data/log/*.log"
codec => "json"
type => "logback"
}
}
filter {
grok {
match => {
"message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:log-level} [%{DATA:class}]: %{GREEDYDATA:syslog_message}"
}
}
}
output {
if [type]=="logback" {
elasticsearch {
hosts => [ "localhost:9200" ]
index => "logback-%{+YYYY.MM.dd}"
}
}
}
解决方案
您必须转义 [] 字符才能将它们视为字符串的一部分,而不是特殊字符
match => {
"message" => '^%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:log_level}%{SPACE}\[%{DATA:thread}\]: %{GREEDYDATA:syslog_message}$'
}
我已经通过一些改进更新了您的模式:
推荐阅读
- python - 使用reportlab生成pdf时解决IOError并生成二维码图像
- javascript - 当倒计时仅剩 30 分钟时,如何将倒计时的背景或文字颜色更改为绿色?
- pip - pythonAnywhere AttributeError:模块'pytube'没有属性'YouTube'
- postman - 如何将 csv 文件从 postman-post 请求发送到 CherryPy
- javascript - 修复 CSS 文本替换动画中的跳跃
- javascript - 在 PHP 邮件程序中使用 HTML jquery ajax 请求
- javascript - Javascript:函数返回数组的最后一个元素
- python - 在 Tkinter 中单击按钮后如何更新标签?
- c - 将缓冲区强制转换为 uint32_t 会导致访问未对齐
- python - 登录成功后如何获取授权码--Linkedin OAuth - Django, Python