Esempio n. 1
0
    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)
Esempio n. 2
0
    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)
Esempio n. 3
0
    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)