Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion Sources/ContainerLog/FileLogHandler.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import SystemPackage
public struct FileLogHandler: LogHandler {
public var logLevel: Logger.Level = .info
public var metadata: Logger.Metadata = [:]
public var metadataProvider: Logger.MetadataProvider?

private let label: String
private let category: String
Expand Down Expand Up @@ -76,8 +77,10 @@ public struct FileLogHandler: LogHandler {
}()
let timestamp = timestampFormatter.string(from: Date())

// Merge logger-level metadata with per-message metadata
var effectiveMetadata = self.metadata
if let provided = self.metadataProvider?.get(), !provided.isEmpty {
effectiveMetadata.merge(provided) { _, new in new }
}
if let metadata {
effectiveMetadata.merge(metadata) { _, new in new }
}
Expand Down
21 changes: 8 additions & 13 deletions Sources/ContainerLog/OSLogHandler.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,8 @@ public struct OSLogHandler: LogHandler {
private let logger: os.Logger

public var logLevel: Logger.Level = .info
private var formattedMetadata: String?

public var metadata = Logger.Metadata() {
didSet {
self.formattedMetadata = self.formatMetadata(self.metadata)
}
}
public var metadataProvider: Logger.MetadataProvider?
public var metadata = Logger.Metadata()

public subscript(metadataKey metadataKey: String) -> Logger.Metadata.Value? {
get {
Expand All @@ -56,14 +51,14 @@ extension OSLogHandler {
function: String,
line: UInt
) {
var formattedMetadata = self.formattedMetadata
var effectiveMetadata = self.metadata
if let provided = self.metadataProvider?.get(), !provided.isEmpty {
effectiveMetadata.merge(provided) { _, new in new }
}
if let metadataOverride = metadata, !metadataOverride.isEmpty {
formattedMetadata = self.formatMetadata(
self.metadata.merging(metadataOverride) {
$1
}
)
effectiveMetadata.merge(metadataOverride) { _, new in new }
}
let formattedMetadata = self.formatMetadata(effectiveMetadata)

var finalMessage = message.description
if let formattedMetadata {
Expand Down
17 changes: 13 additions & 4 deletions Sources/ContainerLog/StderrLogHandler.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import Logging
public struct StderrLogHandler: LogHandler {
public var logLevel: Logger.Level = .info
public var metadata: Logger.Metadata = [:]
public var metadataProvider: Logger.MetadataProvider?

public subscript(metadataKey metadataKey: String) -> Logger.Metadata.Value? {
get {
Expand All @@ -43,23 +44,31 @@ public struct StderrLogHandler: LogHandler {
function: String,
line: UInt
) {
var effectiveMetadata = self.metadata
if let provided = self.metadataProvider?.get(), !provided.isEmpty {
effectiveMetadata.merge(provided) { _, new in new }
}
if let metadata, !metadata.isEmpty {
effectiveMetadata.merge(metadata) { _, new in new }
}

let data: Data
switch logLevel {
case .debug, .trace:
let timestamp = isoTimestamp()
if let metadata, !metadata.isEmpty {
if !effectiveMetadata.isEmpty {
data =
"\(timestamp) \(message.description): \(metadata.description)\n"
"\(timestamp) \(message.description): \(effectiveMetadata.description)\n"
.data(using: .utf8) ?? Data()
} else {
data =
"\(timestamp) \(message.description)\n"
.data(using: .utf8) ?? Data()
}
default:
if let metadata, !metadata.isEmpty {
if !effectiveMetadata.isEmpty {
data =
"\(message.description): \(metadata.description)\n"
"\(message.description): \(effectiveMetadata.description)\n"
.data(using: .utf8) ?? Data()
} else {
data =
Expand Down