Created
April 7, 2020 12:45
-
-
Save lizettepreiss/a7f7d431c12e6d74282addcc324eca33 to your computer and use it in GitHub Desktop.
Python logger configuration that either logs to File; or alternatively logs both to File and Console
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<project version="4"> | |
<component name="Encoding" addBOMForNewFiles="with NO BOM" /> | |
</project> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<module type="PYTHON_MODULE" version="4"> | |
<component name="NewModuleRootManager"> | |
<content url="file://$MODULE_DIR$" /> | |
<orderEntry type="jdk" jdkName="Python 3.7 (LoggingTemplate)" jdkType="Python SDK" /> | |
<orderEntry type="sourceFolder" forTests="false" /> | |
</component> | |
<component name="TestRunnerService"> | |
<option name="PROJECT_TEST_RUNNER" value="Unittests" /> | |
</component> | |
</module> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<project version="4"> | |
<component name="JavaScriptSettings"> | |
<option name="languageLevel" value="ES6" /> | |
</component> | |
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7 (LoggingTemplate)" project-jdk-type="Python SDK" /> | |
</project> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<project version="4"> | |
<component name="ProjectModuleManager"> | |
<modules> | |
<module fileurl="file://$PROJECT_DIR$/.idea/LoggingTemplate.iml" filepath="$PROJECT_DIR$/.idea/LoggingTemplate.iml" /> | |
</modules> | |
</component> | |
</project> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<project version="4"> | |
<component name="VcsDirectoryMappings"> | |
<mapping directory="$PROJECT_DIR$" vcs="Git" /> | |
</component> | |
</project> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import logging | |
logger = logging.getLogger('root') | |
class AProjectClassWithLogging: | |
def do_something(self): | |
logger.info("Doing Something") |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import logging | |
import logging.handlers | |
class FileAndConsoleLogger: | |
def setup_custom_logger(self, name, log_level, log_file): | |
""" | |
Setup logging to file only or file and console | |
:return: | |
""" | |
if log_level == "DEV_DEBUG": | |
log_level = "DEBUG" | |
return self.setup_console_and_file(name, log_file, log_level) | |
if log_level == "DEV_INFO": | |
log_level = "INFO" | |
return self.setup_console_and_file(name, log_file, log_level) | |
return self.setup_file_logger(name, log_file, log_level) | |
def setup_file_logger(self, name, log_file, log_level): | |
""" | |
Just log to file | |
:param log_file: | |
:param log_level: | |
:return: | |
""" | |
log_file_max_size = 1024 * 1024 # 1 MB | |
log_num_backups = 3 | |
log_format = "%(asctime)s [%(levelname)s]: %(filename)s(%(funcName)s:%(lineno)s) >> %(message)s" | |
log_filemode = "w" # w: overwrite; a: append | |
if log_level is None or log_level == "INFO": | |
logging.basicConfig(filename=log_file, format=log_format, filemode=log_filemode, level=logging.INFO) | |
else: | |
logging.basicConfig(filename=log_file, format=log_format, filemode=log_filemode ,level=logging.DEBUG) | |
rotate_file = logging.handlers.RotatingFileHandler( | |
log_file, maxBytes=log_file_max_size, backupCount=log_num_backups | |
) | |
logger = logging.getLogger(name) | |
logger.addHandler(rotate_file) | |
return logger | |
def setup_console_and_file(self, name, log_file, log_level): | |
""" | |
Log to file and console | |
:param log_file: | |
:param log_level: | |
:return: | |
""" | |
log_file_max_size = 1024 * 1024 * 20 # megabytes | |
log_num_backups = 3 | |
log_format = "%(asctime)s [%(levelname)s]: %(filename)s(%(funcName)s:%(lineno)s) >> %(message)s" | |
log_filemode = "w" # w: overwrite; a: append | |
if log_level is None or log_level == "INFO": | |
logging.basicConfig(filename=log_file, format=log_format, filemode=log_filemode, level=logging.INFO) | |
else: | |
logging.basicConfig(filename=log_file, format=log_format, filemode=log_filemode ,level=logging.DEBUG) | |
rotate_file = logging.handlers.RotatingFileHandler( | |
log_file, maxBytes=log_file_max_size, backupCount=log_num_backups | |
) | |
logger = logging.getLogger(name) | |
logger.addHandler(rotate_file) | |
# print log messages to console | |
consoleHandler = logging.StreamHandler() | |
logFormatter = logging.Formatter(log_format) | |
consoleHandler.setFormatter(logFormatter) | |
logger.addHandler(consoleHandler) | |
return logger | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from AProjectClassWithLogging import AProjectClassWithLogging | |
from FileAndConsoleLogger import FileAndConsoleLogger | |
log = FileAndConsoleLogger() | |
logger = log.setup_custom_logger('root', "DEV_DEBUG", "f:\\96_TEMP\logfile.log") | |
class ProjectEntryPoint: | |
def primaryMethod(self): | |
""" | |
This is the main method that does everything | |
:return: | |
""" | |
try: | |
logger.info("Primary Method...") | |
pc = AProjectClassWithLogging() | |
pc.do_something() | |
except Exception as e: | |
logger.exception("Exception") | |
def main(self): | |
""" | |
Main Entry Point | |
:return: | |
""" | |
self.primaryMethod() | |
if __name__ == '__main__': | |
proj = ProjectEntryPoint() | |
proj.main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment