2.18. Logging configuration#
Default logging configuration might be configured by setting environment variables:
AIOMISC_LOG_LEVEL - default logging level
AIOMISC_LOG_FORMAT - default log format
AIOMISC_LOG_CONFIG - should logging be configured
AIOMISC_LOG_FLUSH - interval between logs flushing from buffer
AIOMISC_LOG_BUFFER - maximum log buffer size
$ export AIOMISC_LOG_LEVEL=debug
$ export AIOMISC_LOG_FORMAT=rich
2.18.1. Color#
Setting up colorized logs:
import logging
from aiomisc.log import basic_config
# Configure logging
basic_config(level=logging.INFO, buffered=False, log_format='color')
2.18.2. JSON#
Setting up json logs:
import logging
from aiomisc.log import basic_config
# Configure logging
basic_config(level=logging.INFO, buffered=False, log_format='json')
2.18.3. JournalD#
JournalD daemon for collecting logs. It’s a part of the systemd. aiomisc.basic_config has support for using JournalD for store logs.
Note
This handler is the default when the program starting as a systemd service.
aiomisc.log.LogFormat.default() will returns journald in this case.
import logging
from aiomisc.log import basic_config
# Configure rich log handler
basic_config(level=logging.INFO, buffered=False, log_format='journald')
logging.info("JournalD log record")
2.18.4. Rich#
Rich is a Python library for rich text and beautiful formatting in the terminal.
aiomisc.basic_config has support for using Rich as a logging handler. But it isn’t dependency and you have to install Rich manually.
pip install rich
Note
This handler is the default when the Rich has been installed.
import logging
from aiomisc.log import basic_config
# Configure rich log handler
basic_config(level=logging.INFO, buffered=False, log_format='rich')
logging.info("Rich logger")
# Configure rich log handler with rich tracebacks display
basic_config(level=logging.INFO, buffered=False, log_format='rich_tb')
try:
1 / 0
except:
logging.exception("Rich traceback logger")
2.18.5. Disabled#
Disable to configure logging handler. Useful when you want to configure your own logging handlers using handlers= argument.
import logging
from aiomisc.log import basic_config
# Configure your own log handlers
basic_config(
level=logging.INFO,
log_format='disabled',
handlers=[logging.StreamHandler()],
buffered=False,
)
logging.info("Use default python logger for example")
2.18.6. Buffered log handler#
Parameter buffered=True enables a memory buffer that flushes logs in a thread. In case the handlers= each will be buffered.
import asyncio
import logging
from aiomisc.log import basic_config
from aiomisc.periodic import PeriodicCallback
from aiomisc.utils import new_event_loop
# Configure logging globally
basic_config(level=logging.INFO, buffered=False, log_format='json')
async def write_log(loop):
logging.info("Hello %f", loop.time())
if __name__ == '__main__':
loop = new_event_loop()
# Configure
basic_config(
level=logging.INFO,
buffered=True,
log_format='color',
flush_interval=0.5
)
periodic = PeriodicCallback(write_log, loop)
periodic.start(0.3)
# Wait for flush just for example
loop.run_until_complete(asyncio.sleep(1))
Note
entrypoint
accepts log_format
parameter for configure it.
List of all supported log formats is available from
aiomisc.log.LogFormat.choices()