log method

void log(
  1. String message, {
  2. LogLevel? level,
  3. dynamic exception,
  4. StackTrace? stackTrace,
})

Logs a message. Default LogLevel is LogLevel.info. The log is written to the database when the session is closed.

Implementation

void log(
  String message, {
  LogLevel? level,
  dynamic exception,
  StackTrace? stackTrace,
}) {
  assert(
    !_closed,
    'Session is closed, and logging can no longer be performed.',
  );

  int? messageId;
  if (this is StreamingSession) {
    messageId = (this as StreamingSession).currentMessageId;
  }

  var entry = LogEntry(
    sessionLogId: sessionLogs.temporarySessionId,
    serverId: server.serverId,
    messageId: messageId,
    logLevel: level ?? LogLevel.info,
    message: message,
    time: DateTime.now(),
    error: exception != null ? '$exception' : null,
    stackTrace: stackTrace != null ? '$stackTrace' : null,
    order: sessionLogs.currentLogOrderId,
  );

  sessionLogs.currentLogOrderId += 1;

  if (serverpod.runMode == ServerpodRunMode.development) {
    stdout.writeln('${entry.logLevel.name.toUpperCase()}: ${entry.message}');
    if (entry.error != null) stdout.writeln(entry.error);
    if (entry.stackTrace != null) stdout.writeln(entry.stackTrace);
  }

  if (!serverpod.logManager.shouldLogEntry(session: this, entry: entry)) {
    return;
  }

  // Called asynchronously.
  serverpod.logManager.logEntry(this, entry);
}