logging.getLogger(name=None)
Return a logger with the specified name or, if name is None, return a logger which is the root logger of the hierarchy.
If specified, the name is typically a dot-separated hierarchical name like ‘a’, ‘a.b’.
All calls to this function with a given name return the same logger instance.
This means that logger instances never need to be passed between different parts of an application
RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False)
but if either of maxBytes or backupCount is zero, rollover never occurs,
so you generally want to set backupCount to at least 1, and have a non-zero maxBytes.
For example, with a backupCount of 5 and a base file name of app.log,
you would get app.log, app.log.1, app.log.2, up to app.log.5. The file being written to is always app.log.
When this file is filled, it is closed and renamed to app.log.1,
and if files app.log.1, app.log.2, etc. exist, then they are renamed to app.log.2, app.log.3 etc. respectively.