Best practice is to use the logging
library, and leave everything to that library.
Each module uses its own logger:
import logging
log = logging.getLogger(__name__)
# ...
log.warn('Do not fnord the frazzle, faf the frobnir instead')
and configure logging in the main module; you can configure one log file, or direct output from specific modules to specific files if so desired.
By default loggers propagate everything on to the root logger, but using separate loggers per module gives you flexibility in the future when you want to set up more complex logging configurations.
You can adjust formatting and direct logging to other backends as needed. The formatter has a lot of options to adjust the generated message, make sure to include the logger name. The configuration options for formatting, filtering and handling are almost endless.
The point is that how many log files you have and what goes into those files is a matter of configuration. Adjust the configuration as your needs change. Start off with something simple; log everything to one file, and progress from there. By giving each module their own logging object, you can configure each logger separately, or stick to the default and leave everything to propagate to the root handler.