Giter Club home page Giter Club logo

halo-log's Introduction

halo-log

介绍

halo-log是基于elasticssearch、zipkin、kafka、logstash、filebeat的用于监控接口性能、投递归集查询日志、记录监控用户行为的日志服务。

开始

基本配置

server:
  port: 8899
spring:
  application:
    name: example-app
  zipkin:
    base-url: 10.10.71.173:9411
    sender:
      type: kafka
    service:
      name: ${spring.application.name}
  sleuth:
    sampler:
      probability: 1.0
  kafka:
    bootstrap-servers: 10.10.71.173:9092
  main:
    allow-bean-definition-overriding: true
  profiles:
    active: dev

halo:
  log:
    enable: true

编写日志拦截器

只能存在一个,请勿在容器中多个AbstractLogInterceptor的子类

@Component("logInterceptor")
public class LogInterceptor extends AbstractLogInterceptor {

   @Override
   public String getCurrentUserName(HttpServletRequest httpServletRequest) {
      //因为是模拟请求,所以固定是用户张三发起的请求
      return "张三";
   }

   @Override
   public String getCurrentUserNo(HttpServletRequest httpServletRequest) {
      //因为是模拟请求,所以固定是用户张三发起的请求
      return "zhangsanno";
   }

}

编写日志监听器

可以存在多个

@Slf4j
@Component
public class ElasticSearchLogListener extends AbstractLogListener {

   public ElasticSearchLogListener() {
      super(new LogHandler() {
         @Override
         public void accept(LogEvent logEvent) {
            //模拟向ElasticSearch投递日志
            log.info("elasticSearch日志处理器接收到日志: LogEvent[{}]", logEvent);
         }
      });
   }

}
@Slf4j
@Component
public class KafkaLogListener extends AbstractLogListener {

   public KafkaLogListener() {
      super(new LogHandler() {
         @Override
         public void accept(LogEvent logEvent) {
            //模拟向kafka指定topic投递日志
            log.info("kafka日志处理器接收到日志: LogEvent[{}]", logEvent);
         }
      });
   }

}

编写service

@Slf4j
@Component
public class LogServiceImpl implements LogService {

   @HaloLog(action = "登录动作")
   @Override
   public String login(String param) {

      return "响应登录: param[ " + param + "]";
   }

   @HaloLog(action = "登出动作")
   @Override
   public String logout() {

      return "响应登出";
   }

   @HaloLog(action = "动作一")
   @Override
   public String actionOne() {
      return "响应动作1";
   }

   @HaloLog(action = "动作二")
   @Override
   public String actionTwo(String param1, String param2, String param3) {
      return "响应动作2: " + param1 + "," + param2 + "," + param3;
   }

   @HaloLog(action = "动作三")
   @Override
   public void actionThree() {

   }

   @HaloLog(action = "动作四")
   @Override
   public void actionFour(String param1, String param2) {

   }

   @HaloLog(action = "动作五")
   @Override
   public String actionFive(String param) {
      throw new RuntimeException("模拟发生异常情况");
   }

}

编写controller

@SpringBootApplication
@RestController
@RequestMapping("/example")
@Slf4j
public class App {

   public static void main(String[] args) {
      SpringApplication.run(App.class, args);
   }

   @Autowired
   private LogService logService;

   @GetMapping("/get/1")
   public void get1() {
      logService.login("aaaaaa");
   }

   @GetMapping("/get/2")
   public void get2() {
      logService.logout();
   }

   @GetMapping("/get/3")
   public void get3() {
      logService.actionOne();
   }

   @GetMapping("/get/4")
   public void get4() {
      logService.actionTwo("1", "2", "3");
   }

   @GetMapping("/get/5")
   public void get5() {
      logService.actionThree();
   }

   @GetMapping("/get/6")
   public void get6() {
      logService.actionFour("a", "b");
   }

   @GetMapping("/get/7")
   public void get7() {
      logService.actionFive("xxxxx");
   }

}

测试是否正常运行

1、运行请求方法一

image-20210328214459919

2、查看请求链路获取,traceId

image-20210414103543313

image-20210414103804336

3、根据traceId,到kibana查看存储在elasticsearch的日志

image-20210414104018653

halo-log's People

Contributors

halomzh avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.