blob: 05ec3431afef2c072dc9d795e6822dd73b5acd05 [file] [log] [blame]
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:analysis_server/src/session_logger/entry_keys.dart' as key;
import 'package:analysis_server/src/session_logger/entry_kind.dart';
import 'package:analysis_server/src/session_logger/process_id.dart';
import 'package:analysis_server/src/session_logger/session_logger_sink.dart';
/// Used to write information about a session to a log.
class SessionLogger {
/// The sink to which entries are to be written, or `null` if logging is not
/// to be done at this point.
SessionLoggerSink? sink;
/// Log that the given [arguments] were included on the command-line.
void logCommandLine({required List<String> arguments}) {
sink?.writeLogEntry({
key.time: DateTime.now().millisecondsSinceEpoch,
key.kind: EntryKind.commandLine.name,
key.argList: arguments,
});
}
/// Log that the given [message] was sent [from] one process [to] another.
void logMessage({
required ProcessId from,
required ProcessId to,
required JsonMap message,
}) {
sink?.writeLogEntry({
key.time: DateTime.now().millisecondsSinceEpoch,
key.kind: EntryKind.message.name,
key.sender: from.name,
key.receiver: to.name,
key.message: message,
});
}
/// Shuts down the logger.
Future<void> shutdown() async {
await sink?.close();
}
}