Does python logging.handlers.RotatingFileHandler allow creation of a group writable log file? Does python logging.handlers.RotatingFileHandler allow creation of a group writable log file? python python

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