def write(self, msg, force_flush=False, **kwargs): lname = "info" if "level" in kwargs: lname = normalise_level(kwargs["level"]) level = LEVELS[lname] sys_log_level = LEVELS[self.get_log_level()] sys_output_level = LEVELS[self.get_output_level()] if level > 0 and (level <= sys_log_level or level <= sys_output_level): if self._app_name is None: try: self.set_app_name(sys.argv[0]) except (AttributeError, IndexError): # argv is likely not accessible, use default value self.set_app_name('unknown-app') lines = msg.encode('utf8') if type(msg) == unicode else msg lines = lines.strip().split("\n") log = {} log["pid"] = self._pid log.update(kwargs) log["level"] = lname # if an exception object was passed in, add it to the log fields tbk = None if 'exception' in kwargs: import traceback tbk = traceback.format_exc() log['exception'] = unicode(kwargs['exception']).encode('utf8') log['traceback'] = tbk for line in lines: log["time"] = time.time() log["message"] = line if level <= sys_log_level: if self._log_file is None: self._init_log_file() self._log_file.write("{}\n".format(json.dumps(log))) if self._force_flush or force_flush: self.sync() if level <= sys_output_level: output_line = "{}[{}] {} {}\n".format( self._app_name, decorate_string_only_terminal(self._pid, "yellow"), decorate_with_preset(log["level"], log["level"], True), log["message"]) sys.stderr.write(output_line)
def write(self, msg, force_flush=False, **kwargs): lname = "info" if "level" in kwargs: lname = normalise_level(kwargs["level"]) level = LEVELS[lname] sys_log_level = LEVELS[self.get_log_level()] sys_output_level = LEVELS[self.get_output_level()] if level > 0 and (level <= sys_log_level or level <= sys_output_level): if self._app_name is None: self.set_app_name(sys.argv[0]) lines = msg.encode('utf8') if type(msg) == unicode else msg lines = lines.strip().split("\n") log = {} log["pid"] = self._pid log.update(kwargs) log["level"] = lname # if an exception object was passed in, add it to the log fields tbk = None if 'exception' in kwargs: import traceback tbk = traceback.format_exc() log['exception'] = unicode(kwargs['exception']).encode('utf8') log['traceback'] = tbk for line in lines: log["time"] = time.time() log["message"] = line if level <= sys_log_level: if self._log_file is None: self._init_log_file() self._log_file.write("{}\n".format(json.dumps(log))) if self._force_flush or force_flush: self.sync() if level <= sys_output_level: output_line = "{}[{}] {} {}\n".format( self._app_name, decorate_string_only_terminal(self._pid, "yellow"), decorate_with_preset(log["level"], log["level"], True), log["message"] ) sys.stderr.write(output_line)
def write(self, msg, force_flush=False, **kwargs): lname = "info" if "level" in kwargs: lname = normalise_level(kwargs["level"]) level = LEVELS[lname] sys_log_level = LEVELS[self.get_log_level()] sys_output_level = LEVELS[self.get_output_level()] if level > 0 and (level <= sys_log_level or level <= sys_output_level): if self._app_name is None: self.set_app_name(sys.argv[0]) lines = str(msg).strip().split("\n") log = {} log["pid"] = self._pid log.update(kwargs) log["level"] = lname for line in lines: log["time"] = time.time() log["message"] = line if level <= sys_log_level: if self._log_file is None: self._init_log_file() self._log_file.write("{}\n".format(json.dumps(log))) if self._force_flush or force_flush: self.sync() if level <= sys_output_level: output_line = "{}[{}] {} {}\n".format( self._app_name, decorate_string_only_terminal(self._pid, "yellow"), decorate_with_preset(log["level"], log["level"], True), log["message"] ) sys.stderr.write(output_line)