logstash收集springboot日志
logstash收集springboot日志
maven依赖
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.1</version>
</dependency>
springboot 配置文件
logging:
config: classpath:logback.xml
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml" />
<!--======================================= 本地变量 ======================================== -->
<!--在没有定义${LOG_HOME}系统变量的时候,可以设置此本地变量。提交测试、上线时,要将其注释掉,使用系统变量。 -->
<property name="LOG_HOME" value="logs/spring.log" />
<!-- 应用名称:和统一配置中的项目代码保持一致(小写) -->
<property name="APP_NAME" value="log" />
<!--日志文件保留天数 -->
<property name="LOG_MAX_HISTORY" value="30" />
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 -->
<!--应用日志文件保存路径 -->
<property name="LOG_APP_HOME" value="${APP_NAME}/%d{yyyy-MM-dd}" />
<!--=========================== 按照每天生成日志文件:默认配置=================================== -->
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件:主项目日志 -->
<appender name="APP"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名 -->
<FileNamePattern>${LOG_APP_HOME}/base.%d{yyyy-MM-dd}.log
</FileNamePattern>
<!--日志文件保留天数 -->
<MaxHistory>${LOG_MAX_HISTORY}</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{500} - %msg%n</pattern>
</encoder>
</appender>
<!--=============================== 日志输出: 默认主业务日志 ====================================== -->
<logger name="org.springframework">
<level value="WARN" />
</logger>
<logger name="org.apache.shiro">
<level value="WARN" />
</logger>
<logger name="freemarker">
<level value="WARN" />
</logger>
<logger name="org.hibernate">
<level value="WARN" />
</logger>
<logger name="org.hibernate.SQL">
<level value="DEBUG" />
</logger>
<logger name="org.apache.ibatis">
<level value="DEBUG" />
</logger>
<logger name="org.mybatis.spring">
<level value="DEBUG" />
</logger>
<logger name="com.alibaba.druid">
<level value="DEBUG,INFO" />
</logger>
<!-- 这里是你的业务的包名 -->
<logger name="com.bart.elk">
<level value="DEBUG" />
</logger>
<!-- logstash ip和暴露的端口,我目前理解就是通过这个地址把日志发送过去 -->
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!-- 和logstash 的input 配置的端口保持一致 -->
<destination>localhost:4567</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
<root level="warn,info,debug">
<appender-ref ref="APP" />
<appender-ref ref="STDOUT" />
<appender-ref ref="LOGSTASH" />
<appender-ref ref="CONSOLE" />
</root>
</configuration>
logstash
springboot-log.conf
# 文档
# https://www.elastic.co/guide/en/logstash/5.6/input-plugins.html
# https://www.elastic.co/guide/en/logstash/6.1/input-plugins.html
input{
tcp {
mode => "server"
host => "0.0.0.0"
port => 4567
codec => json_lines
}
}
output{
# 为了模拟测试就先不放es了,在控制台输出测试看看
#elasticsearch{
# hosts=>["127.0.0.1:9200"]
# index => "springboot-elk-%{+YYYY.MM.dd}"
#}
stdout{
codec => rubydebug
}
}
测试接口
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@RestController
public class ApiTests {
protected final static Logger log = LoggerFactory.getLogger(ApiTests.class);
@GetMapping("/api/log")
public Object log() {
ServletRequestAttributes requestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest request = requestAttributes.getRequest();
String ip = request.getRemoteAddr();
String uri = request.getRequestURI();
String logStr = String.format("IP=[%s] send request URI = [%s]", ip, uri);
log.debug("[debug] "+logStr);
log.info("[info] "+logStr);
log.warn("[warn] "+logStr);
log.error("[error] "+logStr);
return "ok : "+ LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
}
测试效果
先运行logstash
# linux:
bin/logstash -f config/springboot-log.conf
# windows:
bin\logstash.bat -f config/springboot-log.conf
在运行springboot项目,然后调用测试接口:http://localhost:8080/api/log
观察logstash控制台输出:
{
"@timestamp" => 2021-04-28T15:40:43.182Z,
"level" => "DEBUG",
"port" => 57778,
"thread_name" => "http-nio-8080-exec-1",
"level_value" => 10000,
"@version" => "1",
"host" => "127.0.0.1",
"logger_name" => "com.bart.elk.ApiTests",
"message" => "[debug] IP=[127.0.0.1] send request URI = [/api/log]"
}
{
"@timestamp" => 2021-04-28T15:40:43.182Z,
"level" => "INFO",
"port" => 57778,
"thread_name" => "http-nio-8080-exec-1",
"level_value" => 20000,
"@version" => "1",
"host" => "127.0.0.1",
"logger_name" => "com.bart.elk.ApiTests",
"message" => "[info] IP=[127.0.0.1] send request URI = [/api/log]"
}
{
"@timestamp" => 2021-04-28T15:40:43.183Z,
"level" => "WARN",
"port" => 57778,
"thread_name" => "http-nio-8080-exec-1",
"level_value" => 30000,
"@version" => "1",
"host" => "127.0.0.1",
"logger_name" => "com.bart.elk.ApiTests",
"message" => "[warn] IP=[127.0.0.1] send request URI = [/api/log]"
}
{
"@timestamp" => 2021-04-28T15:40:43.183Z,
"level" => "ERROR",
"port" => 57778,
"thread_name" => "http-nio-8080-exec-1",
"level_value" => 40000,
"@version" => "1",
"host" => "127.0.0.1",
"logger_name" => "com.bart.elk.ApiTests",
"message" => "[error] IP=[127.0.0.1] send request URI = [/api/log]"
}
说明运行成功!
参考说明:
logstash收集springboot日志的更多相关文章
- logstash收集syslog日志
logstash收集syslog日志注意:生产用syslog收集日志!!! 编写logstash配置文件 #首先我用rubydebug测试数据 [root@elk-node1 conf.d]# cat ...
- logstash收集的日志输出到elasticsearch中
logstash收集的日志输出到elasticsearch中 一.需求 二.实现步骤 1.编写pipeline文件 1.`elasticsearch`配置参数解析: 2.可能会报的一个异常 2.准备测 ...
- logstash收集rsyslog日志
(1)rsyslog配置 在192.168.1.31配置 #vim /etc/rsyslog.conf *.* @@192.168.1.32:514 //所有设备名,所有日志级别都发送到192.168 ...
- logstash收集java日志,多行合并成一行
使用codec的multiline插件实现多行匹配,这是一个可以将多行进行合并的插件,而且可以使用what指定将匹配到的行与前面的行合并还是和后面的行合并. 1.java日志收集测试 input { ...
- 构建Logstash+tomcat镜像(让logstash收集tomcat日志)
1.首先pull logstash镜像作为父镜像(logstash的Dockerfile在最下面): 2.构建my-logstash镜像,使其在docker镜像实例化时,可以使用自定义的logstas ...
- Logstash收集nginx日志之使用grok过滤插件解析日志
grok作为一个logstash的过滤插件,支持根据模式解析文本日志行,拆成字段. nginx日志的配置: log_format main '$remote_addr - $remote_user [ ...
- logstash收集Nginx日志,转换为JSON格式
Nginx日志处理为JSON格式,并放置在http区块: log_format json '{"@timestamp":"$time_iso8601",' '& ...
- logstash收集nginx日志
(1)安装nginx 1.安装nginx yum install epel-release -y yum install nginx -y 2.修改日志文件格式为json #vim /etc/ngin ...
- Logstash 收集 IIS 日志
日志样例 查看 IIS 日志配置,选择格式为 W3C(默认字段设置)保存生效. 2016-02-25 01:27:04 112.74.74.124 GET /goods/list/0/1.html - ...
随机推荐
- eclipse输入时自动提示
当输入一部分代码时,其他的候选代码提示出来,可以提高开发的效率,设置方法如下: 选择Window -> Perferences -> Java -> Editor -> Con ...
- tesseract-ocr和tesseract.exe is not installed or it's not in your path问题解决
一.解决方案: 1.http://www.ddooo.com/softdown/94968.htm 打开下载的压缩包,找到"tesseract-ocr-setup-3.02.02.exe ...
- Git:使用远程仓库
远程仓库可使用Github.Gitee,或自建Gitlab.Gogs服务器,这里使用Github. 配置本地用户名和邮箱 # 配置本地用户的用户名邮箱(保存在用户.gitconfig文件) $ git ...
- monkey稳定性测试的步骤及策略
1.adb的作用是什么?adb的全称:android debug bridge 安卓调试桥梁,包含在 Android SDK 平台工具软件包中.通过该命令与设备进行通信,以便进行调试adb可以同时管理 ...
- Hi3559AV100外接UVC/MJPEG相机实时采图设计(二):V4L2接口的实现(以YUV422为例)
下面将给出Hi3559AV100外接UVC/MJPEG相机实时采图设计的整体流程,主要实现是通过V4L2接口将UVC/MJPEG相机采集的数据送入至MPP平台,经过VDEC.VPSS.VO最后通过HD ...
- createNewFile() 报错 open failed: ENOENT (No such file or directory) 的解决方案
在写Android应用中使用createNewFile() 遇到open failed: ENOENT (No such file or directory) 错误,在网上查了许多方法,不过都不能解决 ...
- vs2019远程调试
VS2019远程调试 这几天遇到个很是纠结的问题,同样的源代码,放在测试服务器,完美运行.但是上线正式环境就是死活显示不出来.于是想到了微软的远程调试功能,这里用VS2019举例. 下载远程访问工具 ...
- 设计模式之抽象工厂模式(Abstract Factory Pattern)
一.抽象工厂模式的由来 抽象工厂模式,最开始是为了解决操作系统按钮和窗体风格,而产生的一种设计模式.例如:在windows系统中,我们要用windows设定的按钮和窗体,当我们切换Linux系统时,要 ...
- Jmeter性能常见问题集锦
1. java.net.BindException: Address already in use: connect 开始以为是单机运行脚本运行不过来,所以另加了一台负载机同时运行脚本 分布式环境部署 ...
- C语言入门-mingw64安装+配置
OK,大家好,结合上期所说,本期让我们来配置编译器吧! 首先先下载mingw64离线包,官网下载慢,可以去群里下载,*.7z格式(有些同学可能没有解压软件,为了照顾这部分同学,笔者提供*.exe格式的 ...