Accessories

Logging with ntLog

ntLog is a log file aggregation utility.

Unlike daemons, Inform based applications tend to run on demand. If the application generates a log file, each run over-writes over a previously generated logfile. This can be problematic if you are interested in keeping a log of events that do not occur during each run.

ntlog is a utility that accumulates logfiles into NestedText file. It provides NTlog, a class whose instances provide a output file stream interface. They can be specified to Inform as the logfile, and in doing so, provide an accumulating logfile. NTlog allows you to specify trimming parameters to keep the logfile from getting too big.

Here are two examples that use ntlog with inform. The first is used with a short-lived processes:

from ntlog import NTlog
from inform import Inform, display, error, log

with (
    NTlog('appname.log.nt', keep_for='7d') as ntlog,
    Inform(logfile=ntlog) as inform,
):
    display('status message')
    log('log message')
    if there_is_a_problem:
        error('error message')
    ...

The next example demonstrates how to use ntlog with long-lived processes. The difference from the above example is that ntlog is configured to create a temporary log file and Inform is configured to flush after each write. The temporary logfile is intended to allow you to monitor the progress of the process as it runs.

with (
    NTlog('appname.log.nt', 'appname.log', keep_for='7d') as ntlog,
    Inform(logfile=ntlog, flush=True) as inform,
):
    display('status message')
    log('log message')
    if there_is_a_problem:
        error('error message')
    ...