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

如何让rsyslog生成符合RFC4122格式的UUID?

解决rsyslog生成符合RFC4122规范UUID的问题

直接用property(name="uuid")输出的是32位无分隔符的UUID字符串,这是rsyslog默认的输出格式,不是配置错误。要生成带分隔符的小写标准UUID,有两种可行方案:

方案一:调用系统uuidgen命令(推荐)

修改你的/etc/rsyslog.d/mylog.conf配置为:

template(name="jsonFormat" type="list") {
    constant(value="{\"id\":\"")
    exec("uuidgen", format="jsonf", caseconversion="lower")
    constant(value="\"}")
}

uuidgen会直接生成符合RFC4122的带分隔符UUID,加上caseconversion="lower"可以把结果转为小写,完全匹配你想要的格式。

方案二:拆分内置UUID属性拼接分隔符

如果不想依赖外部命令,可以手动拆分rsyslog内置的32位UUID字符串,添加分隔符并转小写:

template(name="jsonFormat" type="list") {
    constant(value="{\"id\":\"")
    # 截取前8位并转小写
    property(name="uuid" field.length="8" format="jsonf" caseconversion="lower")
    constant(value="-")
    # 截取第9-12位
    property(name="uuid" field.offset="8" field.length="4" format="jsonf" caseconversion="lower")
    constant(value="-")
    # 截取第13-16位
    property(name="uuid" field.offset="12" field.length="4" format="jsonf" caseconversion="lower")
    constant(value="-")
    # 截取第17-20位
    property(name="uuid" field.offset="16" field.length="4" format="jsonf" caseconversion="lower")
    constant(value="-")
    # 截取剩余12位
    property(name="uuid" field.offset="20" field.length="12" format="jsonf" caseconversion="lower")
    constant(value="\"}")
}

修改配置后重启rsyslog服务,再查看日志文件,就能得到f2gccb4c-3901-42a4-b9db-vbd8b9fd0ed2这类符合RFC4122规范的UUID了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:15:25