From a829fdcdfdceb17c4991489ee7f2a95a16bbd866 Mon Sep 17 00:00:00 2001 From: Dmitry Kovba Date: Mon, 27 Oct 2025 09:21:54 -0700 Subject: [PATCH] Improve log and error messages (#352) Improved log and error messages. --- vminitd/Sources/vmexec/vmexec.swift | 2 +- vminitd/Sources/vminitd/Application.swift | 6 +++--- vminitd/Sources/vminitd/ManagedProcess.swift | 14 +++++++------- vminitd/Sources/vminitd/Server+GRPC.swift | 3 ++- vminitd/Sources/vminitd/Server.swift | 7 ++++--- 5 files changed, 17 insertions(+), 15 deletions(-) diff --git a/vminitd/Sources/vmexec/vmexec.swift b/vminitd/Sources/vmexec/vmexec.swift index dd057dfd..c1b9d474 100644 --- a/vminitd/Sources/vmexec/vmexec.swift +++ b/vminitd/Sources/vmexec/vmexec.swift @@ -80,7 +80,7 @@ extension App { // lookup executable let path = Path.findPath(currentEnv) ?? Path.getCurrentPath() guard let resolvedExecutable = Path.lookPath(process.args[0], path: path) else { - throw App.Failure(message: "Failed to find target executable \(process.args[0])") + throw App.Failure(message: "failed to find target executable \(process.args[0])") } let executable = strdup(resolvedExecutable.path()) diff --git a/vminitd/Sources/vminitd/Application.swift b/vminitd/Sources/vminitd/Application.swift index d9aa6ee4..af04ef2c 100644 --- a/vminitd/Sources/vminitd/Application.swift +++ b/vminitd/Sources/vminitd/Application.swift @@ -107,14 +107,14 @@ struct Application { log.logLevel = .debug - log.info("vminitd booting...") + log.info("vminitd booting") let eg = MultiThreadedEventLoopGroup(numberOfThreads: System.coreCount) let server = Initd(log: log, group: eg) do { - log.info("serve vminitd api") + log.info("serving vminitd API") try await server.serve(port: vsockPort) - log.info("vminitd api returned...") + log.info("vminitd API returned") } catch { log.error("vminitd boot error \(error)") exit(1) diff --git a/vminitd/Sources/vminitd/ManagedProcess.swift b/vminitd/Sources/vminitd/ManagedProcess.swift index 7196a365..a77d6092 100644 --- a/vminitd/Sources/vminitd/ManagedProcess.swift +++ b/vminitd/Sources/vminitd/ManagedProcess.swift @@ -119,7 +119,7 @@ final class ManagedProcess: Sendable { var io: IO if stdio.terminal { - log.info("setting up terminal IO") + log.info("setting up terminal I/O") let attrs = Command.Attrs(setsid: false, setctty: false) command.attrs = attrs io = try TerminalIO( @@ -134,7 +134,7 @@ final class ManagedProcess: Sendable { ) } - log.info("starting io") + log.info("starting I/O") // Setup IO early. We expect the host to be listening already. try io.start(process: &command) @@ -172,7 +172,7 @@ extension ManagedProcess { let size = MemoryLayout.size guard let piddata = try syncPipe.fileHandleForReading.read(upToCount: size) else { - throw ContainerizationError(.internalError, message: "no pid data from sync pipe") + throw ContainerizationError(.internalError, message: "no PID data from sync pipe") } guard piddata.count == size else { @@ -206,7 +206,7 @@ extension ManagedProcess { if self.terminal { log.info( - "wait for pty fd", + "wait for PTY FD", metadata: [ "id": "\(id)" ]) @@ -215,14 +215,14 @@ extension ManagedProcess { guard let ptyFd = try self.syncPipe.fileHandleForReading.read(upToCount: size) else { throw ContainerizationError( .internalError, - message: "no pty data from sync pipe" + message: "no PTY data from sync pipe" ) } let fd = ptyFd.withUnsafeBytes { ptr in ptr.load(as: Int32.self) } log.info( - "received pty fd from container, attaching", + "received PTY FD from container, attaching", metadata: [ "id": "\(id)" ]) @@ -259,7 +259,7 @@ extension ManagedProcess { do { try $0.io.close() } catch { - self.log.error("failed to close io for process: \(error)") + self.log.error("failed to close I/O for process: \(error)") } for waiter in $0.waiters { diff --git a/vminitd/Sources/vminitd/Server+GRPC.swift b/vminitd/Sources/vminitd/Server+GRPC.swift index 2b1e62ff..e60fa1ff 100644 --- a/vminitd/Sources/vminitd/Server+GRPC.swift +++ b/vminitd/Sources/vminitd/Server+GRPC.swift @@ -429,6 +429,7 @@ extension Initd: Com_Apple_Containerization_Sandbox_V3_SandboxContextAsyncProvid "stdin": "Port: \(request.stdin)", "stdout": "Port: \(request.stdout)", "stderr": "Port: \(request.stderr)", + "configuration": "\(request.configuration.count)", ]) if !request.hasContainerID { @@ -508,7 +509,7 @@ extension Initd: Com_Apple_Containerization_Sandbox_V3_SandboxContextAsyncProvid if error is GRPCStatus { throw error } - throw GRPCStatus(code: .internalError, message: "create managed process: \(error)") + throw GRPCStatus(code: .internalError, message: "createProcess: \(error)") } } diff --git a/vminitd/Sources/vminitd/Server.swift b/vminitd/Sources/vminitd/Server.swift index b2052aa8..70856826 100644 --- a/vminitd/Sources/vminitd/Server.swift +++ b/vminitd/Sources/vminitd/Server.swift @@ -93,8 +93,8 @@ final class Initd: Sendable { await ProcessSupervisor.default.setLog(self.log) await ProcessSupervisor.default.ready() - log.debug( - "booting grpc server on vsock", + log.info( + "booting gRPC server on vsock", metadata: [ "port": "\(port)" ]) @@ -105,7 +105,7 @@ final class Initd: Sendable { serviceProviders: [self]) ).get() log.info( - "grpc api serving on vsock", + "gRPC API serving on vsock", metadata: [ "port": "\(port)" ]) @@ -114,6 +114,7 @@ final class Initd: Sendable { try await server.onClose.get() } try await group.next() + log.info("closing gRPC server") group.cancelAll() } }