From 3fa699e9bf03b08a8cfd7d1ee20b430aa38cc9d5 Mon Sep 17 00:00:00 2001 From: Christoph Hagen Date: Wed, 22 Nov 2023 10:35:47 +0100 Subject: [PATCH] Improve log url configuration --- Sources/App/Config.swift | 20 ++++++++++++++++---- Sources/App/configure.swift | 3 ++- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/Sources/App/Config.swift b/Sources/App/Config.swift index a5f72a0..1c2e28c 100644 --- a/Sources/App/Config.swift +++ b/Sources/App/Config.swift @@ -9,16 +9,28 @@ struct Config: Codable { let maxBodySize: String /// The path to the folder where the metric logs are stored - let logPath: String + /// + /// If no path is provided, then a folder `logs` in the resources directory is created + /// If the path is relative, then it is assumed relative to the resources directory + let logPath: String? /// Serve files in the Public directory using Vapor let serveFiles: Bool /// Authentication tokens for remotes allowed to write let writers: [String] - - var logURL: URL { - .init(fileURLWithPath: logPath) + + func logURL(possiblyRelativeTo resourcesDirectory: URL) -> URL { + guard let logPath else { + return resourcesDirectory.appendingPathComponent("logs") + } + guard !logPath.hasPrefix("/") else { + return .init(fileURLWithPath: logPath) + } + guard #available(macOS 13.0, iOS 16.0, watchOS 9.0, tvOS 16.0, *) else { + return resourcesDirectory.appendingPathComponent(logPath) + } + return resourcesDirectory.appending(path: logPath) } } diff --git a/Sources/App/configure.swift b/Sources/App/configure.swift index 18fa843..b0eb373 100755 --- a/Sources/App/configure.swift +++ b/Sources/App/configure.swift @@ -25,7 +25,8 @@ public func configure(_ app: Application) throws { let config = Config(loadFrom: resourceDirectory) let authenticator = Authenticator(writers: config.writers) - let monitor = MetricObserver(logFileFolder: config.logURL, logMetricId: "caps.log") + let logURL = config.logURL(possiblyRelativeTo: resourceDirectory) + let monitor = MetricObserver(logFileFolder: logURL, logMetricId: "caps.log") MetricObserver.standard = monitor serverStatus = Metric("caps.status",