最近需要使用Elasticsearch做一个日志系统,本文只介绍log4j内容同步到Elasticsearch,至于日志的查询和分类,会在后面介绍。
一、配置并打开Elasticsearch
这个操作不在叙述,需要注意的是,本文使用的是elasticsearch-5.6.8版本的elasticsearch,所以logstash和filebeat也是5.6.8,本文使用的环境是windows系统。
二、配置filebeat
之前我们已经介绍了使用logstash来同步mysql数据库,那么logstash是否也能同步log4j?在查询文档后发现,logstash在低版本情况下是可以直接同步log4j的,但是如果使用logstash5.X的版本,logstash变不在支持log4j转而将这个功能放入到了Filebeat实现,所以使用log4j的日志系统将采用Elasticsearch+logstash +filebeat+log4j的形式。
首先介绍一下什么是Filebeat。Filebeat是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并且转发这些信息到elasticsearch或者logstarsh中存放,接下来将介绍配置filebeat。
1.下载filebeat,需要注意的是filebeat版本应该elasticsearch版本一致,官网地址:
https://www.elastic.co/downloads/beats/filebeat
2.修改filebeat文件中的filebeat.yml文件
input_type:long
path:
- 你的log4j文件绝对路径
在filebeat.yml文件中的Elasticsearch output项可以修改Elasticsearch 的地址
在filebeat.yml文件中的Logstash output项修改Logstash的地址(这个地址和端口号必须与接下来配置Logstash的.conf文件一致)
以上的配置已经可以同步,其他的详细配置,可以参考这篇博客:https://blog.csdn.net/haozhuxuan/article/details/79738447
3.启动filebeat
打开命令终端,进入filebeat文件夹运行:
filebeat -e -c filebeat.yml
三、配置Logstash文件
1.在Logstash文件夹下创建conf文件夹
2.在创建的conf文件夹中创建log4j.conf文件,文件的内容为:
input{beats {port => 9600}
}
output{stdout{ codec => rubydebug }elasticsearch { hosts => "localhost:9200" index => "t-server-%{+YYYY.MM.dd}"document_type => "log4j_type"}
}
3.运行log4j.conf文件:
使用windows终端进入Logstash文件下,运行:
logstash -f ../conf/log4j.conf
完成这一步,整个同步过程就已经完成了
四、测试
本文使用的是spring boot项目,需要添加log4j的依赖:
在application.properties同一级下创建log4j.properties文件:
### 设置###
log4j.rootLogger = debug,stdout,D### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n### 输出DEBUG 级别以上的日志到=E:/log/debug.log
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File =E:/log/debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
编写测试代码:
![](https://img8.php1.cn/3cdc5/15d29/711/b3df879b5be20e95.gif)
![](https://img8.php1.cn/3cdc5/15d29/711/54c99d0583721d31.gif)
import org.apache.log4j.Logger;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class LoginController {private static final Logger logger = Logger.getLogger(LoginController.class);@RequestMapping("/getUser")public String getUser(){logger.debug("debug message!");logger.info("info message!");logger.warn("warn message!");logger.error("error message!");try{System.out.println(10/0);}catch(Exception e){logger.error(e);}return "返回成功";}}
访问:http://localhost:8880/getUser 后,我们可以在head中看见,刚才的日志信息已经同步到Elasticsearch中