mirror of
https://github.com/3proxy/3proxy.git
synced 2026-10-28 22:05:48 +08:00
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> |
||
|---|---|---|
| .. | ||
| 3proxy_crypt.8 | ||
| 3proxy.8 | ||
| 3proxy.cfg.5 | ||
| ftppr.8 | ||
| imapp.8 | ||
| pop3p.8 | ||
| proxy.8 | ||
| smtpp.8 | ||
| socks.8 | ||
| tcppm.8 | ||
| tlspr.8 | ||
| udppm.8 | ||