Files
bot/apps/macos/Sources/Bot/LogLocator.swift
zeekay 4bdc9ee3e4 chore: rebrand openclaw → hanzo-bot for bridge merge
Comprehensive rename of all openclaw references to hanzo-bot equivalents:
- Package: openclaw → @hanzo/bot
- Binary: openclaw → hanzo-bot
- Types: OpenClaw* → Bot*
- Env vars: OPENCLAW_* → BOT_*
- Android: ai.openclaw.android → ai.hanzo.bot.android
- iOS/macOS: ai.openclaw.* → ai.hanzo.*
- Swift modules: OpenClaw* → Bot*
- Plugins: openclaw.plugin.json → bot.plugin.json
- Paths: .openclaw/ → .hanzo/bot/
- URLs: github.com/openclaw → github.com/hanzoai
2026-02-26 22:36:01 -08:00

60 lines
1.9 KiB
Swift

import Foundation
enum LogLocator {
private static var logDir: URL {
if let override = ProcessInfo.processInfo.environment["BOT_LOG_DIR"],
!override.isEmpty
{
return URL(fileURLWithPath: override)
}
return URL(fileURLWithPath: "/tmp/bot")
}
private static var stdoutLog: URL {
logDir.appendingPathComponent("bot-stdout.log")
}
private static var gatewayLog: URL {
logDir.appendingPathComponent("bot-gateway.log")
}
private static func ensureLogDirExists() {
try? FileManager().createDirectory(at: self.logDir, withIntermediateDirectories: true)
}
private static func modificationDate(for url: URL) -> Date {
(try? url.resourceValues(forKeys: [.contentModificationDateKey]).contentModificationDate) ?? .distantPast
}
/// Returns the newest log file under /tmp/bot/ (rolling or stdout), or nil if none exist.
static func bestLogFile() -> URL? {
self.ensureLogDirExists()
let fm = FileManager()
let files = (try? fm.contentsOfDirectory(
at: self.logDir,
includingPropertiesForKeys: [.contentModificationDateKey],
options: [.skipsHiddenFiles])) ?? []
let prefixes = ["bot"]
return files
.filter { file in
prefixes.contains { file.lastPathComponent.hasPrefix($0) } && file.pathExtension == "log"
}
.max { lhs, rhs in
self.modificationDate(for: lhs) < self.modificationDate(for: rhs)
}
}
/// Path to use for launchd stdout/err.
static var launchdLogPath: String {
self.ensureLogDirExists()
return stdoutLog.path
}
/// Path to use for the Gateway launchd job stdout/err.
static var launchdGatewayLogPath: String {
self.ensureLogDirExists()
return gatewayLog.path
}
}