| Property | Type | Description | Required? | Default value |
|---|---|---|---|---|
| `type-aliases` | Associative array of strings (alias names) to [type objects](#type-objects) or strings (previous alias names) | Type aliases to be used in trace, stream, and event objects | Optional | `{}` |
-| `log-levels` | Associative array of strings (log level names) to log level constant integers | Log levels to be used in event objects | Optional | `{}` |
+| `$log-levels` | Associative array of strings (log level names) to log level constant integers | Log levels to be used in event objects | Optional | `{}` |
| `clocks` | Associative array of strings (clock names) to [clock objects](#clock-object) | Trace clocks | Optional | `{}` |
| `env` | Associative array of strings (names) to strings or integers (values) | Trace environment variables | Optional | `{}` |
| `trace` | [Trace object](#trace-object) | Metadata common to the whole trace | Required | N/A |
class: array
length: 16
element-type: byte
-log-levels:
+$log-levels:
emerg: 0
alert: 1
critical: 2
| `payload-type` | [Type object](#type-objects) or string (alias name) | Type of event payload (must be a [structure type object](#structure-type-object)) | Required | N/A |
Available log level names, for a given event, are defined by the
-`log-levels` property of the [metadata object](#metadata-object)
+`$log-levels` property of the [metadata object](#metadata-object)
containing it.
Each field of the event context structure type (`context-type` property)
def _register_log_levels(self, metadata_node):
self._log_levels = dict()
- if 'log-levels' not in metadata_node:
- return
+ # log levels:
+ # v2.0: "log-levels"
+ # v2.1+: "$log-levels"
+ log_levels_node = None
+
+ if self._version >= 200:
+ if 'log-levels' in metadata_node:
+ log_levels_prop = 'log-levels'
+ log_levels_node = metadata_node[log_levels_prop]
- log_levels_node = metadata_node['log-levels']
+ if self._version >= 201:
+ if '$log-levels' in metadata_node:
+ if log_levels_node is not None:
+ raise ConfigError('cannot specify both "log-levels" and "$log-levels" properties of metadata object: prefer "$log-levels"')
+
+ log_levels_prop = '$log-levels'
+ log_levels_node = metadata_node[log_levels_prop]
+
+ if log_levels_node is None:
+ return
if not _is_assoc_array_prop(log_levels_node):
- raise ConfigError('"log-levels" property (metadata) must be an associative array')
+ raise ConfigError('"{}" property (metadata) must be an associative array'.format(log_levels_prop))
for ll_name, ll_value in log_levels_node.items():
if ll_name in self._log_levels:
if not _is_assoc_array_prop(metadata_node):
raise ConfigError('"metadata" property (configuration) must be an associative array')
- unk_prop = _get_first_unknown_prop(metadata_node, [
+ known_props = [
'type-aliases',
'log-levels',
'trace',
'env',
'clocks',
'streams',
- ])
+ ]
+
+ if self._version >= 201:
+ known_props.append('$log-levels')
+
+ unk_prop = _get_first_unknown_prop(metadata_node, known_props)
if unk_prop:
add = ''