|
15 | 15 | """ |
16 | 16 | import logging |
17 | 17 | import sys |
| 18 | +import os |
18 | 19 | from locale import nl_langinfo, CODESET |
19 | | -from os import fdopen, dup |
20 | 20 |
|
21 | | -from charon.constants import CHARON_LOGGING_FMT |
| 21 | +from charon.constants import CHARON_LOGGING_FMT, DEFAULT_ERRORS_LOG |
| 22 | +from charon.utils.product_version import ProductVersion |
22 | 23 |
|
23 | 24 |
|
24 | 25 | class EncodedStream(object): |
25 | 26 | # The point of this class is to force python to encode UTF-8 |
26 | 27 | # over stderr. Normal techniques were not working, so we dup |
27 | 28 | # the file handler and force it UTF-8. :-( |
28 | 29 | def __init__(self, fileno, encoding): |
29 | | - self.binarystream = fdopen(dup(fileno), 'wb') |
| 30 | + self.binarystream = os.fdopen(os.dup(fileno), 'wb') |
30 | 31 | self.encoding = encoding |
31 | 32 |
|
32 | 33 | def write(self, text): |
@@ -74,13 +75,16 @@ def set_logging(name="charon", level=logging.DEBUG, handler=None): |
74 | 75 | hdlr.setFormatter(formatter) |
75 | 76 |
|
76 | 77 |
|
77 | | -def getLogger(name: str) -> logging: |
78 | | - error_log = "./errors.log" |
| 78 | +def set_log_file_handler(logger: logging, pv: ProductVersion): |
| 79 | + log_loc = os.getenv("ERROR_LOG_LOCATION") |
| 80 | + error_log = DEFAULT_ERRORS_LOG |
| 81 | + if pv.get_product() and pv.get_version(): |
| 82 | + error_log = "".join([pv.get_product(), "-", pv.get_version(), ".", DEFAULT_ERRORS_LOG]) |
| 83 | + if log_loc: |
| 84 | + os.makedirs(log_loc, exist_ok=True) |
| 85 | + error_log = os.path.join(log_loc, error_log) |
79 | 86 | handler = logging.FileHandler(error_log) |
80 | | - formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') |
| 87 | + formatter = logging.Formatter(fmt=CHARON_LOGGING_FMT) |
81 | 88 | handler.setFormatter(formatter) |
82 | 89 | handler.setLevel(logging.WARN) |
83 | | - |
84 | | - logger = logging.getLogger(name) |
85 | 90 | logger.addHandler(handler) |
86 | | - return logger |
|
0 commit comments