Configuring Logging Output¶
You can register “destinations” to handle logging output. A destination is a callable that takes a message dictionary. For example, if we want each message to be encoded in JSON and written on a new line on stdout:
import json, sys from eliot import add_destination def stdout(message): sys.stdout.write(json.dumps(message) + "\n") add_destination(stdout)
Outputting to Files¶
You can create a destination that logs to a file by calling
Each Eliot message will be encoded in JSON and written on a new line.
As a short hand you can call
eliot.to_file which will create the destination and then add it.
from eliot import to_file to_file(open("eliot.log", "ab"))
This destination is blocking: if writing to a file takes a long time your code will not be able to proceed until writing is done.
If you’re using Twisted you can wrap a
eliot.FileDestination with a non-blocking eliot.logwriter.ThreadedWriter.
This allows you to log to a file without blocking the Twisted
Adding Fields to All Messages¶
Sometimes you want to add a field to all messages output by your process, regardless of destination.
For example if you’re aggregating logs from multiple processes into a central location you might want to include a field
process_id that records the name and process id of your process in every log message.
eliot.add_global_fields API to do so, e.g.:
import os, sys from eliot import add_global_fields add_global_fields(process_id="%s:%d" % (sys.argv, os.getpid()))