周末实战:我用 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

它的风格就是:

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

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

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

相关推荐
zopple18 小时前
常见的 Spring 项目目录结构
java·后端·spring
cjy00011120 小时前
springboot的 nacos 配置获取不到导致启动失败及日志不输出问题
java·spring boot·后端
小江的记录本21 小时前
【事务】Spring Framework核心——事务管理:ACID特性、隔离级别、传播行为、@Transactional底层原理、失效场景
java·数据库·分布式·后端·sql·spring·面试
sheji341621 小时前
【开题答辩全过程】以 基于springboot的校园失物招领系统为例,包含答辩的问题和答案
java·spring boot·后端
程序员cxuan21 小时前
人麻了,谁把我 ssh 干没了
人工智能·后端·程序员
wuyikeer1 天前
Spring Framework 中文官方文档
java·后端·spring
Victor3561 天前
MongoDB(61)如何避免大文档带来的性能问题?
后端
Victor3561 天前
MongoDB(62)如何避免锁定问题?
后端
wuyikeer1 天前
Spring BOOT 启动参数
java·spring boot·后端
子木HAPPY阳VIP1 天前
Ubuntu 22.04 VMware 设置固定IP配置
人工智能·后端·目标检测·机器学习·目标跟踪