如何用Squid只logging特定的结果/状态码?

默认情况下,Squidlogging所有访问信息,包括“成功”和“失败”。 我只logging“失败”。 换句话说,我想做一些事情,比如只loggingSquid DENIED结果代码,或者,不要logging成功的HTTP事务。 无论我如何定义“成功”和“失败”,我需要能够更具体地定义Squid将写入日志文件的访问信息。 有人知道怎么做这个吗?

您可以使用ACL来实现此function,但有一些技巧。

主要的技巧是确保你不会意外地检查http_status代码的二进制连接。 Squid从不会看到二进制连接的状态码,并会在cache.log为二进制连接抛出一个警告,看看你是否搞砸了。

这里是一个示例configuration,它将写入所有http成功和redirect,以及所有完成打开套接字的二进制连接(除此之外,我们没有成功/失败的可见性)到success.log ,以及所有http失败代码和二进制连接无法打开socket到failure.log

 acl CONNECT method CONNECT # http status codes (http://wiki.squid-cache.org/SquidFaq/SquidLogs) acl success_codes http_status 100-199 # informational acl success_codes http_status 200-299 # successful transactions acl success_codes http_status 300-399 # redirection acl failure_codes http_status 400-499 # client error acl failure_codes http_status 500-599 # server error acl success_hier hier_code HIER_DIRECT acl failure_hier hier_code HIER_NONE acl failure all-of CONNECT failure_hier acl failure all-of !CONNECT failure_codes acl success all-of CONNECT success_hier acl success all-of !CONNECT success_codes access_log stdio:/usr/local/squid/var/logs/success.log logformat=squid success access_log stdio:/usr/local/squid/var/logs/failure.log logformat=squid failure 

这个configuration的问题是,它禁用了默认的日志文件,并不会logging任何不符合这两个ACL之一的东西。 现在,我非常自信,我已经写好ACL,并且已经考虑了所有可能性,但是这仍然会让我感到紧张,所以您可能需要添加另一个日志文件来捕捉任何发生错误两个ACL

 access_log stdio:/usr/local/squid/var/logs/unknown.log logformat=squid !success !failure 

或者你可以定义success并设置失败!success

 acl CONNECT method CONNECT # http status codes (http://wiki.squid-cache.org/SquidFaq/SquidLogs) acl success_codes http_status 100-199 # informational acl success_codes http_status 200-299 # successful transactions acl success_codes http_status 300-399 # redirection acl success_hier hier_code HIER_DIRECT acl failure_hier hier_code HIER_NONE acl success all-of CONNECT success_hier acl success all-of !CONNECT success_codes access_log stdio:/usr/local/squid/var/logs/success.log logformat=squid success access_log stdio:/usr/local/squid/var/logs/failure.log logformat=squid !success