ELK 记录 java log4j 类型日志
ELK 记载 java log4j 时,一个报错会生成很多行,阅读起来很不方便。
类似这样
解决这个问题的方法
1.使用多行合并
合并多行数据(Multiline)
有些时候,应用程序调试日志会包含非常丰富的内容,为一个事件打印出很多行内容。这种日志通常都很难通过命令行解析的方式做分析。
而 logstash 正为此准备好了 codec/multiline 插件!
小贴士:multiline 插件也可以用于其他类似的堆栈式信息,比如 linux 的内核日志。
配置文件
- input {
- file {
- path => "/root/error.log"
- codec => multiline {
- pattern => "^\["
- negate => true
- what => "previous"
- }
- start_position => "beginning"
- sincedb_path => "/dev/null"
- ignore_older=>
- }
- }
- output {
- elasticsearch { hosts => ["10.10.15.90:9200"]
- index => "testjava"
- }
- stdout { codec => rubydebug }
- }
以上配置文件,将 不是以 " [ " 这个符号开头的行并入上一个事件中。
测试文本error.log
- [-- ::]ERROR com.alibaba.druid.pool.DruidAbstractDataSource(line:) -oracle.jdbc.driver.OracleDriver is deprecated.
- [-- ::]ERROR com.alibaba.druid.pool.DruidAbstractDataSource(line:) -oracle.jdbc.driver.OracleDriver is deprecated.
- [-- ::]ERROR com.alibaba.dubbo.container.Main(line:) - [DUBBO] Error creating bean with name 'YSWPurchaseListService': Cannot resolve reference to bean 'ySWPurchaseListServiceImpl' while setting bean property 'ref'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'ySWPurchaseListServiceImpl' available, dubbo version: 2.5., current host: 127.0.0.1
- org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'YSWPurchaseListService': Cannot resolve reference to bean 'ySWPurchaseListServiceImpl' while setting bean property 'ref'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'ySWPurchaseListServiceImpl' available
- at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:)
- at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:)
- at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:)
- Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'ySWPurchaseListServiceImpl' available
- at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:)
- ... more
- [-- ::]ERROR com.alibaba.druid.pool.DruidAbstractDataSource(line:) -oracle.jdbc.driver.OracleDriver is deprecated.
- [-- ::]ERROR com.alibaba.druid.pool.DruidAbstractDataSource(line:) -oracle.jdbc.driver.OracleDriver is deprecated.hello world
- [hello world
- 111111111111111hello world
- [222222222hello world
- [333333hello world
运行结果
- {
- "@timestamp" => --29T02::.340Z,
- "message" => "[2018-06-05 17:23:57]ERROR com.alibaba.druid.pool.DruidAbstractDataSource(line:1134) -oracle.jdbc.driver.OracleDriver is deprecated.",
- "path" => "/root/error.log",
- "host" => "localhost.localdomain",
- "@version" => ""
- }
- {
- "@timestamp" => --29T02::.264Z,
- "message" => "[2018-06-05 17:23:57]ERROR com.alibaba.druid.pool.DruidAbstractDataSource(line:1134) -oracle.jdbc.driver.OracleDriver is deprecated.",
- "path" => "/root/error.log",
- "host" => "localhost.localdomain",
- "@version" => ""
- }
- {
- "tags" => [
- [] "multiline"
- ],
- "host" => "localhost.localdomain",
- "@version" => "",
- "@timestamp" => --29T02::.349Z,
- "message" => "[2018-06-05 17:23:59]ERROR com.alibaba.dubbo.container.Main(line:86) - [DUBBO] Error creating bean with name
- 'YSWPurchaseListService': Cannot resolve reference to bean 'ySWPurchaseListServiceImpl' while setting bean property 'ref'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'ySWPurchaseListServiceImpl' available, dubbo version: 2.5.3,
- current host: 127.0.0.1\norg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'YSWPurchaseListService':
- Cannot resolve reference to bean 'ySWPurchaseListServiceImpl' while setting bean property 'ref'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'ySWPurchaseListServiceImpl'
- available\n\tat org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:378)\n\tat
- org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:110)\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1613)\nCaused by:
- org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'ySWPurchaseListServiceImpl' available\n\tat
- org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:367)\n\t... 17 more",
- "path" => "/root/error.log"
- }
- {
- "@timestamp" => --29T02::.353Z,
- "message" => "[2018-06-05 17:25:05]ERROR com.alibaba.druid.pool.DruidAbstractDataSource(line:1134) -oracle.jdbc.driver.OracleDriver is deprecated.",
- "path" => "/root/error.log",
- "host" => "localhost.localdomain",
- "@version" => ""
- }
- {
- "@timestamp" => --29T02::.353Z,
- "message" => "[2018-06-05 17:26:05]ERROR com.alibaba.druid.pool.DruidAbstractDataSource(line:1134) -oracle.jdbc.driver.OracleDriver is deprecated.hello world",
- "path" => "/root/error.log",
- "host" => "localhost.localdomain",
- "@version" => ""
- }
- {
- "tags" => [
- [] "multiline"
- ],
- "host" => "localhost.localdomain",
- "@version" => "",
- "@timestamp" => --29T02::.354Z,
- "message" => "[hello world\n111111111111111hello world",
- "path" => "/root/error.log"
- }
- {
- "@timestamp" => --29T02::.354Z,
- "message" => "[222222222hello world",
- "path" => "/root/error.log",
- "host" => "localhost.localdomain",
- "@version" => ""
- }
- q^H^C[WARN ] -- ::19.902 [SIGINT handler] runner - SIGINT received. Shutting down.
- {
- "@timestamp" => --29T02::.848Z,
- "message" => "[333333hello world",
- "path" => "/root/error.log",
- "host" => "localhost.localdomain",
- "@version" => ""
- }
测试结果:
测试文本中的语句,按照 "[" 这个符号,被分割成了 7 个事件(总共8个事件),最后一个事件没有显示是正常的
这是因为你最后输入的回车符 \n
并不匹配设定的 ^\[
正则表达式,
logstash 还得等下一行数据直到匹配成功后才会输出这个事件。
解释
其实这个插件的原理很简单,就是把当前行的数据添加到前面一行后面,,直到新进的当前行匹配 ^\[
正则为止。
这个正则还可以用 grok 表达式,稍后你就会学习这方面的内容。
2.使用插件input/log4j
logstash 还提供了另一种处理 log4j 的方式:input/log4j。
与 codec/multiline
不同,这个插件是直接调用了 org.apache.log4j.spi.LoggingEvent
处理 TCP 端口接收的数据。
ELK 记录 java log4j 类型日志的更多相关文章
- nginx不记录指定文件类型日志
1.指定记录文件日志记录的内容. vim /usr/local/nginx/conf/nginx.conf如下部分: log_format dd '$remote_addr $http_x_forwa ...
- Java log4j slf4j 日志配置笔记
http://www.cnblogs.com/Scott007/p/3269018.html 日志的打印,在程序中是必不可少的,如果需要将不同的日志打印到不同的地方,则需要定义不同的Appender, ...
- java log4j 打日志到控制台同时打印到不同文件
1.pom配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- 学习记录 java 值类型和引用类型的知识
1. Java中值类型和引用类型的不同? [定义] 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值, 那么调用这个方法是传入的变量的值也将改变 ...
- LAMP 2.1Apache不记录指定文件类型日志
访问日志只需要记地址,不用记录图片. 对无用的图片日志做标记,针对标记做限制.打开 vim /usr/local/apache2/conf/extra/httpd-vhosts.conf 把 Erro ...
- ELK环境配置+log4j日志记录
ELK环境配置+log4j日志记录 1. 背景介绍 在大数据时代,日志记录和管理变得尤为重要. 以往的文件记录日志的形式,既查询起来又不方便,又造成日志在服务器上分散存储,管理起来相当麻烦, 想根据一 ...
- slf4j+log4j在Java中实现日志记录
小Alan今天来跟大家聊聊开发中既简单又常用但必不可少的一样东西,那是什么呢?那就是日志记录,日志输出,日志保存. 后面就统一用日志记录四个字来形容啦. 日志记录是项目的开发中必不可少的一个环节,特别 ...
- Java中使用Log4j记录错误、输出日志
简介: Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进 ...
- java Log4j日志配置详解大全
一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...
随机推荐
- 微信小程序点击图片放大
WXML: <view class='imgList'> <view class='imgList-li' wx:for='{{imgArr}}'> <image cla ...
- 为WPF, UWP 及 Xamarin实现一个简单的消息组件
原文地址:Implementing a simple messenger component for WPF, UWP and Xamarin 欢迎大家关注我的公众号:程序员在新西兰了解新西兰IT行业 ...
- WordPress使用PHPMailer发送gmail邮件
wordpress使用phpmailer发送gmail邮件 0.保证用于gmail账号已经开启imap服务,且你能正常访问到gmail的smtp服务.(需要climb over the wall) 1 ...
- 20190925Java课堂记录(一)
判断字符串是否回文 设计思想 利用递归,每次返回长度减二的字符串,最终返回结果 源程序代码 import java.util.Scanner; public class palindrome { st ...
- 投影方式- Unity3D游戏开发培训
投影方式- Unity3D游戏开发培训 作者:Jesai 2018-02-12 20:33:13 摘 要 透视投影是3D渲染的基本概念,也是3D程序设计的基础.掌握透视投影的原理对于深入理解其他 ...
- 9.Super详解
super注意点: surper()是调用父类的构造方法,而且必须在构造方法的第一个 super必须只能出现在子类的方法或者构造方法中! super()和this()不能同时调用构造方法! Vs th ...
- 网络通信-基本概念:网络、IP地址、端口、socket
目录 网络通信 1 网络 1.1 网络定义 1.2 使用网络的目的 1.3 总结 2 IP地址 2.1 ip地址的作用 2.2 ip地址的分类 3 端口 3.1 什么是端口 3.2 端口号 3.3 端 ...
- 【转】document.form.action,表单分向提交
document.form.action,表单分向提交,javascript提交表单 同一个表单可以根据用户的选择,提交给不同的后台处理程序.即,表单的分向提交.如,在编写论坛程序时,如果我们希望实现 ...
- ninject 的 实现 的 理解
mvc 用ninject 好像 有 的. 加上 ClassDiagram .ClassDiagram1.rar Represents a site on a type where a value c ...
- Java的String类常用方法
一.构造函数 String(byte[ ] bytes):通过byte数组构造字符串对象. String(char[ ] value):通过char数组构造字符串对象. String(Sting or ...