diff --git a/README.md b/README.md index 27970ff..dbcade1 100644 --- a/README.md +++ b/README.md @@ -55,10 +55,11 @@ Elasticsearch搜索功能 | ✔ HTTPS支持 | ✔ Redis数字型ID生成 | ✔ SpringTask定时任务支持 | ✔ -RestTemplate服务间调用 | docker容器化部署 | ✔ 配置区分生产和测试环境 | ✔ -ELK日志收集功能 | +ELK日志收集功能 | ✔ +RestTemplate服务间调用 | +RabbitMq异步通信 | SpringSecurity权限管理功能 | ### 使用工具 diff --git a/document/elk/elk.md b/document/elk/elk.md new file mode 100644 index 0000000..a7f6637 --- /dev/null +++ b/document/elk/elk.md @@ -0,0 +1,21 @@ +#windows下的elk环境搭建 + +##下载 +下载页面:https://www.elastic.co/downloads/past-releases +ElasticSearch:https://www.elastic.co/downloads/past-releases/elasticsearch-2-4-6 +Logstash:https://www.elastic.co/downloads/past-releases/logstash-2-4-0 +Kibana:https://www.elastic.co/downloads/past-releases/kibana-4-6-0 + +##安装 +下载zip包并进行解压 + +##运行 + +###logstash配置运行 +添加logstash配置文件:logstash-springboot.conf +安装logstash-codec-json_lines插件:plugin install logstash-codec-json_lines +运行logstash命令:logstash -f logstash-springboot.conf + +##SpringBoot整合logstash +引入依赖包:https://github.com/logstash/logstash-logback-encoder +添加配置文件:logback-spring.xml diff --git a/document/elk/logback-spring.xml b/document/elk/logback-spring.xml new file mode 100644 index 0000000..4b7b6da --- /dev/null +++ b/document/elk/logback-spring.xml @@ -0,0 +1,14 @@ + + + + + + localhost:4560 + + + + + + + + diff --git a/document/elk/logstash-springboot.conf b/document/elk/logstash-springboot.conf new file mode 100644 index 0000000..d23ce25 --- /dev/null +++ b/document/elk/logstash-springboot.conf @@ -0,0 +1,10 @@ +input { + tcp { + port => 4560 + codec => json_lines + } +} +output{ + elasticsearch { hosts => ["localhost:9200"] } + stdout { codec => rubydebug } +} \ No newline at end of file diff --git a/mall-admin/pom.xml b/mall-admin/pom.xml index 3ab2eaf..94acd68 100644 --- a/mall-admin/pom.xml +++ b/mall-admin/pom.xml @@ -85,6 +85,12 @@ aliyun-sdk-oss 2.5.0 + + + net.logstash.logback + logstash-logback-encoder + 4.8 + diff --git a/mall-admin/src/main/java/com/macro/mall/component/WebLogAspect.java b/mall-admin/src/main/java/com/macro/mall/component/WebLogAspect.java index 5e5b5d1..50d3cb3 100644 --- a/mall-admin/src/main/java/com/macro/mall/component/WebLogAspect.java +++ b/mall-admin/src/main/java/com/macro/mall/component/WebLogAspect.java @@ -4,6 +4,7 @@ import com.macro.mall.bo.WebLog; import com.macro.mall.util.JsonUtil; import com.macro.mall.util.RequestUtil; import io.swagger.annotations.ApiOperation; +import net.logstash.logback.marker.Markers; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.Signature; @@ -22,7 +23,10 @@ import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Method; import java.lang.reflect.Parameter; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * 统一日志处理切面 @@ -53,7 +57,7 @@ public class WebLogAspect { //获取当前请求对象 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); - //记录请求信息(可以记录到数据库中) + //记录请求信息(通过logstash传入elasticsearch) WebLog webLog = new WebLog(); Object result = joinPoint.proceed(); Signature signature = joinPoint.getSignature(); @@ -73,7 +77,14 @@ public class WebLogAspect { webLog.setStartTime(startTime.get()); webLog.setUri(request.getRequestURI()); webLog.setUrl(request.getRequestURL().toString()); - LOGGER.info("{}", JsonUtil.objectToJson(webLog)); + Map logMap = new HashMap<>(); + logMap.put("url",webLog.getUrl()); + logMap.put("method",webLog.getMethod()); + logMap.put("parameter",webLog.getParameter()); + logMap.put("spendTime",webLog.getSpendTime()); + logMap.put("description",webLog.getDescription()); + // LOGGER.info("{}", JsonUtil.objectToJson(webLog)); + LOGGER.info(Markers.appendEntries(logMap),JsonUtil.objectToJson(webLog)); return result; } diff --git a/mall-admin/src/main/resources/logback-spring.xml b/mall-admin/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..4b7b6da --- /dev/null +++ b/mall-admin/src/main/resources/logback-spring.xml @@ -0,0 +1,14 @@ + + + + + + localhost:4560 + + + + + + + + diff --git a/mall-demo/pom.xml b/mall-demo/pom.xml index a6f865a..f330599 100644 --- a/mall-demo/pom.xml +++ b/mall-demo/pom.xml @@ -32,11 +32,11 @@ org.springframework.boot - spring-boot-starter-thymeleaf + spring-boot-starter-web org.springframework.boot - spring-boot-starter-web + spring-boot-starter-thymeleaf org.springframework.boot @@ -71,6 +71,11 @@ pagehelper-spring-boot-starter 1.2.3 + + net.logstash.logback + logstash-logback-encoder + 4.8 + diff --git a/mall-demo/src/main/resources/logback-spring.xml b/mall-demo/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..4b7b6da --- /dev/null +++ b/mall-demo/src/main/resources/logback-spring.xml @@ -0,0 +1,14 @@ + + + + + + localhost:4560 + + + + + + + + diff --git a/mall-demo/src/test/java/com/macro/mall/MallDemoApplicationTests.java b/mall-demo/src/test/java/com/macro/mall/MallDemoApplicationTests.java index eb22e8f..68052d4 100644 --- a/mall-demo/src/test/java/com/macro/mall/MallDemoApplicationTests.java +++ b/mall-demo/src/test/java/com/macro/mall/MallDemoApplicationTests.java @@ -1,16 +1,31 @@ package com.macro.mall; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.macro.mall.model.PmsProduct; import org.junit.Test; import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest public class MallDemoApplicationTests { - + private Logger logger = LoggerFactory.getLogger(MallDemoApplicationTests.class); @Test public void contextLoads() { } + @Test + public void testLogStash() throws Exception { + ObjectMapper mapper = new ObjectMapper(); + PmsProduct product = new PmsProduct(); + product.setId(1L); + product.setName("小米手机"); + product.setBrandName("小米"); + logger.info(mapper.writeValueAsString(product)); + logger.error(mapper.writeValueAsString(product)); + } + }