Re: FileNotFoundError thrown due to file name in file, rather than file itself
Op 12/11/2024 om 20:10 schreef Left Right via Python-list: > 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. What I most often do is use one logfile per day, with the date in the filename. Then simply delete all files older than 7 days, or 30 days, or whatever is useful for the task at hand. Not only does that sidestep any issues with rotating logs, but I also find it's very useful to have the date in the filename. 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. I would not use my scheme for something released to a wider audience. For in-house software though, I like that I can easily put each application's logs next to its other data files, and that I don't have to figure out how to get the system's own log infrastructure to work is I want it to. 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. I feel this is the worst of both worlds. Now your program doesn't have any control over filename or log expiration, and neither does your system's logging infrastructure. You just get one indefinitely growing log file. -- "You can fool some of the people all the time, and all of the people some of the time, but you cannot fool all of the people all of the time." -- Abraham Lincoln "You can fool too many of the people too much of the time." -- James Thurber -- https://mail.python.org/mailman/listinfo/python-list
Re: FileNotFoundError thrown due to file name in file, rather than file itself
Loris Bennett wrote at 2024-11-12 10:00 +0100: > ... >However, it strikes me as not immediately obvious that the logging file >must exist at this point. I can imagine a situation in which I want to >configure a default log file and create it if it missing. This is what happens usually: if you open a file with mode `a` or `w`, the file is created if it does not yet exist. Thus, a missing log file should not give you the `FileNotFound` exception. Look at the exception details: they should tell you what really was not found (maybe the directory for the logfile). -- https://mail.python.org/mailman/listinfo/python-list
Re: FileNotFoundError thrown due to file name in file, rather than file itself
On Wed, Nov 13 2024 at 07:36:04 PM, dieter.mau...@online.de wrote: > Loris Bennett wrote at 2024-11-12 10:00 +0100: >> ... >>However, it strikes me as not immediately obvious that the logging file >>must exist at this point. I can imagine a situation in which I want to >>configure a default log file and create it if it missing. > > This is what happens usually: > if you open a file with mode `a` or `w`, the file is created > if it does not yet exist. > > Thus, a missing log file should not give you the `FileNotFound` > exception. > Look at the exception details: they should tell you what really > was not found (maybe the directory for the logfile). It is possible a directory along the path does not exist. -- regards, kushal -- https://mail.python.org/mailman/listinfo/python-list
Re: FileNotFoundError thrown due to file name in file, rather than file itself
On 11/12/24 12:10 PM, Left Right via Python-list wrote: > 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. On any Unix system this is untrue. Rotating a log file is quite simple: simply rename the log file, then send a signal to the process to close the log file handle and open a new one. After that perhaps compress the rotated log file. Nothing is lost. This is standard practice in Unix. It is reliable. Perhaps the scenario you posit would happen on Windows. -- https://mail.python.org/mailman/listinfo/python-list
Re: FileNotFoundError thrown due to file name in file, rather than file itself
> On any Unix system this is untrue. Rotating a log file is quite simple: I realized I posted this without cc'ing the list: http://jdebp.info/FGA/do-not-use-logrotate.html . The link above gives a more detailed description of why log rotation on the Unix system is not only not simple, but is, in fact, unreliable. NB. Also, it really rubs me the wrong way when the word "standard" is used to mean "common" (instead of "as described in a standard document"). And when it comes to popular tools, oftentimes "common" is wrong because commonly the tool is used by amateurs rather than experts. In other words, you only reinforced what I wrote initially: plenty of application developers don't know how to do logging well. It also appears that they would lecture infra / ops people on how to do something that they aren't experts on, while the latter are :) -- https://mail.python.org/mailman/listinfo/python-list