Skip to content

Commit 9817dd9

Browse files
committed
Switch to top-level loggers
1 parent 4e52b6d commit 9817dd9

File tree

4 files changed

+19
-17
lines changed

4 files changed

+19
-17
lines changed

ircstream/ircserver.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030

3131
from ._version import __version__
3232

33+
logger = structlog.get_logger()
34+
3335

3436
class IRCNumeric(enum.Enum):
3537
"""Base class for IRC numeric enums."""
@@ -200,13 +202,12 @@ class IRCClient:
200202
the client by dispatching them to the ``handle_`` methods.
201203
"""
202204

203-
log = structlog.get_logger("ircstream.client")
204-
205205
def __init__(self, server: IRCServer, reader: asyncio.StreamReader, writer: asyncio.StreamWriter) -> None:
206206
self.server = server
207207
self.reader = reader
208208
self.writer = writer
209209

210+
self.log = logger.new()
210211
self.signon = datetime.datetime.now(tz=datetime.timezone.utc)
211212
self.last_heard = self.signon
212213
self.ping_sent = False
@@ -224,7 +225,7 @@ async def connect(self) -> None:
224225
if self.host.startswith("::ffff:"):
225226
self.host = self.host[len("::ffff:") :]
226227

227-
self.log.new(ip=self.host, port=self.port)
228+
self.log = self.log.bind(ip=self.host, port=self.port)
228229
self.log.info("Client connected")
229230
self.server.metrics["clients"].inc()
230231
self._periodic_ping_task = asyncio.create_task(self._periodic_ping())

ircstream/main.py

+8-8
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
from .prometheus import PrometheusServer
3030
from .rc2udp import RC2UDPServer
3131

32+
logger = structlog.get_logger()
33+
3234

3335
def parse_args(argv: Sequence[str] | None) -> argparse.Namespace:
3436
"""Parse and return the parsed command line arguments."""
@@ -83,7 +85,6 @@ def configure_logging(log_format: str = "plain") -> None:
8385

8486
async def start_servers(config: configparser.ConfigParser) -> None:
8587
"""Start all servers in asyncio tasks or threads and then busy-loop."""
86-
log = structlog.get_logger("ircstream.main")
8788
loop = asyncio.get_running_loop()
8889

8990
try:
@@ -92,14 +93,14 @@ async def start_servers(config: configparser.ConfigParser) -> None:
9293
irc_coro = ircserver.serve()
9394
irc_task = asyncio.create_task(irc_coro)
9495
else:
95-
log.critical('Invalid configuration, missing section "irc"')
96+
logger.critical('Invalid configuration, missing section "irc"')
9697
raise SystemExit(-1)
9798

9899
if "rc2udp" in config:
99100
rc2udp_coro = RC2UDPServer(config["rc2udp"], ircserver).serve()
100101
rc2udp_task = asyncio.create_task(rc2udp_coro) # noqa: F841 pylint: disable=unused-variable
101102
else:
102-
log.warning("RC2UDP is not enabled in the config; server usefulness may be limited")
103+
logger.warning("RC2UDP is not enabled in the config; server usefulness may be limited")
103104

104105
if "prometheus" in config:
105106
prom_server = PrometheusServer(config["prometheus"], ircserver.metrics_registry)
@@ -108,7 +109,7 @@ async def start_servers(config: configparser.ConfigParser) -> None:
108109

109110
await asyncio.wait_for(irc_task, timeout=None) # run forever
110111
except OSError as exc:
111-
log.critical(f"System error: {exc.strerror}", errno=errno.errorcode[exc.errno])
112+
logger.critical(f"System error: {exc.strerror}", errno=errno.errorcode[exc.errno])
112113
raise SystemExit(-2) from exc
113114

114115

@@ -119,19 +120,18 @@ def run(argv: Sequence[str] | None = None) -> None:
119120
configure_logging(options.log_format)
120121
# only set e.g. INFO or DEBUG for our own loggers
121122
structlog.get_logger("ircstream").setLevel(options.log_level)
122-
log = structlog.get_logger("ircstream.main")
123-
log.info("Starting IRCStream", config_file=str(options.config_file), version=__version__)
123+
logger.info("Starting IRCStream", config_file=str(options.config_file), version=__version__)
124124

125125
config = configparser.ConfigParser(strict=True)
126126
try:
127127
with options.config_file.open(encoding="utf-8") as config_fh:
128128
config.read_file(config_fh)
129129
except OSError as exc:
130-
log.critical(f"Cannot open configuration file: {exc.strerror}", errno=errno.errorcode[exc.errno])
130+
logger.critical(f"Cannot open configuration file: {exc.strerror}", errno=errno.errorcode[exc.errno])
131131
raise SystemExit(-1) from exc
132132
except configparser.Error as exc:
133133
msg = repr(exc).replace("\n", " ") # configparser exceptions sometimes include newlines
134-
log.critical(f"Invalid configuration, {msg}")
134+
logger.critical(f"Invalid configuration, {msg}")
135135
raise SystemExit(-1) from exc
136136

137137
try:

ircstream/prometheus.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,12 @@
2121
import prometheus_client
2222
import structlog
2323

24+
logger = structlog.get_logger()
25+
2426

2527
class PrometheusServer(http.server.ThreadingHTTPServer):
2628
"""A Prometheus HTTP server."""
2729

28-
log = structlog.get_logger("ircstream.prometheus")
2930
daemon_threads = True
3031
allow_reuse_address = True
3132

@@ -41,7 +42,7 @@ def __init__(
4142
super().__init__((listen_address, listen_port), prometheus_client.MetricsHandler.factory(registry))
4243
# update address/port based on what bind() returned
4344
self.address, self.port = str(self.server_address[0]), self.server_address[1]
44-
self.log.info("Listening for Prometheus HTTP", listen_address=self.address, listen_port=self.port)
45+
logger.info("Listening for Prometheus HTTP", listen_address=self.address, listen_port=self.port)
4546

4647
def server_bind(self) -> None:
4748
"""Bind to an IP address.

