ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring Boot (日志篇):Log4j整合ELK,搭建实时日志平台

2021-10-12 16:03:29  阅读:148  来源: 互联网

标签:ELK logstash socket 输出 Spring log4j 日志 appender


说在前面
作为开发,日志是可以说是最重要,没有之一的东西。有代码就一定要有日志,日志写的越详细,处理器bug来越简单,解决问题也越容易,所以码代码之前务必先理解日志是怎么生成的。

ELK
elk 简介
Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。

Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

elk下载安装
elk下载地址:

https://www.elastic.co/downloads/

建议在 linux上运行,elk在windows上支持得不好,另外需要jdk1.8 的支持,需要提前安装好jdk.

下载完之后:

安装,以logstash为栗子:

cd /usr/local/

mkdir logstash

tar -zxvf logstash-5.3.2.tar.gz

mv logstash-5.3.2 /usr/local/logstash

 

配置、启动 Elasticsearch
打开Elasticsearch的配置文件:

vim config/elasticsearch.yml

修改配置:

network.host=localhost
network.port=9200

它默认就是这个配置,没有特殊要求,在本地不需要修改。

启动Elasticsearch:

./bin/elasticsearch

启动成功,访问localhost:9200,网页显示:

{
"name" : "56IrTCM",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "e4ja7vS2TIKI1BsggEAa6Q",
"version" : {
"number" : "5.2.2",
"build_hash" : "f9d9b74",
"build_date" : "2017-02-24T17:26:45.835Z",
"build_snapshot" : false,
"lucene_version" : "6.4.1"
},
"tagline" : "You Know, for Search"
}

配置、启动 logstash
在 logstash的主目录下,打开log4j_to_es.conf:

vim config/log4j_to_es.conf 

修改 log4j_to_es.conf 如下:

input {
log4j {
mode => "server"
host => "localhost"
port => 4560
}
}
filter {
#Only matched data are send to output.
}
output {
elasticsearch {
action => "index" #The operation on ES
hosts => "localhost:9200" #ElasticSearch host, can be array.
index => "applog" #The index to write data to.
}
}

修改完配置后启动:

./bin/logstash -f config/log4j_to_es.conf
终端显示如下:

 

 

 访问localhost:9600

{"host":"Pc-20130412.local","version":"5.3.2","http_address":"127.0.0.1:9600","id":"e6bb985c-c688-49a4-
a55b-4d362bb4136f","name":"Pc-20130412.local","build_date":
"2017-04-24T16:32:22Z","build_sha":"242159a5eea55fe213fe5c8
52d36455e24252c82","build_snapshot":false}

证明logstash启动成功。

配置、启动kibana
到kibana的安装目录:

./bin/kibana 

默认配置即可。

访问localhost:5601,网页显示:

 

证明启动成功。

创建springboot工程
在pom.xml加入相关依赖

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
<version>1.3.8.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

log4j的配置,/src/resources/log4j.properties如下:

log4j.rootLogger=INFO,console

# for package com.demo.elk, log would be sent to socket appender.
log4j.logger.com.forezp=DEBUG, socket

# appender socket
log4j.appender.socket=org.apache.log4j.net.SocketAppender
log4j.appender.socket.Port=4560
log4j.appender.socket.RemoteHost=localhost
log4j.appender.socket.layout=org.apache.log4j.PatternLayout
log4j.appender.socket.layout.ConversionPattern=%d [%-5p] [%l] %m%n
log4j.appender.socket.ReconnectionDelay=10000

# appender console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d [%-5p] [%l] %m%n

Log4j 通过配置可以显示不同的环境信息,下面是常用的内置环境信息:

%p:输出日志信息的优先级,即 debug、 info、 warn、 eηor、 fatal。
%d:输出日志时间点的日期或时间,默认格式为 IS08601 ,也可以在其后指定格式, 比如%d{yyy MMM dd HH:mm:ss,SSS},输出类似于“2017 年 06 月 18 日 12: 01: 12, 058”。
%r:输出自应用启动到输出该 Log 信息所用的毫秒数。
%c:输出日志信息所属的类目,通常就是所在类的全名。
%t:输出产生该日志事件的钱程名 。
%M:输出产生该日志的方法名 。
%1:输出日志事件的发生位直,相当于%C.%M(%F:%L)的组合,包括类名、发生的线 程,以及在代码中的行数,例如 Log4jDemo.main(Log4jDemo.java:22)。
%x:输出和当前线程相关的 NDC C嵌套诊断环境),主要用于 Servlet 这样的多客户、 多线程的 Web 应用中。
%%:输出一个’%’字符。
%F:输出日志消息产生时所在的文件名称。
%L:输出代码中的行号。
%m:输出代码中指定的消息。
%n:输出一个回车换行符, Windows 平台为’’\r\n”, UNIX 和 Linux 平台为“\n”,将输出日志信息换行。可以在%与模式字符之间加上修饰符来控制其显示的最小宽度、最大宽度和文本的对齐方式等。
%30c:指定输出 category 的名称,最小的宽度是 30 个字符,如果 category 的名称少于 20 个字符,则在默认情况下右对齐。
%-30c:指定输出 category 的名称,最小的宽度是 30 个字符,如果 category 的名称少于 20 个字符,则用。号指定左对齐。
%.40c:指定输出 category 的名称,最大的宽度是 40 个字符,如果 categ。可的名称多于 40 个字符,则会将左边多出的字符截掉,小于 40 个字符时也不会有空格。
%30.40c: category 的名称小于 30 个字符时补空格,并且右对齐,如果其名称多于 40 个宇符,则把左边多出的字符截掉。
通常我们会选定在实际项目中需要的一些变量来设直格式,例如:
[%d{HH\:mm\ : ss\ : SSS}) [%p]( %c\:%L)-%m%n
输出格式为:
[09 : 83 : 34:282) [DEBUG) (com.robert.Test:343) -服务器正常启动信息
然而,上面配置中的%L 是个非常危险的环境变量, Log4j 要获得 Java 源代码的行号, Log4j 通过抛出异常在异常堆战中找到调用函数的所在位置,从位置中提取行号。 Java 并没有提供运 行时获得行号的 API,这导致获得代码行号的操作性能很差。
打印log测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootElkApplicationTests {

@Test
public void contextLoads() {
}

private Logger logger = Logger.getLogger(getClass());

@Test
public void test() throws Exception {
for(int i=0;i<100;i++) {
logger.info("输出info ");
logger.debug("输出debug+skkkw嗡嗡嗡kw");
logger.error("输出error 嗡嗡嗡我");
}
}

}

在kibana 实时监控日志
打开localhost:5601:

Management=>index pattrns=>add new:

 

 

 

点击discovery:

 

标签:ELK,logstash,socket,输出,Spring,log4j,日志,appender
来源: https://www.cnblogs.com/youqc/p/15398234.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有