You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python将DHCP日志文本正确转换为指定格式的JSON?

DHCP日志转JSON字段错位问题修复

问题场景

原始DHCP日志格式

Nov 28 06:26:45 server-01 dhcpd: DHCPDISCOVER from cc:d3:e2:7a:af:40 via 10.39.192.1 
Nov 28 06:26:45 server-01 dhcpd: DHCPOFFER on 10.39.255.253 to cc:d3:e2:7a:af:40 via 10.39.192.1

当前脚本错误输出

{
 "emp1": { "timestamp": "Nov", "Server": "28", "Service": "06:26:45", "Message": "server-01" },
 "emp2": { "timestamp": "Nov", "Server": "28", "Service": "06:26:45", "Message": "server-01" }
}

预期正确输出

{
  "timestamp":"Nov 28 06:26:45", 
  "Server":"server-01", 
  "Service":"dhcpd",
  "Message":"DHCPOFFER on 10.39.255.253 to cc:d3:e2:7a:af:40 via 10.39.192.1"
}

问题原因

你的脚本应该是直接按空格拆分日志行,但日志结构是[时间戳] [服务器名] [服务名]: [消息内容],时间戳和消息内容都包含空格,简单拆分会导致字段对应关系完全错位。

修复方案

使用正则表达式精准匹配日志的各个字段,确保每个部分被正确提取。以下是完整的Python脚本:

import re
import json

# 读取日志内容(实际场景可替换为读取文件)
log_content = """Nov 28 06:26:45 server-01 dhcpd: DHCPDISCOVER from cc:d3:e2:7a:af:40 via 10.39.192.1 
Nov 28 06:26:45 server-01 dhcpd: DHCPOFFER on 10.39.255.253 to cc:d3:e2:7a:af:40 via 10.39.192.1"""

parsed_entries = []
# 正则匹配规则:时间戳(含空格)、服务器名(无空格)、服务名(无空格直到冒号)、消息内容(剩余所有)
log_pattern = re.compile(r'^(\w{3} \d{2} \d{2}:\d{2}:\d{2}) (\S+) (\S+): (.*)$')

for line in log_content.strip().split('\n'):
    line = line.strip()
    if not line:
        continue
    match = log_pattern.match(line)
    if match:
        parsed_entry = {
            "timestamp": match.group(1),
            "Server": match.group(2),
            "Service": match.group(3),
            "Message": match.group(4)
        }
        parsed_entries.append(parsed_entry)

# 输出单条日志的JSON(对应预期格式)
if parsed_entries:
    print(json.dumps(parsed_entries[0], indent=2))

# 如果需要输出所有日志的数组格式,取消下面注释
# print(json.dumps(parsed_entries, indent=2))

代码说明

  1. 正则表达式:^(\w{3} \d{2} \d{2}:\d{2}:\d{2})匹配完整时间戳(如Nov 28 06:26:45);(\S+)匹配无空格的服务器名和服务名;(.*)捕获冒号后的全部消息内容。
  2. 日志处理:逐行读取日志,跳过空行,匹配成功后将字段映射到JSON对象中。
  3. 输出控制:可以选择输出单条日志(对应你的预期格式),或者所有日志组成的JSON数组。

运行后输出(单条示例)

{
  "timestamp": "Nov 28 06:26:45",
  "Server": "server-01",
  "Service": "dhcpd",
  "Message": "DHCPDISCOVER from cc:d3:e2:7a:af:40 via 10.39.192.1"
}

内容的提问来源于stack exchange,提问作者Abhiyantraka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 12:50:25