Data Model¶
- class zlogging.model.Model(*args, **kwargs)[source]¶
Bases:
objectLog data model.
- Parameters:
- Warns:
BroDeprecationWarning – Use of
bro_*type annotations.- Raises:
ModelValueError – In case of inconsistency between field data types, or values of
unset_field,empty_fieldandset_separator.ModelTypeError – Wrong parameters when initialisation.
- Return type:
Note
Customise the
Model.__post_init__method in your subclassed data model to implement your own ideas.Example
Define a custom log data model using the prefines Bro/Zeek data types, or subclasses of
BaseType:class MyLog(Model): field_one = StringType() field_two = SetType(element_type=PortType)
Or you may use type annotations as PEP 484 introduced when declaring data models. All available type hints can be found in
zlogging.typing:class MyLog(Model): field_one: zeek_string field_two: zeek_set[zeek_port]
However, when mixing annotations and direct assignments, annotations will take proceedings, i.e. the
Modelclass shall process first annotations then assignments. Should there be any conflicts,ModelErrorwill be raised.See also
See
expand_typing()for more information about processing the fields.- property fields: OrderedDict[str, _SimpleType | _GenericType]¶
Fields of the data model.
- tojson()[source]¶
Serialise data model as JSON log format.
- Return type:
- Returns:
An
OrderedDictmapping each field and serialised JSON serialisable data.
- toascii()[source]¶
Serialise data model as ASCII log format.
- Return type:
- Returns:
An
OrderedDictmapping each field and serialised text data.
- zlogging.model.new_model(name, **fields)[source]¶
Create a data model dynamically with the appropriate fields.
- Parameters:
- Return type:
- Returns:
Created data model.
Examples
Typically, we define a data model by subclassing the
Modelclass, as following:class MyLog(Model): field_one = StringType() field_two = SetType(element_type=PortType)
when defining dynamically with
new_model(), the definition above can be rewrote to:MyLog = new_model('MyLog', field_one=StringType(), field_two=SetType(element_type=PortType))