If you do not want to bother with logrotare you can use a full python/gunicorn solution using python logging facilities.
Create a file named log.conf
with the content below. This will rotate the error log file and access log file daily and will keep the logs for 90 days. Log level is set to INFO.
Than, start gunicorn adding a command line parameter --log-config log.conf
. Remove the --access-logfile
, --error-logfile
and --log-level
parameters, as the log.conf will take care of everything.
More info on how to configure the logger is available in the Python documentation.
Here below is the content of log.conf
. For another example look at gunicorn source code.
HTH
[loggers]
keys=root, gunicorn.error, gunicorn.access
[handlers]
keys=console, error_file, access_file
[formatters]
keys=generic, access
[logger_root]
level=INFO
handlers=console
[logger_gunicorn.error]
level=INFO
handlers=error_file
propagate=1
qualname=gunicorn.error
[logger_gunicorn.access]
level=INFO
handlers=access_file
propagate=0
qualname=gunicorn.access
[handler_console]
class=StreamHandler
formatter=generic
args=(sys.stdout, )
[handler_error_file]
class=logging.handlers.TimedRotatingFileHandler
formatter=generic
args=('/var/log/gunicorn/gunicorn-error.log', 'midnight', 1, 90, 'utf-8')
[handler_access_file]
class=logging.handlers.TimedRotatingFileHandler
formatter=access
args=('/var/log/gunicorn/gunicorn-access.log', 'midnight', 1, 90, 'utf-8')
[formatter_generic]
format=%(asctime)s [%(process)d] [%(levelname)s] %(message)s
datefmt=%Y-%m-%d %H:%M:%S
class=logging.Formatter
[formatter_access]
format=%(message)s
class=logging.Formatter