use logging library
This commit is contained in:
parent
b0628543f8
commit
8cc696c43d
4 changed files with 95 additions and 2 deletions
17
poetry.lock
generated
17
poetry.lock
generated
|
@ -1,5 +1,20 @@
|
|||
# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand.
|
||||
|
||||
[[package]]
|
||||
name = "arrow"
|
||||
version = "1.2.3"
|
||||
description = "Better dates & times for Python"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
files = [
|
||||
{file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"},
|
||||
{file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
python-dateutil = ">=2.7.0"
|
||||
|
||||
[[package]]
|
||||
name = "black"
|
||||
version = "23.7.0"
|
||||
|
@ -785,4 +800,4 @@ test = ["pytest", "pytest-grpc"]
|
|||
[metadata]
|
||||
lock-version = "2.0"
|
||||
python-versions = "^3.11"
|
||||
content-hash = "9756b224be33434f1cf2d6702163ed6e6ffb37f40d608ea6be5e0a832d5e8bfe"
|
||||
content-hash = "9018e6f85ff65e2974f8b58e32d6ba6d30f0ba362b6f65f76ade31cd1e83378d"
|
||||
|
|
|
@ -18,6 +18,7 @@ influxdb-client = "^1.37.0"
|
|||
pypng = "^0.20220715.0"
|
||||
typing-extensions = "^4.7.1"
|
||||
prometheus-client = "^0.17.1"
|
||||
arrow = "^1.2.3"
|
||||
|
||||
[tool.poetry.group.dev.dependencies]
|
||||
black = "^23.7.0"
|
||||
|
|
|
@ -20,6 +20,9 @@ from prometheus_client import Info
|
|||
from prometheus_client import MetricsHandler
|
||||
|
||||
import starlink_grpc_tools.dish_common as dish_common
|
||||
from starlink_grpc_tools.logging import setup_logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Terminated(Exception):
|
||||
|
@ -316,6 +319,7 @@ class GatherMetrics(threading.Thread):
|
|||
|
||||
|
||||
def main():
|
||||
setup_logging()
|
||||
opts = parse_args()
|
||||
|
||||
logging.basicConfig(format="%(levelname)s: %(message)s", stream=sys.stderr)
|
||||
|
@ -331,7 +335,7 @@ def main():
|
|||
|
||||
signal.signal(signal.SIGTERM, handle_sigterm)
|
||||
|
||||
print("HTTP listening on port", opts.port)
|
||||
logger.info(f"HTTP listening on port {opts.port}")
|
||||
try:
|
||||
httpd.serve_forever()
|
||||
except (KeyboardInterrupt, Terminated):
|
||||
|
|
73
starlink_grpc_tools/logging.py
Normal file
73
starlink_grpc_tools/logging.py
Normal file
|
@ -0,0 +1,73 @@
|
|||
"""Configure logging."""
|
||||
|
||||
import logging
|
||||
import pathlib
|
||||
import sys
|
||||
import traceback
|
||||
|
||||
import arrow
|
||||
import urllib3
|
||||
|
||||
|
||||
class Formatter(logging.Formatter):
|
||||
def __init__(self):
|
||||
# fmt = formatter_message(fmt, use_color)
|
||||
logging.Formatter.__init__(self, "")
|
||||
|
||||
def format(self, record: logging.LogRecord):
|
||||
message = record.msg
|
||||
|
||||
if len(record.args) > 0:
|
||||
message = record.msg % record.args
|
||||
|
||||
created = arrow.get(record.created).to("America/Chicago")
|
||||
|
||||
name = record.name
|
||||
if len(name) > 25:
|
||||
name = name[:24] + "\u2026"
|
||||
|
||||
pathname = record.pathname
|
||||
if len(pathname) > 15:
|
||||
pathname = "\u2026" + pathname[-14:]
|
||||
|
||||
prefix = f"{created:YYYY-MM-DD HH:mm:ss.SSSSSS Z} [{name:^25s}] {pathname}:{record.lineno:<4d} {record.levelname:8s}" # noqa: E501
|
||||
msg = f"{prefix} {message:s}"
|
||||
|
||||
if record.exc_info is not None:
|
||||
formatted = traceback.format_exception(*record.exc_info)
|
||||
for chunk in formatted:
|
||||
line = chunk.splitlines()
|
||||
for line in chunk.splitlines():
|
||||
msg += f"\n{prefix} {line}"
|
||||
|
||||
return msg
|
||||
|
||||
|
||||
def setup_logging(filename: pathlib.Path | None = None):
|
||||
"""Set up logging."""
|
||||
formatter = Formatter()
|
||||
|
||||
console = logging.StreamHandler(stream=sys.stderr)
|
||||
console.setFormatter(formatter)
|
||||
console.setLevel(logging.DEBUG)
|
||||
|
||||
if filename is not None:
|
||||
file = logging.FileHandler(filename=filename, encoding="utf-8")
|
||||
file.setFormatter(formatter)
|
||||
file.setLevel(logging.DEBUG)
|
||||
|
||||
root = logging.getLogger()
|
||||
for handler in root.handlers:
|
||||
root.removeHandler(handler)
|
||||
handler.close()
|
||||
|
||||
root.addHandler(console)
|
||||
|
||||
if filename is not None:
|
||||
root.addHandler(file)
|
||||
|
||||
root.setLevel(logging.DEBUG)
|
||||
|
||||
urllib3.disable_warnings()
|
||||
logging.getLogger("urllib3.connectionpool").setLevel(logging.INFO)
|
||||
logging.captureWarnings(True)
|
Loading…
Reference in a new issue