3proxy/doc/html
Vladimir Dubrovin 2052dc0a4f Logs: a thread and a queue for each log; build-time defaults
Once 3proxy runs (after the first configuration is in force, so after a
daemon's fork), each logger has a thread of its own writing from a
queue, and a client never waits for a log: ODBC, RADIUS, a full disk or
a pipe nobody reads hold up only that log's thread.

A queued line is fixed size: the part of struct clientparam logging
reads (everything before the filters: addresses, counters, names and
credentials, which hold no pointer it follows but srv), the time it was
logged, and its text, 256 bytes inline or a copy of its own if longer.
The thread formats it: struct tm is per call now, timechanged() and
dologname() included, and the type's format() takes the time.

minlogqueue (64) slots are allocated as the thread starts and kept,
maxlogqueue (4096) lines are queued at most. A line which finds the
queue full is dropped and counted on the last one queued; once that is
written, "Log X has its queue full, N records dropped" goes to where
errors go. A log which fails is no longer written to the error log
instead: its lines are dropped and counted while it is retried every
minute, and the count is told when it is open again, or when it was
reopened after failed writes.

A service which ended is stopped at once (srvstop(): sockets, listener,
its clients gone), but freed (srvrelease()) through its log's queue,
behind the lines which refer to it and to its configuration: the event
is part of struct srvparam, so a full queue never drops it. logfinish()
writes what is queued, 10 seconds at most, also as 3proxy exits on Unix.
Standalone services write as before, as each line comes.

LOGQUEUEMIN, LOGQUEUEMAX, DEFAULT_MAXCHILD, DEFAULT_POOLMAX,
DEFAULT_POOLTIMEOUT and POOLPERSERVICE (the automatic thread pool cap
for each service, which was 32 in the code) can be set with -D at build
time.

Tests: a log nobody reads (a FIFO) holds no client up, drops past its
queue and says so, and lines queued for a service a reload removed are
written as it formatted them; /dev/full says what it dropped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 19:41:48 +03:00
..
devel Pre-allocate client/server/tmp/etc buffers with client structure 2026-10-12 17:19:55 +03:00
man5 Logs: a thread and a queue for each log; build-time defaults 2026-10-23 19:41:48 +03:00
man8 Share one listening socket among services on one address 2026-10-15 12:31:50 +03:00
plugins Transparent moved to main code (TransparentPlugin removed), BSD pf support added 2026-08-26 14:34:44 +03:00
faqe.html make html formatting compatible with .md 2026-08-01 11:47:50 +03:00
faqr.html make html formatting compatible with .md 2026-08-01 11:47:50 +03:00
highload.html highload.html: kernel TLS, splice() heuristics, grace delay by traffic 2026-10-14 19:14:46 +03:00
howtoe.html Document that an IPv6 nserver address needs square brackets 2026-09-16 15:04:08 +03:00
howtor.html Document that an IPv6 nserver address needs square brackets 2026-09-16 15:04:08 +03:00
index.html Update HTML documentation from man pages 2026-08-22 11:28:42 +00:00
securityen.html Fix MitM for MacOS clients (openssl only) 2026-08-26 11:54:04 +03:00