周末实战:我用 Trae Solo 写了一个日志解析 CLI 工具

上周末我想写一个小工具:把线上 log 转成更易读的格式,然后随手导成 CSV。 这篇文章主要分享一下我在这个过程中和 Trae Solo 的配合方式,看看它到底能帮开发者做到什么程度。


🖥️ 第一步:用 Trae Solo 构建目录骨架

我对 Trae Solo 的第一句话是这样的:

objectivec 复制代码
帮我创建一个 python CLI,用于解析日志文件,
输出为表格和 CSV,项目结构要清晰一些。

它给出的目录结构非常干净:

c 复制代码
cli_tool/
  main.py
  parser.py
  formatter.py
  exporter.py
  sample.log

而且会顺手解释每个文件的职责------不是那种"模板式说明",而是偏开发者风格的那种讲法,比如:

parser 负责把一行 log 拆解成 dict,避免逻辑掺到 main.py 里。

这个第一步的体验就很"对味",完全不像 AI 工具在"形式化输出"。


📄 第二步:让 Trae Solo 完成日志 Parser

我的日志格式大概是:

ini 复制代码
2025-02-14 12:10:33 INFO task finished duration=1.22
2025-02-14 12:12:01 WARN retry attempt=2

我只给了它两行,它直接写出了一个通用性不错的解析器。

python 复制代码
# parser.py
import re

LOG_PATTERN = re.compile(
    r'(?P<ts>[\d-: ]+) (?P<level>[A-Z]+) (?P<msg>.+)'
)

def parse_line(line: str):
    match = LOG_PATTERN.match(line)
    if not match:
        return None
    return match.groupdict()

重点是,它会自己检查边界情况,例如:

  • 行为空怎么办?
  • level 不在常规范围怎么办?
  • message 里如果有 key=value 应不应该拆?

Trae Solo 会主动提示你这些情况,但不会擅自加"复杂逻辑",完全尊重你的项目风格。


📊 第三步:表格输出(我本来没要求,它主动优化了体验)

原本我只要求:

复制代码
打印成"看得懂"的格式

Trae Solo 给我的输出效果大概是这样:

ini 复制代码
TIMESTAMP            LEVEL   MESSAGE
2025-02-14 12:10:33  INFO    task finished duration=1.22
2025-02-14 12:12:01  WARN    retry attempt=2

生成代码如下:

scss 复制代码
# formatter.py
def print_table(rows):
    if not rows:
        return

    headers = rows[0].keys()
    widths = {h: max(len(h), max(len(r[h]) for r in rows)) for h in headers}

    line = " ".join(h.ljust(widths[h]) for h in headers)
    print(line)

    for r in rows:
        print(" ".join(r[h].ljust(widths[h]) for h in headers))

这种输出方式很朴素,但确实够实用,终端查看效果很舒服。


📝 第四步:导出 CSV(一步到位)

我问它:

sql 复制代码
给我实现一个将 rows 导出到 CSV 的函数。

代码如下:

python 复制代码
# exporter.py
import csv

def to_csv(rows, path="output.csv"):
    if not rows:
        return

    with open(path, "w", newline="", encoding="utf-8") as f:
        writer = csv.DictWriter(f, fieldnames=rows[0].keys())
        writer.writeheader()
        writer.writerows(rows)

它还顺手补了一句提示:

如果未来字段会变,可以把 fieldnames 抽成参数,这样更灵活。

像极了一个团队里比较稳、比较专业的同事在提醒你写代码的方式。


🚀 最后:Trae Solo 帮我自动 glue 项目逻辑

当所有模块写完后,我对它说:

arduino 复制代码
把所有 module glue 到 main.py,并写一个 CLI。

它把整个工具组合成下面这样:

css 复制代码
# main.py
import argparse
from parser import parse_line
from formatter import print_table
from exporter import to_csv

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("file")
    parser.add_argument("--csv", action="store_true")
    args = parser.parse_args()

    rows = []
    with open(args.file) as f:
        for line in f:
            item = parse_line(line.strip())
            if item:
                rows.append(item)

    print_table(rows)

    if args.csv:
        to_csv(rows)
        print("CSV exported.")

if __name__ == "__main__":
    main()

整体风格简洁干净,真的是"下班前随手做的小工具"的那种感觉。


🎯 真实总结

这次实战让我发现 Trae Solo 很适合:

  • 写脚手架
  • 写工具类项目
  • 写小型 CLI/SDK
  • 重构模块
  • 做代码解释/设计讨论
  • 编写 UT
  • 辅助 debug

它的风格就是:

你说方向,它把事情干得稳稳当当。

不会乱写、不偷懒、不作妖。

整个过程没有卡壳,也没有"上下文乱掉",更没有过度工程化的情况,对短平快的开发特别友好。

相关推荐
星释43 分钟前
Rust 练习册 106:太空年龄计算器与宏的魔法
开发语言·后端·rust
用户05248324917643 分钟前
在 openEuler 上体验 JAX 高性能计算框架
后端
用户67361323685544 分钟前
openEuler 高效 AI 数据管道
后端
热爱跑步的恒川44 分钟前
OpenEuler上Docker Compose部署MySQL数据库
后端
侠客在xingkeit家top1 小时前
全技术栈企业级性能调优万花筒
后端
用户6736132368551 小时前
掌握 DNF,openEuler 软件安装速度翻倍!
后端
用户0524832491761 小时前
在 openEuler 上部署 YOLOv8 实现实时目标检测
后端
稚辉君.MCA_P8_Java1 小时前
Gemini永久会员 Java 返回最长有效子串长度
java·数据结构·后端·算法
极光代码工作室1 小时前
基于SpringBoot的停车场收费管理系统的设计与实现
spring boot·后端·产品运营