# auto-log
[auto-log](https://github.com/houbb/auto-log) 是一款为 java 设计的自动日志监控框架。
[![Build Status](https://travis-ci.com/houbb/auto-log.svg?branch=master)](https://travis-ci.com/houbb/auto-log)
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.houbb/auto-log/badge.svg)](http://mvnrepository.com/artifact/com.github.houbb/auto-log)
[![](https://img.shields.io/badge/license-Apache2-FF0080.svg)](https://github.com/houbb/auto-log/blob/master/LICENSE.txt)
[![Open Source Love](https://badges.frapsoft.com/os/v2/open-source.svg?v=103)](https://github.com/houbb/auto-log)
## 创作目的
经常会写一些工具,有时候手动加一些日志很麻烦,引入 spring 又过于大材小用。
所以希望从从简到繁实现一个工具,便于平时使用。
## 特性
- 基于注解+字节码,配置灵活
- 自动适配常见的日志框架
- 支持编程式的调用
- 支持注解式,完美整合 spring
- 支持整合 spring-boot
- 支持慢日志阈值指定,耗时,入参,出参,异常信息等常见属性指定
- 支持 traceId 特性
- 支持类级别定义注解
- 支持自定义拦截器和过滤器
- 支持 spring aop 注解切面自定义
- 支持类似 dubbo filter 的拦截器链式调用
- 支持日志条件输出,支持日志自适应输出
- 支持日志的超长截断+丢弃策略,避免极端情况的性能问题
## 变更日志
> [变更日志](https://github.com/houbb/auto-log/blob/master/CHANGELOG.md)
V0.11.0 变更
- 支持日志的超长截断+丢弃策略,避免极端情况的性能问题
## 拓展阅读
[日志开源组件(一)java 注解结合 spring aop 实现自动输出日志](https://houbb.github.io/2023/08/06/auto-log-01-overview)
[日志开源组件(二)java 注解结合 spring aop 实现日志traceId唯一标识](https://houbb.github.io/2023/08/06/auto-log-02-trace-id)
[日志开源组件(三)java 注解结合 spring aop 自动输出日志新增拦截器与过滤器](https://houbb.github.io/2023/08/06/auto-log-03-filter)
[日志开源组件(四)如何动态修改 spring aop 切面信息?让自动日志输出框架更好用](https://houbb.github.io/2023/08/06/auto-log-04-dynamic-aop)
[日志开源组件(五)如何将 dubbo filter 拦截器原理运用到日志拦截器中?](https://houbb.github.io/2023/08/06/auto-log-05-dubbo-interceptor)
[日志开源组件(六)Adaptive Sampling 自适应采样](https://mp.weixin.qq.com/s/9JH3WfR6Y474LCbY2mZxZQ)
[高性能日志脱敏组件(一)java 日志脱敏框架 sensitive,优雅的打印脱敏日志](https://mp.weixin.qq.com/s/xzQNDF7s705iurk7N0uheQ)
[高性能日志脱敏组件(二)金融用户敏感数据如何优雅地实现脱敏?](https://mp.weixin.qq.com/s/ljChFiNLzV6GLaUDjehA0Q)
[高性能日志脱敏组件(三)日志脱敏之后,无法根据信息快速定位怎么办?](https://mp.weixin.qq.com/s/tZqOH_8QTKrD1oaclNoewg)
[高性能日志脱敏组件(四)基于 log4j2 插件实现统一日志脱敏,性能远超正则替换](https://mp.weixin.qq.com/s/ZlWRqT7S92aXFuy-l9Uh3Q)
[高性能日志脱敏组件(五)已支持 log4j2 和 logback 插件](https://mp.weixin.qq.com/s/3ARK6PW7pyUhAbO2ctnndg)
# 快速开始
## maven 引入
```xml
<dependency>
<group>com.github.houbb</group>
<artifact>auto-log-core</artifact>
<version>0.12.0</version>
</dependency>
```
## 入门案例
```java
UserService userService = AutoLogHelper.proxy(new UserServiceImpl());
userService.queryLog("1");
```
- 日志如下
```
信息: [TID=9d5ad747342e4f909d42001f1419c58b][METHOD=com.github.houbb.auto.log.test.service.impl.UserServiceImpl.queryLog:java.lang.String#查询日志][PARAM=["1"]][RESULT="result-1"][COST=607 ms]
```
### 属性说明
| 属性 | 说明 |
|:-------|:------|
| TID | 日志跟踪号 |
| METHOD | 方法签名 |
| PARAM | 方法入参 |
| RESULT | 方法出参 |
| COST | 方法耗时 |
| SLOW-THRESHOLD | 慢日志阈值 |
| EXCEPTION | 方法异常 |
### 代码
其中方法实现如下:
- UserService.java
```java
public interface UserService {
String queryLog(final String id);
}
```
- UserServiceImpl.java
直接使用注解 `@AutoLog` 指定需要打日志的方法即可。
```java
public class UserServiceImpl implements UserService {
@Override
@AutoLog(description = "查询日志", enableTraceId = true)
public String queryLog(String id) {
return "result-"+id;
}
}
```
# 注解说明
## @AutoLog
核心注解 `@AutoLog` 的属性说明如下:
| 属性 | 类型 | 默认值 | 说明 |
|:--|:--|:--|:--|
| enable | boolean | true | 是否启用 |
| param | boolean | true | 是否打印入参 |
| result | boolean | true | 是否打印出参 |
| costTime | boolean | false | 是否打印耗时 |
| exception | boolean | true | 是否打印异常 |
| slowThresholdMills | long | -1 | 当这个值大于等于 0 时,且耗时超过配置值,会输出慢日志 |
| description | string |"" | 方法描述,默认选择方法名称 |
| paramFilter | Class | WebParamFilter | 入参过滤器,支持自定义 |
| traceId | Class | Id.class | 日志跟踪号生成策略 |
| enableTraceId | boolean | true | 是否启用 traceId 的变化 |
使用建议,在入口的方法中设置 `enableTraceId=true`,会统一设置 traceId,贯穿整个日志周期。 底层依赖的 service/biz 层等,设置为 false 即可。
# 自定义策略
## 自定义日志拦截器(interceptor)
### 内置拦截器
`AutoLogCommonFilter` 默认日志增强实现
### 定义
直接实现 `CommonFilter` 类,并且实现对应的方法即可。
```java
package com.github.houbb.auto.log.test.interceptor;
import com.github.houbb.auto.log.core.constant.AutoLogAttachmentKeyConst;
import com.github.houbb.common.filter.annotation.FilterActive;
import com.github.houbb.common.filter.api.CommonFilter;
import com.github.houbb.common.filter.api.Invocation;
import com.github.houbb.common.filter.api.Invoker;
import com.github.houbb.common.filter.api.Result;
import com.github.houbb.common.filter.exception.CommonFilterException;
/**
* 自定义日志拦截器
* @author binbin.hou
* @since 0.0.12
*/
@FilterActive(order = 1)
public class MyAutoLogInterceptor implements CommonFilter {
@Override
public Result invoke(Invoker invoker, Invocation invocation) throws CommonFilterException {
final String tid = (String) invocation.getAttachment(AutoLogAttachmentKeyConst.AUTO_LOG_TRACE_ID);
System.out.println("my test filter before " + tid);
Result result = invoker.invoke(invocation);
System.out.println("my test filter after " + tid);
return result;
}
}
```
我们可以通过 `@FilterActive(order = 1)` 指定拦截器执行的顺序,数值越小,越先执行。
`invocation.getAttachment(AutoLogAttachmentKeyConst.AUTO_LOG_TRACE_ID)` 可以获取 invocation 中传递的属性。
### 使用
SPI 指定
创建文件 `resources\META-INF\services\com.github.houbb.common.filter.api.CommonFilter`
在文件中指定我们定义的接口:
```
com.github.houbb.auto.log.test.interceptor.MyAutoLogInterceptor
```
### 测试效果
```
my test filter before 2bc181d4efb8408e948072022c9227c0
my test filter after 2bc181d4efb8408e948072022c9227c0
八月 06, 2023 8:13:19 下午 com.github.houbb.auto.log.core.support.interceptor.chain.AutoLogCommonFilter info
信息: [TID=2bc181d4efb8408e948072022c9227c0][METHOD=com.github.houbb.auto.log.test.service.impl.UserServiceImpl.queryLog:java.lang.String#查询日志][PARAM=["1"]][RESULT="result-1"][COST=535 ms]
```
## 自定义入参过滤器(paramFilter)
### 内置
`WebParamFilter` 主要用于过滤 HttpRequest HttpServlet 等无法直接 JSON 序列化的对象。
### 自定义
直接继承 `AbstractParamFilter` 类实现对应的方法即可。
```java
public class MyParamFilter extend
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Java SSM项目是一种使用Java语言和SSM框架(Spring + Spring MVC + MyBatis)开发的Web应用程序。SSM是一种常用的Java开发框架组合,它结合了Spring框架、Spring MVC框架和MyBatis框架的优点,能够快速构建可靠、高效的企业级应用。 1. Spring框架:Spring是一个轻量级的Java开发框架,提供了丰富的功能和模块,用于开发企业级应用。它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的Web框架,用于开发Web应用程序。它采用MVC(Model-View-Controller,模型-视图-控制器)的架构模式,将应用程序分为模型层、视图层和控制器层,提供了处理请求、渲染视图和管理流程的功能。 3. MyBatis框架:MyBatis是一个持久层框架,用于与数据库进行交互。它提供了一种将数据库操作与Java对象映射起来的方式,避免了手动编写繁琐的SQL语句,并提供了事务管理和缓存等功能,简化了数据库访问的过程
资源推荐
资源详情
资源评论
收起资源包目录
Java的自动日志工具(高分项目).zip (128个子文件)
release.bat 1KB
cgit.bat 247B
github_init.bat 147B
com.github.houbb.common.filter.api.CommonFilter 506B
com.github.houbb.common.filter.api.CommonFilter 63B
spring.factories 132B
com.alibaba.dubbo.rpc.Filter 222B
.gitignore 262B
AutoLogCommonFilter.java 12KB
MultipartFile.java 4KB
AutoLogSampleConditionAdaptive.java 4KB
AutoLogSampleConditionAdaptiveSchedule.java 4KB
AutoLogAop.java 3KB
AutoLog.java 3KB
AbstractAutoLogCommonFilter.java 3KB
AutoLogMethodInterceptor.java 3KB
AutoLogBs.java 3KB
AbstractAutoLogDubboFilter.java 2KB
DynamicProxy.java 2KB
AbstractAutoLogContext.java 2KB
AutoLogBsTest.java 2KB
AutoLogObjectHandlers.java 2KB
AutoLogAdvice.java 2KB
SimpleAutoLog.java 2KB
CglibProxy.java 1KB
AutoLogObjectHandlerBigMemoryDiscard.java 1KB
IAutoLogContext.java 1KB
AutoLogProxy.java 1KB
AutoLogDynamicPointcut.java 1KB
AutoLogObjectHandlerInit.java 1KB
AutoLogBsRateTest.java 1KB
WebParamFilter.java 1KB
AutoLogCoreDiscardTest.java 1KB
UserServiceImpl.java 1KB
SampleRateServiceImpl.java 1KB
MyAutoLogInterceptor.java 1KB
AutoLogInvoker.java 1KB
SpringDynamicServiceTest.java 1002B
SpringPrivateServiceTest.java 989B
AutoLogInvocation.java 976B
NoneProxy.java 966B
SpringServiceTest.java 895B
AutoLogScheduleInterceptor.java 891B
AutoLogCommonFilterContext.java 891B
AutoLogHttpServerServletFilter.java 868B
AutoLogDubboContext.java 864B
InnerRandomUtil.java 826B
AutoLogAdviceContext.java 825B
AutoLogJmsProducerInterceptor.java 820B
AutoLogJmsConsumerInterceptor.java 819B
SpringAopAutoLogContext.java 805B
AutoLogObjectHandlerDubboResult.java 717B
AutoLogSampleConditionRate.java 708B
AutoLogObjectHandlerWebDiscard.java 708B
AbstractParamFilter.java 702B
DefineService.java 700B
SimpleAutoLogContext.java 690B
AutoLogRuntimeException.java 682B
PrivateUserServiceImpl.java 638B
AutoLogException.java 635B
ParamFilterContext.java 632B
AutoLogHttpClientInterceptor.java 608B
AutoLogAttachmentKeyConst.java 597B
AbstractAutoLogObjectHandler.java 596B
SpringDynamicConfig.java 552B
EnableAutoLog.java 516B
DiscardService.java 498B
AutoLogCacheInterceptor.java 479B
AutoLogDubboConsumerFilter.java 463B
AutoLogAutoConfig.java 452B
UserService.java 451B
AutoLogDubboProviderFilter.java 440B
ClassAnnotationService.java 431B
MyParamFilter.java 429B
AutoLogAopConfig.java 425B
SpringConfig.java 420B
AutoLogSampleConditions.java 420B
IAutoLogObjectHandler.java 395B
AutoLogObjectHandlerRaw.java 363B
DefaultAutoLogGlobalConfig.java 350B
MenuServiceImpl.java 338B
IAutoLog.java 334B
IParamFilter.java 315B
IAutoLogSampleCondition.java 314B
InputStreamSource.java 293B
package-info.java 273B
IParamFilterContext.java 260B
IAutoLogProxy.java 258B
AutoLogFilterChainConst.java 247B
AutoLogCommonGlobalAnnotation.java 243B
MyAddressService.java 232B
MyUserService.java 223B
package-info.java 114B
package-info.java 101B
package-info.java 53B
package-info.java 53B
package-info.java 47B
package-info.java 44B
package-info.java 42B
package-info.java 41B
共 128 条
- 1
- 2
资源评论
若明天不见
- 粉丝: 1w+
- 资源: 272
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功