本项目已实现统一的接口报错日志记录功能,可以自动拦截并记录所有Controller层接口的异常信息。
位置: cn.com.goldenwater.dcproj.aspect.ControllerLogAspect
功能:
记录的详细信息:
- 请求URL
- 请求方法(GET/POST等)
- 类名.方法名
- IP地址(支持代理获取真实IP)
- 用户ID(从请求头获取)
- User-Agent
- 请求参数
- 响应结果
- 耗时(毫秒)
位置: cn.com.goldenwater.dcproj.intercepter.GlobalExceptionHandler
功能:
处理的异常类型:
MethodArgumentTypeMismatchException - 参数类型不匹配TypeMismatchException - 类型转换异常MissingServletRequestParameterException - 缺少必要参数BaseException - 业务异常NoHandlerFoundException - 请求路径不存在CheckException - 校验异常HttpRequestMethodNotSupportedException - 请求方法不支持Exception - 其他所有异常(兜底处理)根据 log4j.properties 配置,日志会输出到以下文件:
主日志文件: ./logs/dc-po.log
通用错误日志: ./logs/dc-po-error.log
接口错误专用日志: ./logs/interface-error.log ⭐
%d [%t] %-5p [%c] - %m%n
示例:
2026-05-29 10:30:45 [http-nio-9002-exec-1] ERROR [ERROR_LOGGER] -
========== 全局异常捕获 ==========
异常时间: 2026-05-29T10:30:45.123
异常类型: 系统异常
请求URL: /dc/pageoffice/hcbg/word/12345
请求方法: GET
查询字符串: 无
IP地址: 192.168.1.100
用户ID: user001
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)...
请求参数: 无
异常类名: java.lang.NullPointerException
异常消息: Cannot invoke method on null object
====================================
| 级别 | 用途 | 示例 |
|---|---|---|
| INFO | 正常请求流程 | 接口调用开始/结束、响应结果 |
| WARN | 警告信息 | 接口响应缓慢(>3秒) |
| ERROR | 错误信息 | 所有异常、系统故障 |
| DEBUG | 调试信息 | 详细参数、中间过程 |
========== 接口请求开始 ==========
请求URL: /dc/pageoffice/hcbg/show
请求方法: GET
类名.方法名: cn.com.goldenwater.dcproj.controller.dc.DcPageOfficeReportController.showIndex
IP地址: 192.168.1.100
请求参数: [adCode=350000]
响应结果: null
耗时: 125ms
========== 接口请求结束 ==========
========== 接口异常详情 ==========
异常时间: 2026-05-29T10:30:45.123
请求URL: /dc/pageoffice/hcbg/word/12345
请求方法: GET
类名.方法名: cn.com.goldenwater.dcproj.controller.dc.DcPageOfficeReportController.showWord
IP地址: 192.168.1.100
用户ID: user001
User-Agent: Mozilla/5.0...
请求参数: []
耗时: 2345ms
异常类型: java.lang.RuntimeException
异常消息: 数据库连接失败
====================================
# 专门的接口错误日志记录器
log4j.logger.ERROR_LOGGER=ERROR, ERROR_FILE
log4j.additivity.ERROR_LOGGER=false
# 错误日志文件配置
log4j.appender.ERROR_FILE = org.apache.log4j.DailyRollingFileAppender
log4j.appender.ERROR_FILE.File = ./logs/interface-error.log
log4j.appender.ERROR_FILE.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.ERROR_FILE.Append = true
log4j.appender.ERROR_FILE.Threshold = ERROR
如果需要调整性能警告阈值(默认3秒),修改 ControllerLogAspect.java:
// 如果耗时超过3秒,记录警告日志
if (duration > 3000) { // 修改这里的数值
logger.warn("【性能警告】接口响应缓慢 - URL: {}, 耗时: {}ms", uri, duration);
}
ERROR_LOGGER 记录到独立文件支持多种代理场景下的真实IP获取:
日志文件按天滚动,建议保留最近30天的日志:
# Linux/Mac
find ./logs -name "interface-error.log.*" -mtime +30 -delete
# Windows PowerShell
Get-ChildItem .\logs\interface-error.log.* | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } | Remove-Item
如果日志文件过大,可以考虑:
问题1: 没有生成日志文件
./logs 目录是否存在问题2: 日志内容不完整
问题3: 性能影响
# Linux/Mac
tail -n 100 ./logs/interface-error.log
# Windows
Get-Content .\logs\interface-error.log -Tail 100
# Linux/Mac
grep -c "全局异常捕获" ./logs/interface-error.log.2026-05-29.log
# Windows PowerShell
Select-String -Path .\logs\interface-error.log.2026-05-29.log -Pattern "全局异常捕获" | Measure-Object | Select-Object -ExpandProperty Count
# Linux/Mac
grep "/dc/pageoffice/hcbg/word" ./logs/interface-error.log
# Windows PowerShell
Select-String -Path .\logs\interface-error.log -Pattern "/dc/pageoffice/hcbg/word"
如有问题,请联系技术团队或查看详细代码注释。
更新日期: 2026-05-29
版本: v1.0