def test_json_exception(capture: jsonlog.tests.capture.Capture): jsonlog.basicConfig() try: raise jsonlog.tests.records.ExampleException except jsonlog.tests.records.ExampleException: logging.exception("An exception occurred") assert '"traceback": ' in capture
def test_json_args_map(capture: jsonlog.tests.capture.Capture): jsonlog.basicConfig() logging.warning("%(action)s %(thing)s", { "action": "Hello", "thing": "World" }) assert f"Hello World" in capture
def test_json_error(capture: jsonlog.tests.capture.Capture): jsonlog.basicConfig() try: raise jsonlog.tests.records.ExampleException except jsonlog.tests.records.ExampleException as exc_info: logging.error("An exception occurred", exc_info=exc_info) assert '"traceback": ' in capture
def main( streams: typing.Iterable[typing.TextIO], config_path: str, log_path: str, pattern_name: str, level_key: typing.Optional[str], template: typing.Optional[str], _multiline_keys_add: typing.Sequence[str], _multiline_keys_replace: typing.Sequence[str], _priority_keys: typing.Sequence[str], _remove_keys: typing.Sequence[str], ) -> None: """Format line-delimited JSON log records in a human-readable way.""" jsonlog.basicConfig(filename=ensure_log_path(log_path)) remove_keys = Key.from_strings(_remove_keys) multiline_keys_add = Key.from_strings(_multiline_keys_add) multiline_keys_replace = Key.from_strings(_multiline_keys_replace) priority_keys = Key.from_strings(_priority_keys) streams = streams or (sys.stdin, ) config: Config = Config.configure(config_path) pattern: Pattern = config.patterns[pattern_name] if level_key: pattern = pattern.replace(level_key=Key.from_string(level_key)) if multiline_keys_replace: pattern = pattern.replace(multiline_keys=multiline_keys_replace) if multiline_keys_add: multiline_keys = (*pattern.multiline_keys, *multiline_keys_add) pattern = pattern.replace(multiline_keys=multiline_keys) if priority_keys: assert isinstance(pattern, KeyValuePattern) pattern = pattern.replace(priority_keys=priority_keys) if remove_keys: assert isinstance(pattern, KeyValuePattern) pattern = pattern.remove_keys(remove_keys) if template: assert isinstance(pattern, TemplatePattern) pattern = pattern.replace(template=template) for stream in streams: pattern.stream(stream)
def test_adaptor(capture: jsonlog.tests.capture.Capture): jsonlog.basicConfig() log = logging.getLogger(__name__) adaptor = logging.LoggerAdapter(log, {"hello": "world"}) adaptor.warning("Message with extra attributes from an adaptor") assert '"hello": "world"' in capture
def test_json_null(capture: jsonlog.tests.capture.Capture): jsonlog.basicConfig() jsonlog.warning("No exc_info, traceback should be hidden") assert '"traceback": ' not in capture
def test_json_extra(capture: jsonlog.tests.capture.Capture): jsonlog.basicConfig() logging.warning("Hello world", extra={"key": "value"}) assert '"key": "value"' in capture
def test_json_args(capture: jsonlog.tests.capture.Capture): jsonlog.basicConfig() logging.warning("%s %s", "Hello", "World") assert f"Hello World" in capture
"""Attributes from a mapping passed as a lone positional argument are included.""" import jsonlog import logging jsonlog.basicConfig() logging.warning("User clicked a button", {"user": 123})
def test_basic_config_kwargs(): with pytest.raises(ValueError): jsonlog.basicConfig(stream=sys.stderr, filename="test.log")
def test_basic_config_filename(): with tempfile.TemporaryDirectory() as tempdir: jsonlog.basicConfig(filename=pathlib.Path(tempdir) / "test.log")
def test_already_configured(): with pytest.warns(UserWarning): logging.basicConfig() jsonlog.basicConfig()
def test_basic_config(capture: jsonlog.tests.capture.Capture): jsonlog.basicConfig() jsonlog.warning("Hello world") assert '"message": "Hello world"' in capture
import logging import sys import jsonlog jsonlog.basicConfig(level=jsonlog.DEBUG, stream=sys.stdout) log = logging.getLogger("example") log.debug("debug level log message") log.info("info level log message") log.warning("warning level log message") log.error("error level log message") try: 1 / 0 except ZeroDivisionError: log.exception("error level log message with traceback") log.critical("critical level log message")
from collections import namedtuple from cryptography import fernet from aiohttp import web from aiohttp_jwt import JWTMiddleware, check_permissions, match_any from aiohttp_session import setup, get_session from aiohttp_session.cookie_storage import EncryptedCookieStorage _DEBUG_WEBSERVER_REQUESTS = True _DEBUG_WEBSERVER_RESPONSES = True _DEBUG_VERBOSE = True jsonlog.basicConfig( level=jsonlog.INFO, indent=None, keys=("timestamp", "level", "message"), timespec="auto", #filename="{}/{}".format(os.path.realpath(os.path.dirname(os.path.abspath(__file__))),'access.log'), # filemode="a", # stream=None, ) logging.warning("User clicked a button", extra={"user": 123}) """ TRACE = 5 logging.addLevelName(TRACE, 'TRACE') formatter = colorlog.ColoredFormatter(log_colors={'TRACE': 'yellow'}) logger.setLevel('TRACE') logger.log(TRACE, 'a message using a custom level') logger = logging.getLogger('example') logger.addHandler(handler)
def main(): jsonlog.basicConfig()