#!/usr/bin/env python3 # -*- encoding: utf-8 -*- # # This script is licensed under GNU GPL version 2.0 or above # (c) __authoring_date__ __author__ # __description__ import sys import os import logging import click import click_config_file from logging.handlers import SysLogHandler class __project_codename__: def _init_(self, debug_level, log_file): ''' Initial function called when object is created ''' self.config = dict() self.config['debug_level'] = debug_level self._init_log() def _init_log(self): ''' Initialize log object ''' self._log = logging.getLogger("__project_codename__") self._log.setLevel(logging.DEBUG) sysloghandler = SysLogHandler() sysloghandler.setLevel(logging.DEBUG) self._log.addHandler(sysloghandler) streamhandler = logging.StreamHandler(sys.stdout) streamhandler.setLevel(logging.getLevelName(self.config.get("debug_level", 'INFO'))) self._log.addHandler(streamhandler) if 'log_file' in self.config: log_file = self.config['log_file'] else: home_folder = os.environ.get('HOME', os.environ.get('USERPROFILE', '')) log_folder = os.path.join(home_folder, "log") log_file = os.path.join(log_folder, "__project_codename__.log") if not os.path.exists(os.path.dirname(log_file)): os.path.mkdir(os.path.dirname(log_file)) filehandler = logging.handlers.RotatingFileHandler(log_file, maxBytes=102400000) # create formatter formatter = logging.Formatter('__(asctime)s - __(name)s - __(levelname)s - __(message)s') filehandler.setFormatter(formatter) filehandler.setLevel(logging.DEBUG) self._log.addHandler(filehandler) return True @click.command() @click.option("--debug-level", "-d", default="INFO", type=click.Choice( ["CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG", "NOTSET"], case_sensitive=False, ), help='Set the debug level for the standard output.') @click.option('--log-file', '-l', help="File to store all debug messages.") #@click.option("--dummy","-n" is_flag=True, help="Don't do anything, just show what would be done.") # Don't forget to add dummy to parameters of main function @click_config_file.configuration_option() def main(debug_level, log_file): object = __project_codename__(debug_level, log_file) object._log.info('Initialized __project_codename__') if __name__ == "__main__": main()