ircstream/rc2udp.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@
2222

2323
from .ircserver import IRCServer
2424

25+
logger = structlog.get_logger()
26+
2527

2628
class RC2UDPHandler(asyncio.Protocol):
2729
"""A handler implementing the RC2UDP protocol, as used by MediaWiki."""
2830

29-
log = structlog.get_logger("ircstream.rc2udp")
30-
3131
def __init__(self, server: RC2UDPServer) -> None:
3232
self.server = server
3333
self.running_tasks: set[asyncio.Task[Any]] = set()
@@ -43,7 +43,7 @@ def datagram_received(self, data: bytes, _: tuple[str, int]) -> None:
4343
self.server.ircserver.metrics["errors"].labels("rc2udp-parsing").inc()
4444
return
4545

46-
self.log.debug("Broadcasting message", channel=channel, message=text)
46+
logger.debug("Broadcasting message", channel=channel, message=text)
4747
task = asyncio.create_task(self.server.ircserver.broadcast(channel, text))
4848
self.running_tasks.add(task)
4949
task.add_done_callback(self.running_tasks.discard)
@@ -66,4 +66,4 @@ async def serve(self) -> None:
6666
transport, _ = await loop.create_datagram_endpoint(lambda: RC2UDPHandler(self), local_addr=local_addr)
6767
local_addr = transport.get_extra_info("sockname")[:2]
6868
self.address, self.port = local_addr # update address/port based on what bind() returned
69-
self.log.info("Listening for RC2UDP broadcast", listen_address=self.address, listen_port=self.port)
69+
logger.info("Listening for RC2UDP broadcast", listen_address=self.address, listen_port=self.port)

0 commit comments

Comments
 (0)