import 'dart:developer' as dev; import 'dart:io'; import 'package:dart_frog/dart_frog.dart'; import 'package:logging/logging.dart'; bool _listening = false; Future<HttpServer> run(Handler handler, InternetAddress ip, int port) async { final isDevelopment = (await dev.Service.getInfo()).serverUri != null; if (!_listening) { final logLevel = Platform.environment['LOG_LEVEL'] ?? (isDevelopment ? 'FINEST' : 'INFO'); Logger.root.level = Level.LEVELS.firstWhere((l) => l.name == logLevel, orElse: () => Level.INFO); // defaults to Level.INFO Logger.root.onRecord.listen((record) { stdout.writeln('[${record.level.name}]:[${record.loggerName}] ${record.time}: ${record.message}'); if (record.level.value >= Level.WARNING.value) { stdout.writeln( '[${record.level.name}]:[${record.loggerName}] ${record.error ?? "No error provided"}\n${record.stackTrace ?? "No trace provided"}', ); } }); _listening = true; } return serve(handler, ip, port); }