{"id":28729771,"url":"https://github.com/didi/logicommon","last_synced_at":"2025-06-15T17:11:01.127Z","repository":{"id":38255633,"uuid":"409057682","full_name":"didi/LogiCommon","owner":"didi","description":"Java版 认证、鉴权、管理、任务调度通用功能组件","archived":false,"fork":false,"pushed_at":"2021-11-03T07:14:28.000Z","size":10524,"stargazers_count":218,"open_issues_count":3,"forks_count":62,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-04-11T09:16:17.899Z","etag":null,"topics":["elasticjob","security","utils"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/didi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-09-22T03:56:33.000Z","updated_at":"2025-02-12T06:39:27.000Z","dependencies_parsed_at":"2022-08-23T20:30:29.917Z","dependency_job_id":null,"html_url":"https://github.com/didi/LogiCommon","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/didi/LogiCommon","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didi%2FLogiCommon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didi%2FLogiCommon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didi%2FLogiCommon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didi%2FLogiCommon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/didi","download_url":"https://codeload.github.com/didi/LogiCommon/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didi%2FLogiCommon/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260016055,"owners_count":22946321,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["elasticjob","security","utils"],"created_at":"2025-06-15T17:11:00.367Z","updated_at":"2025-06-15T17:11:01.108Z","avatar_url":"https://github.com/didi.png","language":"Java","readme":"# 项目概述\nLogiCommon 公共模块，包括Logi-security、Logi-job 。LogiCommon 会尽量保持与具体业务的解耦，以简单易用，轻量高效，尽可能减少用户感知的方式做到多平台适配，同时提供可扩展的接口，让用户自由的扩展 LogiCommon 的功能，以满足具体的业务。\n- Logi-security 主要提供基础功能服务，主要分为认证、鉴权、管理三部分功能。其中认证包括了登录、注册、注销等功能；鉴权包括了确定用户的界面权限、资源权限的功能；管理包括了用户、项目、角色、部门的基本操作的功能和操作日志、消息通知的调控功能；\n- Logi-job 是分布式的定时调度服务\n## 1.logi-security\n### 1.1 介绍\nlogi-security 提供项目大多都需要基础的一些功能（用户、角色、权限、登录、注册、操作记录），这些功能开发简单但是开发起来又比较繁琐和有一定的工作量（开发、测试、联调、编写接口文档等等），所以打算把这类的功能抽取出来，整合进 Logi-security，让这些项目开发人员更加专注于核心功能，避免时间花费在繁琐的基础功能的开发。\n### 1.2 功能支持\n主要提供：用户、项目、角色、部门、界面权限、资源权限、操作日志、消息通知\n- 用户模块：提供了注册、登录、认证功能，以及用户信息的展示等基础功能；\n- 项目模块：提供了创建、删除、展示、更改运行状态等功能；\n- 部门模块：提供了部门信息导入、部门树形结构展示等功能；\n- 界面权限模块：提供界面权限信息的导入、界面功能展示控制等功能；\n- 资源权限模块：提供对项目具体资源的权限管理；\n- 操作日志模块：记录用户的操作记录，展示记录；\n- 消息通知模块：用户拥有的角色、拥有的资源权限变更等通知。\n### 1.3 使用方式\n#### 1.3.1 添加Maven\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eio.github.zqrferrari\u003c/groupId\u003e\n    \u003cartifactId\u003elogi-security-spring-boot-starter\u003c/artifactId\u003e\n    \u003cversion\u003e1.6.3\u003c/version\u003e\n\u003c/dependency\u003e\n```\n#### 1.3.2 配置文件\nlogi-security基于springBoot框架开发，需添加以下配置信息：\n```properties\nlogi.security.app-name: ES\nlogi.security.resource-extend-bean-name: myResourceExtendImpl\n\n# ---------------数据源信息---------------\nlogi.security.username=root\nlogi.security.password=123456\nlogi.security.url=jdbc:mysql://localhost:3306/logi_security?useUnicode=true\u0026characterEncoding=utf-8\u0026useSSL=false\u0026serverTimezone=Asia/Shanghai\nlogi.security.driver-class-name=com.mysql.jdbc.Driver\n```\n- app-name：表示应用的名称，涉及到 logi-security 的数据库操作都会带上这个条件（查询、保存等操作）；\n- resource-extend-bean-name：resourceExtend的实现类在spring容器bean的名称，logi-security 中资源权限管理模块，需要获取具体资源的信息，所以用户需实现 ResourceExtend 接口并指定实现类在spring容器中bean的名称；\n#### 1.3.3 需要实现接口\n用户可选的实现 ResourceExtend 接口，如果不实现，则资源权限管理模块的功能不能完整使用。接口详情见代码\n#### 1.3.4 导入数据\nlogi-security相关界面并没提供【角色权限元数据、资源类别数据、部门信息数据、操作日志相关（操作页面、操作对象、对象分类）】的创建功能，logi-security提供了数据导入的接口。\n建议全部都导入，简单的数据也行。\n## 2.logi-job\n### 2.1 介绍\n是分布式的定时调度服务。\n### 2.2 功能支持\n主要提供：分布式定时调度服务、任务管理、分布式锁等功能\n- 分布式定时调度服务：添加指定注解，并实现规定的接口，编写待调度的方法；\n- 任务管理模块：提供查看任务列表、任务详情、手动执行任务、变更任务状态、任务日志等功能；\n- 分布式锁机制：确保多系统下，对于临界资源的保护，和调节调度秩序，防饿死。\n### 2.3 使用方式\n#### 2.3.1 添加Maven\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eio.github.zqrferrari\u003c/groupId\u003e\n    \u003cartifactId\u003elogi-job-spring-boot-starter\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.10\u003c/version\u003e\n\u003c/dependency\u003e\n```\n#### 2.3.2 配置信息\nlogi-job基于springBoot框架开发，在使用的时候需要在配置文件中增加几项配置信息，如下：\n```yaml\nspring:\n  logi-job:\n    jdbc-url: jdbc:mysql://localhost:3306/es_manager_test?useUnicode=true\u0026characterEncoding=utf8\u0026jdbcCompliantTruncation=true\u0026allowMultiQueries=true\u0026useSSL=false\n    username: root\n    password: 123456\n    driver-class-name: com.mysql.jdbc.Driver\n    max-lifetime: 60000\n    init-sql: true\n    init-thread-num: 10\n    max-thread-num: 20 #调度最大线程数\n    log-exipre: 3  #日志保存天数，以天为单位\n    app_name: arius_test02 #应用名，用户隔离机器和环境\n    claim-strategy: com.didiglobal.logi.job.core.consensual.RandomConsensual #调度策略，有两种随机和广播，默认是随机\n```\n#### 2.3.3 使用样例\n```java\npackage com.didichuxing.datachannel.arius.admin.task.metadata;\n\nimport com.didichuxing.datachannel.arius.admin.metadata.job.cluster.monitor.esMonitorJob.MonitorJobHandler;\nimport com.didiglobal.logi.job.annotation.Task;\nimport com.didiglobal.logi.job.common.TaskResult;\nimport com.didiglobal.logi.job.core.job.Job;\nimport com.didiglobal.logi.job.core.job.JobContext;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\n\n// @Task 注解自带了 @Component\n@Task(name = \"esMonitorJob\", description = \"monitor调度任务\", cron = \"0 0/1 * * * ? *\", autoRegister = true)\npublic class ESMonitorJobTask implements Job {\n    private static final Logger LOGGER = LoggerFactory.getLogger(ESMonitorJobTask.class);\n\n    @Autowired\n    private MonitorJobHandler monitorJobHandler;\n\n    @Override\n    public TaskResult execute(JobContext jobContext) throws Exception {\n        LOGGER.info(\"class=ESMonitorJobTask||method=execute||msg=start\");\n        monitorJobHandler.handleJobTask(\"\");\n        return TaskResult.SUCCESS;\n    }\n}\n```\n## 3.logi-log\n### 3.1 介绍\n集成了：logi-log-log、logi-log-log4j2。\n### 3.2 添加maven\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eio.github.zqrferrari\u003c/groupId\u003e\n    \u003cartifactId\u003elogi-log-log\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.4\u003c/version\u003e\n\u003c/dependency\u003e\n```\n### 3.2 logi-log-log\nlogi-log-log是基于slf4j封装的组件，为用户提供日志相关功能。各个业务可以选择log4j，logback，log4j2，只要配置上桥接就可以使用。\n#### 3.2.1 Trace功能\nTrace功能，是为了根据一个flag，把单个请求的日志关联起来。\n1. 入口设置flag\n\u003cimg src=\"picture/101.png\" alt=\"101.png\" style=\"zoom:50%;\" /\u003e\n2. Logger对象\n\u003cimg src=\"picture/100.png\" alt=\"100.png\" style=\"zoom:50%;\" /\u003e\n3. 打印日志\n\u003cimg src=\"picture/102.png\" alt=\"102.png\" style=\"zoom:50%;\" /\u003e\n4. 日志打印结果\n![103.png](picture/103.png)\n5. 根据flag，查询单次请求相关日志\n![104.png](picture/104.png)\n另，新建的线程里打印日志，是不会自动带上flag的，如果需要，可以将flag传入runnable对象。\n\u003cimg src=\"picture/105.png\" alt=\"105.png\" style=\"zoom:50%;\" /\u003e\n#### 3.2.2 日志聚合\n1. 日志聚合\n\n  是为了防止频繁打印日志，影响应用的运行，特别是在异常场景下，每条数据都会触发异常。聚合是通过key来实现聚合的，可以自定义key来实现多种聚合。\n  \u003cimg src=\"picture/106.png\" alt=\"106.png\" style=\"zoom: 50%;\" /\u003e\n\n2. 日志采样\n    \u003cimg src=\"picture/107.png\" alt=\"107.png\" style=\"zoom:50%;\" /\u003e\n\n3. 聚合结果\n\n  count表示同一个key出现多少次\n  ![108.png](picture/108.png)\n### 3.3 logi-log-log4j2\nlogi-log-log4j2，是基于log4j2 2.9.1封装的，支持日志发送到kafka，以及过滤重复日志功能。\n#### 3.3.1 日志发送到kafka\n配置kafka appender和layout\n\u003cimg src=\"picture/109.png\" alt=\"109.png\" style=\"zoom:50%;\" /\u003e\n配置appender\n\n```xml\n\u003cAppenders\u003e\n    \u003cKafka name=\"kafka\" topic=\"${log.kafka.topic}\" syncSend=\"false\"\u003e\n        \u003cSimpleMqLogEventPatternLayout pattern=\"%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %L - %msg%xEx%n\"\n                                       appName=\"${log.app.name}\"/\u003e\n        \u003cProperty name=\"bootstrap.servers\"\u003e\n            ${log.kafka.bootstrap}\n        \u003c/Property\u003e\n    \u003c/Kafka\u003e\n \n\u003c/Appenders\u003e\n\u003cLoggers\u003e\n    \u003clogger name=\"errorLogger\" additivity=\"false\"\u003e\n        \u003clevel value=\"error\"/\u003e\n        \u003cAppenderRef ref=\"errorLogger\"/\u003e\n        \u003cAppenderRef ref=\"kafka\"/\u003e\n    \u003c/logger\u003e\n\u003c/Loggers\u003e\n```\n日志输出形如：\n![110.png](picture/110.png)\n也可以选择直接发送原始日志：\n```xml\n\u003cKafka name=\"kafka\" topic=\"${log.kafka.topic}\" syncSend=\"false\"\u003e\n    \u003cPatternLayout pattern=\"%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %L - %msg%xEx%n\"/\u003e\n    \u003cProperty name=\"bootstrap.servers\"\u003e\n        ${log.kafka.bootstrap}\n    \u003c/Property\u003e\n\u003c/Kafka\u003e\n```\n#### 3.3.2 过滤重复日志\n配置appender即可\n\u003cimg src=\"picture/111.png\" alt=\"111.png\" style=\"zoom:50%;\" /\u003e\n打印日志\n\n\u003cimg src=\"picture/112.png\" alt=\"112.png\" style=\"zoom:40%;\" /\u003e\n\n日志输出如，count代表1分钟内，同样的日志出现几次\n\u003cimg src=\"picture/113.png\" alt=\"113.png\" style=\"zoom:50%;\" /\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdidi%2Flogicommon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdidi%2Flogicommon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdidi%2Flogicommon/lists"}