Does python logging.handlers.RotatingFileHandler allow creation of a group writable log file?
Here is a slightly better solution. this overrides the _open method that is used. setting the umask before creating then returning it back to what it was.
class GroupWriteRotatingFileHandler(logging.handlers.RotatingFileHandler): def _open(self): prevumask=os.umask(0o002) #os.fdopen(os.open('/path/to/file', os.O_WRONLY, 0600)) rtv=logging.handlers.RotatingFileHandler._open(self) os.umask(prevumask) return rtv
I resorted to scanning the logging.handlers module and was unable to see any way to specify a different file permissions mode. So, I have a solution now based on extending the RotatingFileHandler as a custom handler. It was fairly painless, once I found some nice references to creating one. The code for the custom handler is below.
class GroupWriteRotatingFileHandler(handlers.RotatingFileHandler): def doRollover(self): """ Override base class method to make the new log file group writable. """ # Rotate the file first. handlers.RotatingFileHandler.doRollover(self) # Add group write to the current permissions. currMode = os.stat(self.baseFilename).st_mode os.chmod(self.baseFilename, currMode | stat.S_IWGRP)
I also discovered that to reference the custom handler from a logging config file, I had to bind my module to the logging namespace. Simple to do, but annoying.
from mynamespace.logging import custom_handlerslogging.custom_handlers = custom_handlers
References I found useful:binding custom handlers andcreating custom handlers
Here is a simple solution worked fine:
import osclass GroupWriteRotatingFileHandler(handlers.RotatingFileHandler): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) os.chmod(self.baseFilename, 0o0777) # You can change whatever permission you want here. # you can also change the group of the file: os.chown(self.baseFilename, uid, gid) # pass the user_id and group_id you want to set