如何设置Caddyfile日志格式?

问题描述 投票:0回答:2

我使用 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 \"-\" \"-\""
logging syslog caddy caddyfile
2个回答
3
投票

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

所以你只需要使用

format-encoder
构建caddy
然后将日志格式更改为
formatted
,并附加
template
字符串。
template
的内容参考自caddy的结构化日志

例如,使用以下配置:

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

日志输出将如下所示:

1585597114.7687502 info ["curl/7.64.1"]

0
投票

当前(截至 8/2023)获取 apache 公共日志的正确(?!)方法是使用:

https://github.com/caddyserver/transform-encoder

您首先需要通过重新编译 caddy 来添加转换编码器,或者对于 2.4.4 及更高版本,您只需安装该软件包即可:

caddy add-package github.com/caddyserver/transform-encoder

然后,在 Caddyfile 中的每个服务器指令中”

www {
 <other config>
 log {
   output stdout  #your prefered output location
   format transform "{common_log}"
 }
}

您也可以按照完整拼写的格式执行此操作:

常用日志格式:

    log  {
       output stdout
       format transform `{request>remote_ip} - {request>user_id} [{ts}] "{request>method} {request>uri} {request>proto}" {status} {size}` {
            time_format "02/Jan/2006:15:04:05 -0700"
       }
    }

或组合格式(没有速记):

    log  {
       output stdout
       format transform `{request>remote_ip} - {request>user_id} [{ts}] "{request>method} {request>uri} {request>proto}" {status} {size} "{request>headers>Referer>[0]}" "{request>headers>User-Agent>[0]}" "host:{request>host}"` {
          time_format "02/Jan/2006:15:04:05 -0700"
       }
    }

也可以在全球范围内做到这一点,我发现很难找到示例 - 这是一个完整的配置示例: { log access-formatted { output stdout format transform "{common_log}" } } www { root * /www/ file_server log access-formatted } www1 { root * /www1/ file_server log access-formatted }

© www.soinside.com 2019 - 2024. All rights reserved.