温馨提示×

strings如何分析日志

小樊
45
2026-08-17 11:35:14
栏目: 编程语言

分析日志时,strings 通常有两种常见含义,我分别说明,你可以对照看看你指的是哪一种。


一、Linux 命令 strings(从二进制/日志文件中提取可打印字符串)

适用场景

  • 日志是二进制文件、core dump、网络包、压缩日志
  • 想快速提取人类可读的字符串
  • 排查程序崩溃、异常日志、隐藏信息

基本用法

strings app.log

常用参数

strings -n 6 app.log        # 只显示长度 ≥ 6 的字符串
strings -t x app.log        # 显示字符串在文件中的偏移(十六进制)
strings -e l app.log        # 指定编码(l=16-bit little-endian)

实战示例

1️⃣ 从 core dump 中提取日志

strings core.1234 | grep ERROR

2️⃣ 查看程序中可能输出的日志字符串

strings /usr/bin/nginx | grep "connection"

适合

  • 应急排查
  • 验证程序是否包含某些日志/配置字符串

不适合

  • 结构化日志(JSON、时间、级别等分析)

二、编程语言中的字符串(string)分析日志(如 Python / Java / Go)

这是最常见、最推荐的方式,适合长期分析。


Python 示例(字符串 + 正则 + 结构化)

原始日志

2024-01-01 10:01:23 ERROR user login failed
2024-01-01 10:02:10 INFO user login success

字符串分析方式

import re

with open("app.log") as f:
    for line in f:
        if "ERROR" in line:
            print(line.strip())

正则提取(推荐)

pattern = r'(?P<time>\S+ \S+) (?P<level>\S+) (?P<msg>.*)'
for line in open("app.log"):
    m = re.match(pattern, line)
    if m and m.group("level") == "ERROR":
        print(m.group("msg"))

Java 示例(String 分析)

try (BufferedReader br = new BufferedReader(new FileReader("app.log"))) {
    String line;
    while ((line = br.readLine()) != null) {
        if (line.contains("ERROR")) {
            System.out.println(line);
        }
    }
}

三、日志分析的常见维度(无论用什么工具)

按级别

  • ERROR / WARN / INFO

按时间

  • 某时间段
  • 某分钟 QPS 分析

按关键字

  • exception
  • timeout
  • null pointer

按频次

grep "ERROR" app.log | sort | uniq -c | sort -nr

结构化(强烈推荐)

  • JSON
  • Log4j / Logback
  • ELK(Elasticsearch + Logstash + Kibana)

四、什么时候用 strings,什么时候不用?

场景 是否用 strings
二进制文件/崩溃文件
普通文本日志
结构化日志分析
快速应急排查

五、如果你愿意,我可以进一步帮你

你可以直接告诉我:

  1. 日志是 文本还是二进制
  2. 使用 Linux / Python / Java / Go
  3. 想分析什么(错误、性能、用户行为)

我可以给你针对性的分析脚本或命令

0