logging_gelf.formatters
— Formatters¶
-
class
logging_gelf.formatters.
GELFFormatter
¶ A subclass of
logging.Formatter
to format LogRecord into GELF.-
__init__
(schema=<logging_gelf.schemas.GelfSchema>, null_character=False, JSONEncoder=json.JSONEncoder, exclude_patterns=None)¶ A GELF formatter to format a
logging.LogRecord
into GELF.Parameters: - schema (logging_gelf.schemas.GelfSchema) – The marshmallow schema to use to format data.
- null_character (bool) – Append a ‘0’ at the end of the string. It depends on the input used.
- JSONEncoder (json.JSONEncoder) – A custom json encoder to use.
- exclude_patterns (list|None) – List of regexp used to exclude keys
New in version 0.0.12: The exclude_patterns parameter.
-
format
(record)¶
Format the specified record into json using the schema which MUST inherit from
logging_gelf.schemas.GelfSchema
.Parameters: record (logging.LogRecord) – Contains all the information pertinent to the event being logged. :return: A JSON dump of the record. :rtype: str -
filter_keys(data):
Filter GELF record keys using exclude_patterns
Parameters: data (dict) – Log record has dict :return: the filtered log record :rtype: dict New in version 0.0.12.
-
Testing the output¶
You can use the logging.StreamHandler
to test your formatter:
>>> import sys
>>> import logging
>>> from logging_gelf.formatters import GELFFormatter
# we create the logger
>>> logger = logging.getLogger("gelf")
>>> logger.setLevel(logging.DEBUG)
# we use StreamHandler to display the result
>>> handler = logging.StreamHandler(sys.stdout)
>>> handler.setFormatter(GELFFormatter())
>>> logger.addHandler(handler)
# we send a log entry
>>> logger.debug("hello !")
{"version": "1.1", "host": "host.example.com", "file": "<stdin>", "short_message": "hello !", "timestamp": 1484820522.4268215, "level": 7, "line": 1}
The next example uses marshmallow and a custom JSONEncoder which transform all list, tuple or dict to strings:
>>> import logging
>>> import sys
>>> from logging_gelf.formatters import GELFFormatter, StringJSONEncoder
>>> from marshmallow import fields, Schema
>>> from logging_gelf.schemas import GelfSchema
>>>
>>> class Person(GelfSchema):
... lastname = fields.String()
... father = fields.Nested(Person)
... firstname = fields.List(fields.String)
...
>>>
>>> me = dict(lastname="Dumay", firstname=["Cedric", "Julien"])
>>>
>>> logger = logging.getLogger("gelf")
>>> logger.setLevel(logging.DEBUG)
>>>
>>> handler = logging.StreamHandler(sys.stdout)
>>> handler.setFormatter(
... GELFFormatter(schema=Person, JSONEncoder=StringJSONEncoder))
>>> logger.addHandler(handler)
>>>
>>> logger.debug("A marshmallow example with Nested", extra=me)
{"host": "host.example.com", "_firstname": "['Cedric', 'Julien']", "file": "<stdin>", "version": "1.1", "short_message": "A marshmallow example with Nested", "timestamp": 1486643773.3877068, "level": 7, "line": 1, "_lastname": "Dumay"}
As we can see, firstname is not an array.
See also
- Formatter Objects
- Official python documentation