File: exception_logger.py

package info (click to toggle)
odoo 18.0.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 878,716 kB
  • sloc: javascript: 927,937; python: 685,670; xml: 388,524; sh: 1,033; sql: 415; makefile: 26
file content (34 lines) | stat: -rw-r--r-- 761 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

from io import StringIO

import logging
import sys

_logger = logging.getLogger(__name__)


class ExceptionLogger:
    """
    Redirect any unhandled python exception to the logger to keep track of them in the log file.
    """
    def __init__(self):
        self._buffer = StringIO()

    def write(self, message):
        self._buffer.write(message)
        if message.endswith('\n'):
            self._flush_buffer()

    def _flush_buffer(self):
        self._buffer.seek(0)
        _logger.error(self._buffer.getvalue().rstrip('\n'))
        self._buffer = StringIO()  # Reset the buffer

    def flush(self):
        if self._buffer.tell() > 0:
            self._flush_buffer()

    def close(self):
        self.flush()

sys.stderr = ExceptionLogger()