def new_instance(cls, log_type=None, settings=None): if settings["class"]: if settings["class"].startswith("logging.handlers."): from mo_logs.log_usingThread import StructuredLogger_usingThread from mo_logs.log_usingHandler import StructuredLogger_usingHandler return StructuredLogger_usingThread( StructuredLogger_usingHandler(settings)) else: with suppress_exception: from mo_logs.log_usingLogger import make_log_from_settings return make_log_from_settings(settings) # OH WELL :( if log_type == "logger": from mo_logs.log_usingLogger import StructuredLogger_usingLogger return StructuredLogger_usingLogger(settings) if log_type == "file" or settings.file: return StructuredLogger_usingFile(settings.file) if log_type == "file" or settings.filename: return StructuredLogger_usingFile(settings.filename) if log_type == "console": from mo_logs.log_usingThread import StructuredLogger_usingThread return StructuredLogger_usingThread( StructuredLogger_usingStream(STDOUT)) if log_type == "mozlog": from mo_logs.log_usingMozLog import StructuredLogger_usingMozLog return StructuredLogger_usingMozLog( STDOUT, coalesce(settings.app_name, settings.appname)) if log_type == "stream" or settings.stream: from mo_logs.log_usingThread import StructuredLogger_usingThread return StructuredLogger_usingThread( StructuredLogger_usingStream(settings.stream)) if log_type == "elasticsearch" or settings.stream: from mo_logs.log_usingElasticSearch import ( StructuredLogger_usingElasticSearch, ) return StructuredLogger_usingElasticSearch(settings) if log_type == "email": from mo_logs.log_usingEmail import StructuredLogger_usingEmail return StructuredLogger_usingEmail(settings) if log_type == "ses": from mo_logs.log_usingSES import StructuredLogger_usingSES return StructuredLogger_usingSES(settings) if log_type.lower() in ["nothing", "none", "null"]: from mo_logs.log_usingNothing import StructuredLogger return StructuredLogger() Log.error("Log type of {{config|json}} is not recognized", config=settings)
def set_logger(cls, logger): if cls.logging_multi: cls.logging_multi.add_log(logger) else: from mo_logs.log_usingThread import StructuredLogger_usingThread old_log, cls.main_log = cls.main_log, StructuredLogger_usingThread( logger) old_log.stop()
def start(cls, settings=None): """ RUN ME FIRST TO SETUP THE THREADED LOGGING http://victorlin.me/2012/08/good-logging-practice-in-python/ log - LIST OF PARAMETERS FOR LOGGER(S) trace - SHOW MORE DETAILS IN EVERY LOG LINE (default False) cprofile - True==ENABLE THE C-PROFILER THAT COMES WITH PYTHON (default False) USE THE LONG FORM TO SET THE FILENAME {"enabled": True, "filename": "cprofile.tab"} profile - True==ENABLE pyLibrary SIMPLE PROFILING (default False) (eg with Profiler("some description"):) USE THE LONG FORM TO SET FILENAME {"enabled": True, "filename": "profile.tab"} constants - UPDATE MODULE CONSTANTS AT STARTUP (PRIMARILY INTENDED TO CHANGE DEBUG STATE) """ global _Thread if not settings: return settings = wrap(settings) Log.stop() cls.settings = settings cls.trace = coalesce(settings.trace, False) if cls.trace: from mo_threads import Thread as _Thread _ = _Thread # ENABLE CPROFILE if settings.cprofile is False: settings.cprofile = {"enabled": False} elif settings.cprofile is True: if isinstance(settings.cprofile, bool): settings.cprofile = {"enabled": True, "filename": "cprofile.tab"} if settings.cprofile.enabled: from mo_threads import profiles profiles.enable_profilers(settings.cprofile.filename) if settings.profile is True or (isinstance(settings.profile, Mapping) and settings.profile.enabled): Log.error("REMOVED 2018-09-02, Activedata revision 3f30ff46f5971776f8ba18") # from mo_logs import profiles # # if isinstance(settings.profile, bool): # profiles.ON = True # settings.profile = {"enabled": True, "filename": "profile.tab"} # # if settings.profile.enabled: # profiles.ON = True if settings.constants: constants.set(settings.constants) if settings.log: cls.logging_multi = StructuredLogger_usingMulti() for log in listwrap(settings.log): Log.add_log(Log.new_instance(log)) from mo_logs.log_usingThread import StructuredLogger_usingThread cls.main_log = StructuredLogger_usingThread(cls.logging_multi)
def start(cls, trace=False, cprofile=False, constants=None, logs=None, app_name=None, settings=None): """ RUN ME FIRST TO SETUP THE THREADED LOGGING https://fangpenlin.com/posts/2012/08/26/good-logging-practice-in-python/ :param trace: SHOW MORE DETAILS IN EVERY LOG LINE (default False) :param cprofile: True==ENABLE THE C-PROFILER THAT COMES WITH PYTHON (default False) USE THE LONG FORM TO SET THE FILENAME {"enabled": True, "filename": "cprofile.tab"} :param constants: UPDATE MODULE CONSTANTS AT STARTUP (PRIMARILY INTENDED TO CHANGE DEBUG STATE) :param logs: LIST OF PARAMETERS FOR LOGGER(S) :param app_name: GIVE THIS APP A NAME, AND RETURN A CONTEXT MANAGER :param settings: ALL THE ABOVE PARAMTERS :return: """ global _Thread # REQUIRED FOR trace if app_name: return LoggingContext(app_name) Log.stop() cls.settings = settings cls.trace = trace if trace: from mo_threads import Thread as _Thread _ = _Thread # ENABLE CPROFILE if cprofile is False: cprofile = settings.cprofile = Data(enabled=False) elif cprofile is True: cprofile = settings.cprofile = Data(enabled=True, filename="cprofile.tab") if is_data(cprofile) and cprofile.enabled: from mo_threads import profiles profiles.enable_profilers(settings.cprofile.filename) if constants: _constants.set(constants) logs = coalesce(settings.log, logs) if logs: cls.logging_multi = StructuredLogger_usingMulti() for log in listwrap(logs): Log._add_log(Log.new_instance(log)) from mo_logs.log_usingThread import StructuredLogger_usingThread old_log, cls.main_log = cls.main_log, StructuredLogger_usingThread( cls.logging_multi) old_log.stop()