Skip to content
This repository was archived by the owner on Jan 26, 2021. It is now read-only.

Commit b7cfa0b

Browse files
committed
Configure custom logging (and different for root vs. package)
Resolves #37. Resolves #32.
1 parent e90686e commit b7cfa0b

File tree

2 files changed

+53
-10
lines changed

2 files changed

+53
-10
lines changed

blotter/__main__.py

+5-10
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
import asyncio
2-
import logging
32
import random
43
import signal
54
import sys
65
from argparse import ArgumentParser
76
from datetime import timedelta
7+
from logging import getLogger
88
from types import TracebackType
99
from typing import Type
1010

11-
import google.cloud.logging
1211
import ib_insync
1312

1413
from blotter.error_handling import ErrorHandlerConfiguration
1514
from blotter.ib_helpers import IBError, IBThread, IBWarning
15+
from blotter.logging import configure_package_logger, configure_root_logger
1616
from blotter.server import Servicer
1717
from blotter.streaming import StreamingManager
1818

19-
logger = logging.getLogger(__package__)
19+
logger = getLogger(__package__)
2020

2121
parser = ArgumentParser(
2222
prog="blotter",
@@ -89,14 +89,9 @@ def _hook(
8989
def main() -> None:
9090
args = parser.parse_args()
9191

92-
google.cloud.logging.Client().setup_logging(
93-
log_level=logging.DEBUG if args.verbose >= 2 else logging.INFO
94-
)
95-
96-
if args.verbose:
97-
logging.basicConfig(level=logging.DEBUG if args.verbose >= 2 else logging.INFO)
98-
9992
error_handler = ErrorHandlerConfiguration(report_to_gcloud=args.report_errors)
93+
configure_root_logger(args.verbose)
94+
configure_package_logger(logger, args.verbose)
10095

10196
ib = ib_insync.IB()
10297

blotter/logging.py

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import logging
2+
import google.cloud.logging
3+
4+
5+
def install_gcloud_logging_handler(logger: logging.Logger, level: int) -> None:
6+
handler = google.cloud.logging.handlers.CloudLoggingHandler(
7+
google.cloud.logging.Client()
8+
)
9+
10+
handler.setLevel(level)
11+
logger.addHandler(handler)
12+
13+
14+
def install_console_logging_handler(logger: logging.Logger) -> None:
15+
handler = logging.StreamHandler()
16+
handler.setLevel(logging.DEBUG)
17+
18+
formatter = logging.Formatter("%(asctime)s [%(name)s][%(levelname)s] %(message)s")
19+
handler.setFormatter(formatter)
20+
21+
logger.addHandler(handler)
22+
23+
24+
def configure_root_logger(verbosity: int) -> None:
25+
logger = logging.getLogger()
26+
27+
if verbosity >= 3:
28+
logger.setLevel(logging.DEBUG)
29+
elif verbosity >= 2:
30+
logger.setLevel(logging.INFO)
31+
else:
32+
logger.setLevel(logging.WARN)
33+
34+
install_console_logging_handler(logger)
35+
install_gcloud_logging_handler(logger, logging.WARN)
36+
37+
38+
def configure_package_logger(logger: logging.Logger, verbosity: int) -> None:
39+
if verbosity >= 2:
40+
logger.setLevel(logging.DEBUG)
41+
elif verbosity >= 1:
42+
logger.setLevel(logging.INFO)
43+
else:
44+
logger.setLevel(logging.WARN)
45+
46+
install_console_logging_handler(logger)
47+
install_gcloud_logging_handler(logger, logging.INFO)
48+
logger.propagate = False

0 commit comments

Comments
 (0)