首页 > 解决方案 > 如何设置 Caddyfile 日志格式?

问题描述

我使用 caddy 2 作为我的代理。我尝试设置我的球童日志格式。

localhost:80 {
    reverse_proxy example:80
    log {
        output net logstash:5140
        format single_field common_log
    }
}

在版本 1 上有预定义格式 https://caddyserver.com/v1/docs/log (来自旧版本) common_log结合

但是下面的这个配置不起作用。我认为,它已被弃用,就像他们的文档中所述。

localhost:80 {
    reverse_proxy example:80
    log {
        output net logstash:5140
        format single_field combined_log
    }
}

但是,我想继续使用旧格式的日志而不是 json 格式。然后我尝试了多种格式,但在他们的网站上并没有真正记录,在社区论坛中也找不到。

然后我尝试了多种解决方案。但是,它不起作用。

localhost:80 {
    reverse_proxy example:80
    log {
        output net logstash:5140
        format single_field "{remote} - {user} [{when}] \"{method} {uri} {proto}\" {status} {size} \"{>Referer}\" \"{>User-Agent}\""
    }
}

有人可以帮我吗?我所期望的是,格式看起来像这样。

"127.0.0.1 - - [10/Apr/2020:14:10:12 +0000] \"localhost\" \"GET / HTTP/1.1\" 200 236 \"-\" \"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:75.0) Gecko/20100101 Firefox/75.0\""

和 common_log 给我输出

"10.0.0.2 - - [11/Apr/2020:08:50:01 +0000] \"GET / HTTP/1.1\" 200 236\n"

自定义输入

format single_field "{remote} - {user} [{when}] \"{method} {uri} {proto}\" {status} {size} \"{>Referer}\" \"{>User-Agent}\""

"45.143.220.111 - - [11/Apr/2020:09:00:20 +0000] \"127.0.0.1\" \"GET /vtigercrm/vtigerservice.php HTTP/1.1\" 444 0 \"-\" \"libwww-perl/6.43\""
"45.143.220.111 - - [11/Apr/2020:09:00:20 +0000] \"_\" \"\\x16\\x03\\x01\\x02\\x00\\x01\\x00\\x01\\xFC\\x03\\x03\\x97s\\xD21\\x91\\xF6\\x88;\\x05\\x9C\\xFEs\\x99\\xB4\\x06\\xB6\\xC07Jd.aLC\\x9AR\\xE6\\x07\\x09\\x98\\xD6\\x1F\\x00\\x00\\xAC\\xC00\\xC0,\\xC0(\\xC0$\\xC0\\x14\\xC0\" 400 157 \"-\" \"-\""

标签: loggingsyslogcaddycaddyfile

解决方案


自 2020/06/20 起,您无法使用官方分发的自定义日志格式。
但是,他们有一个名为format-encoder的模块可以做到这一点。

所以你只需要caddy使用format-encoder构建。
然后将日志格式更改为formatted,并附加一个template字符串。
template内容参考了caddy 的结构化日志

例如,使用以下配置:

log {
  format formatted "{ts} {level} {request>headers>User-Agent}"
}

日志输出将如下所示:

1585597114.7687502 info ["curl/7.64.1"]

推荐阅读