Ondřej Kuzník wrote:
On Wed, Jul 14, 2021 at 03:40:35PM +0100, Howard Chu wrote:
> Howard Chu wrote:
>> Just some initial thoughts on what a new logging daemon should do for us:
> Scaling back to something easier for now:
> We'll use the existing Debug msgs as-is. The olcLogFile directive will specify
> path of a local logging file to write to. Currently, writing to this logfile is
> controlled by the -d debuglevel flags, not the -s sysloglevel flags. When a logfile
> is configured, debug messages go to both stderr and the logfile.
> We'll add a new option olcLogFileOnly (boolean), which will force messages to
> go to the logfile (and skip writing any to stderr). Since the point of using the
> local file logging facility is for performance, it will be desirable to avoid this
> double-writing of messages.
> We'll add an olcLogFileRotate option that specifies a logfile maxsize and
> interval, in megabytes and hours, respectively. Any message that would cause the
> current logfile to exceed the specified size will cause the file to be
> Any message that arrives after the specified number of hours will do likewise.
> Rotated files will be renamed to <logfile>.YYYYMMDDHHMM.
This sounds too complicated, you'd need to measure time and/or size
written everywhere and all the time.
Yes, that's exactly what
Solutions already exist that do this and everyone knows how to use
logrotate(8). We just need to register a signal (SIGHUP or SIGUSR1 are
used most often) and freopen(3) the stderr stream in the handler. No
locks needed, job done.
The reason we're discussing rotate functionality is because of a requirement that no
system dependencies are needed. So, we can't just tell people to use logrotate.
Also, freopen() is not async-signal-safe and so isn't legal inside a signal handler.
Nor is it
clear that freopen() is atomic within a threaded program. As such, you would still need
least a mutex.
-- Howard Chu
CTO, Symas Corp. http://www.symas.com
Director, Highland Sun http://highlandsun.com/hyc/
Chief Architect, OpenLDAP http://www.openldap.org/project/