Left Right <olegsivo...@gmail.com> writes: >> I am not entirely convinced by NB2. I am, in fact, a sort of sysadmin >> person and most of my programs write to a log file. The programs are >> also moderately complex, so a single program might access a database, >> query an LDAP server, send email etc., so potentially quite a lot can go >> wrong. They are also not programs whose output I would pipe to another >> command. What would be the advantage of logging to stderr? Quite apart >> from that, I find having a log file a useful for debugging when I am >> developing. > > First, the problem with writing to files is that there is no way to > make these logs reliable. This is what I mean by saying these are > unreliable: since logs are designed to grow indefinitely, the natural > response to this design property is log rotation. But, it's > impossible to reliably rotate a log file. There's always a chance > that during the rotation some log entries will be written to the file > past the point of rotation, but prior to the point where the next logs > volume starts.
> There are similar reliability problems with writing to Unix or > Internet sockets, databases etc. For different reasons, but at the > end of the day, whoever wants logs, they want them to be reliable. > Both simplicity and convention selected for stderr as the only and the > best source of logging output. If I understand correctly you are not saying that logrotate is less reliable that the other methods mentioned above. But in that case, reliability seems no more of a reason not to log to files than it is a reason not to write to a socket or to a database. > Programs that write their output to log files will always irritate > their users because users will have to do some detective work to > figure out where those files are, and in some cases they will have to > do administrative works to make sure that the location where the > program wants to store the log files is accessible, has enough free > space, is speedy enough etc. All your points regarding the work involved are valid, but many programs, such as MariaDB, OpenLDAP or SSSD, do write to a log file (and it is usually under /var/log or /var/log/something. So it seems like a common approach. Besides, I define the location of the logfile in the config file for the program (the problem in my original question arose from this filename in the config file not existing). So finding the location is not an issue. You have to find the config file, of course, but I think /etc or /usr/local/etc are fairly standard and my programs generally have an option '--config-file' anyway. > So, from the ops perspective, whenever I > come across a program that tries to write logs to anything other than > stderr, I make an earnest effort to throw that program into the gutter > and never touch it again. It's too much headache to babysit every > such program, to remember the location of the log files of every such > program, the required permissions, to provision storage. If you are > in that line of work, you just want all logs to go to the same place > (journal), where you can later filter / aggregate / correlate and > perform other BI tasks as your heart desires. That may be true in many cases, but those I am dealing with don't require much filtering beyond 'grep' and also don't require aggregation or correlation. > Of course, if you only administer your own computer, and you have low > single digits programs to run, and their behavior doesn't change > frequently, and you don't care to drop some records every now and > then... it's OK to log to files directly from a program. But then you > aren't really in the sysadmin / infra / ops category, as you are more > of a hobby enthusiast. What I do is indeed a bit of a niche, but I do get paid for this, so I would not consider myself a 'hobby enthusiast'. > Finally, if you want your logs to go to a file, and currently, your > only option is stderr, your shell gives you a really, really simple > way of redirecting stderr to a file. So, really, there aren't any > excuses to do that. I don't quite understand what your suggestion is. Do you mean that I should log to stderr and then run my program as my_program ... 2>&1 | logger ? Cheers, Loris -- This signature is currently under constuction. -- https://mail.python.org/mailman/listinfo/python-list