1. 基础搜索命令
grep 试试
bash
# 搜索包含error的行grep'error' application.log# 在多个文件中搜索grep'error' *.log# 忽略大小写grep-i'error' application.log# 显示行号grep-n'error' application.log# 显示匹配的前后几行grep-A3-B3'error' application.log # 前后各3行grep-C5'error' application.log # 前后各5行
2. 多条件筛选
与条件(AND)
bash
# 同时包含error和NullPointergrep'error' application.log |grep'NullPointer'# 使用正则表达式grep-E'error.*NullPointer|NullPointer.*error' application.log
或条件(OR)
bash
# 包含error或exceptiongrep-E'error|exception' application.log# 使用多个-e参数grep-e'error'-e'exception' application.log
非条件(NOT)
bash
# 包含error但不包含testgrep'error' application.log |grep-v'test'
3. 按时间范围筛选
使用sed按时间戳筛选
bash
# 筛选2024-01-15 10:00到11:00的日志sed-n'/2024-01-15 10:00:/,/2024-01-15 11:00:/p' application.log# 筛选某个时间点之后的日志sed-n'/2024-01-15 10:30:/,$p' application.log
使用awk按时间筛选
bash
# 筛选特定时间段的日志awk'/2024-01-15 10:00:/ && /2024-01-15 11:00:/' application.log
4. 实时日志监控
tail 命令
bash
# 实时查看日志tail-f application.log# 实时查看并过滤tail-f application.log |grep'error'# 从第1000行开始实时查看tail-n +1000 -f application.log
5. 统计和分析
错误统计
bash
# 统计错误出现次数grep-o'error' application.log |wc-l# 统计每种错误的数量grep'error' application.log |sort|uniq-c|sort-nr# 按小时统计错误grep'error' application.log |cut -d' '-f2|cut -d: -f1|sort|uniq-c
6. JAVA特定日志查询
搜索异常堆栈
bash
# 搜索异常及其堆栈信息grep-A20'Exception' application.log# 搜索特定包名的异常grep-A10'com\.company\.' application.log# 搜索Spring相关错误grep-E'BeanCreationException|TransactionException' application.log
线程相关查询
bash
# 搜索特定线程的日志grep'Thread-1' application.log# 搜索线程池相关grep-E'ThreadPool|Executor' application.log
7. 性能相关查询
搜索慢查询
bash
# 搜索执行时间超过阈值的日志grep'execution time' application.log |awk'$NF > 1000'# 搜索数据库慢查询grep-E'slow query|timeout' application.log
内存相关
bash
# 搜索内存相关日志grep-E'OutOfMemory|GC|Memory' application.log# 搜索垃圾回收grep'GC' application.log
8. 组合查询实战案例
案例1:查找特定时间段的错误
bash
# 查找今天10点到11点之间的errorsed-n'/2024-01-15 10:/,/2024-01-15 11:/p' application.log |grep'error'
案例2:实时监控特定用户的错误
bash
# 实时监控用户12345的错误日志tail-f application.log |grep'user_12345'|grep-E'error|exception'
案例3:统计接口响应时间分布
bash
# 提取接口响应时间并统计grep'API response time' application.log |awk'{print $NF}'|\sort-n|uniq-c|head-20案例4:查找事务相关的错误
bash
# 查找事务失败的相关日志grep-E'Transaction.*fail|rollback' application.log |grep-A10-B5'error'
9. 高级技巧
使用zgrep搜索压缩日志
bash
# 搜索gz压缩的日志文件zgrep 'error' application.log.1.gz# 在多个压缩文件中搜索zgrep 'error' *.gz
使用ack或ag(更快的替代品)
bash
# 安装ack或ag后使用ack 'error' application.log ag 'error' application.log
使用jq处理JSON日志
bash
# 如果日志是JSON格式grep'error' application.log | jq '.message, .stackTrace'
10. 常用命令组合
bash
# 查找最近1小时内的错误并按频率排序grep'error' application.log |\grep"$(date-d'1 hour ago''+%Y-%m-%d %H:%M')"|\sort|uniq-c|sort-nr# 监控日志并高亮显示关键词tail-f application.log |grep--color=auto -E'error|warning|exception'
这些命令覆盖了JAVA开发者日常排查问题的绝大多数场景,建议收藏并根据实际需求灵活组合使用。