logback+kafka+ELK实现日志记录(操作)

logback+kafka+ELK实现日志记录(操作)

2023年7月17日发(作者:)

logback+kafka+ELK实现⽇志记录(操作)logback+kafka+ELK实现⽇志记录前⾔环境准备配置Logbackpom⽂件改造新增t配置⽂件⼀下怎么去下载安装 我就不多说了,直接上代码。⽇志平台业务思路⽤户请求进⼊后台根据搜索的参数去查询内容 返回所有信息,返回json数据,当⽤户查看详情后 根据查询到的内容⾥⾯的traceId去es⾥查询和traceId相等的所有⽇志信息 最后返回给前端业务流程[外链图⽚转存失败,源站可能有防盗链机制,建议将图⽚保存下来直接上传⽇志查询结构图⽇志查询模块包括⽇志精准查询、⽇志的模糊查询。精准查询可以根据异常码、时间间隔,准确的查出该⽤户这段时间内做了什么事情。⽽模糊查询,可以根据关键字,查出这段时间内包含该关键字的⽇志记录。需要在yml⽂件⾥⾯添加kafka配置信息spring: kafka: bootstrap-servers: 10.10.3.107:9092 # kafka的ip和端⼝ consumer: group-id: kbaas-log #指定消费者是否⾃动提交偏移量,默认是true,设置false需要⾃⼰什么时候提交偏移量 enable-auto-commit: true #⾃动提交偏移量的频率 auto-commit-interval: 1000 #kafka的反序列化 key-deserializer: Deserializer #对应java数据类型 value-deserializer: Deserializer producer: #序列化 #设置izer为Serializer,设置value的序列化⽅式为字符串,我们可以发送string类型的消息 key-serializer: Serializer value-serializer: Serializer在pom⽂件导⼊log-spring-boot-starter的jar和kafka,logback的jar spring-kafka kafka-clients 1.0.0 wegener logback-kafka-appender 0.2.0-RC2 runtime k logback-classic 1.2.3 runtime kbaas-commons-core k logback-core k logstash-logback-encoder 5.1 创建⾃定义注解:Auth@Target({, })@Retention(E)@Documentedpublic @interface Auth { /** * @Description: 模块名称 * @Author PANCHAO * @param * @return * @Date 17:42 2020/5/12 */ String serve(); /** * @Description: 操作的描述 * @Author PANCHAO * @param * @return * @Date 17:42 2020/5/12 */ String default();}注解介绍/** * @Target能标注在注解类型上 * ElementType * TYPE

* 类和接⼝ * FIELD * 属性 * METHOD * ⽅法 * PARAMETER * ⽅法中的参数 * CONSTRUCTOR * 构造器 * ANNOTATION_TYPE * 注解类型 * PACKAGE * 包 * 指明了当前的注解类能标注在类的哪些部位 * @Target({,}) * 说明这个被标注的注解,既可以标注在类上也可以标注在⽅法上 */@Target()/** * 是否让@Description这个注解出现在帮助⽂档中 */@Documented/** * @Retention * 说明@Description注解的作⽤域 * * @Description这个注解在源⽂件中起作⽤ * * @Description这个注解即在源⽂件中起作⽤⼜在class⽂件中起作⽤ E @Description在源⽂件、class⽂件、运⾏的过程中都起作⽤ */@Retention(E)public @interface Description { String value();//属性}3.在⽅法上加⾃定义注解 @GetMapping("/test") @Auto(default = "操作内容",serve = "服务名") public void LogSearch() { }4.需要在启动类上加@EnableLogging注解@SpringBootApplication@EnableDiscoveryClient@EnableLoggingpublic class KbaasLogApplication { public static void main(String[] args) { (, args); }}logback配置⽂件修改 ${CONSOLE_LOG_PATTERN} UTF-8 UTC { "timestamp":"%d{yyyy-MM-dd HH:mm:ss}", "level": "%p", "logger" : "%logger", "logThread": "%thread", "serverName": "${server-name}", "message": "%{msg}", "traceId": "%X{traceId}", "stackTrace": "%ex", "ip": "%X{ip}", "host" :"%property", "pid": "${PID:-}", "url" :"%X{url}", "parameter": "%X{parameter}", "parentSpanId": "%X{X-B3-ParentSpanId:-}", "serve" : "%X{serve}", "default" : "%X{default}" } kbaas s=kafka的ip和端⼝ acks=1 =1000 =0 通过AOP做⽇志收集@Aspect@Componentpublic class LogAspect {public class LogAspect {

@Resource Slf4jUtils log;

/** *

拦截所有控制器⽅法 */ @Pointcut("execution(public * ller..*.*(..))") public void webLog() { }

@Around("webLog()") public Object aroundMethod(ProceedingJoinPoint joinPoint) throws Exception { /*result为连接点的放回结果*/ Object result = null; /*result为连接点的放回结果*/ ServletRequestAttributes attributes = (ServletRequestAttributes) uestAttributes(); HttpServletRequest request = uest(); // 记录下请求内容 //如果是表单,参数值是普通键值对。如果是application/json否则ameter是取不到的。 String ip = oteAddr(); String method = nature().getDeclaringTypeName() + "." + nature().getName(); JSONObject jsonObject = new JSONObject(); List argList = new ArrayList<>(); if ("application/json".equals(der("Content-Type"))) { for (Object arg : s()) { // request/response⽆法使⽤toJSON if (arg instanceof HttpServletRequest) { ("request"); } else if (arg instanceof HttpServletResponse) { ("response"); } else { ((arg)); } } } else { //记录请求的键值对 for (String key : ameterMap().keySet()) { JSONObject js = new JSONObject(); (key, ameter(key)); (js); } } ("url", uestURL().toString()); ("ip", ip); ("method", method); ("arg", (argList).toString());

/*执⾏⽬标⽅法*/ try { /*返回通知⽅法*/ result = d(); } catch (Throwable e) { /*异常通知⽅法*/ ("throwable", sage()); StackTraceElement[] sta = ckTrace(); StringBuffer str = new StringBuffer(); for (int i = 0; i < 15 && i < ; i++) { (sta[i] + "n"); } (ng()); //抛出异常 throw (Exception) StackTrace(); } /*后置通知*/ ("message", result); (String()); return result; }

}这⾥我通过MDC扩展了logback输出,所以需要在中新增这⼏个,如: "ip": "%X{ip}", "url": "%X{url}", "method": "%X{method}", "arg": "%X{arg}", "throwable": "%X{throwable}"以上是⽇志记录logback发送kafka的代码操作步骤

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689545333a264990.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信