encodeMeta method
Encodes the session metadata line (no trailing newline).
The package-provided sessionId and started keys always win over
the same keys in meta. Never throws: user meta values are converted
to JSON-safe representations via Loggable.objectToJson; if that is
impossible, the line degrades to the package-provided keys only.
Implementation
String encodeMeta({
required String sessionId,
required DateTime started,
Map<String, Object?>? meta,
}) {
final auto = <String, Object?>{
'sessionId': sessionId,
'started': started.toUtc().toIso8601String(),
};
var userMeta = const <String, Object?>{};
if (meta != null) {
try {
final converted = Loggable.objectToJson(meta);
if (converted is Map<String, Object?>) {
userMeta = converted;
}
} on Object {
// Невалидные метаданные не должны блокировать запись логов.
}
}
try {
return jsonEncode(<String, Object?>{
metaKey: {...userMeta, ...auto},
});
} on Object {
return jsonEncode(<String, Object?>{metaKey: auto});
}
}