[squid-users] logformat: override %tg, but keep subsecond resolution

Amos Jeffries squid3 at treenet.co.nz
Thu Apr 23 09:56:31 UTC 2020


On 23/04/20 2:29 am, Andreas Hasenack wrote:
> Hi,
> 
> I'm trying to override the %tg log format but keep its subsecond time
> resolution.
> 
> As a reminder, %tg gives you this:
> 
> 22/Apr/2020:14:14:18.360
> 
> I would like it to be
> 
> 2020-04-22 14:14:18.360 +0000
> 
> I tried this first: %tg{%F %H:%M:%S %z}
> 
> That gave me 2020-04-22 14:14:18 +0000, so it's just missing the
> milliseconds. And this is where I couldn't figure it out anymore.
> 
> Some combinations I tried, ranging from thoughtful experiments to just
> random attempts:
> %tg{%F %H:%M:%S %z}.%03tu -> 2020-04-22 14:14:18 +0000.360
> %tg{%F %H:%M:%S.%03f %z} -> 2020-04-22 14:14:18.%03f +0000
> %tg{%F %H:%M:%S.%03tu %z} -> ??? 2020-04-22 14:14:18.00  u +0000
> 

The content of {} brackets on Squid time macros is all arguments for
strftime(). Supported codes are system locale dependent. Documentation
can be found at <http://www.cplusplus.com/reference/ctime/strftime/>

The characters outside {} are Squid logformat codes. Documentation for
those can be found at <http://www.squid-cache.org/Doc/config/logformat/>


> What's the right format string I should use? I also checked
> strftime(3) but couldn't figure it out.
> 

strftime() displays UNIX time values. Unix time_t has a 1 second
resolution, so sub-second values are not supported.

To inject a custom value into the middle of a standardized time format
string you need multiple %code's for Squid. Like so:

  %tg{%F %H:%M:%S}.%03tu %tg{%z}


Or, since the timezone is always expected to be "+0000" you can just
configure this and save CPU cycles looking up the timezone offset:

 logformat customTime %tg{%F %H:%M:%S}.%03tu +0000


HTH
Amos


More information about the squid-users mailing list