Swift:
Skriva till standardfel
Hur man gör:
I Swift kan skrivning till standardfel göras med hjälp av klassen FileHandle
för direkt åtkomst till stderr. Här är ett enkelt exempel:
import Foundation
// Definiera ett meddelande
let errorMessage = "Ett fel inträffade.\n"
// Konvertera meddelandet till data
if let data = errorMessage.data(using: .utf8) {
// Skriv felmeddelandet till stderr
FileHandle.standardError.write(data)
}
Utdata till stderr (visas vanligtvis i en konsol eller terminal):
Ett fel inträffade.
För mer komplex loggning eller när man arbetar med externa bibliotek kan man överväga att använda ett tredjepartsbibliotek som SwiftLog. Även om SwiftLog inte skriver till stderr direkt ur lådan, kan du implementera en anpassad loggbackend för att uppnå detta. Här är ett förenklat exempel på hur man definierar en anpassad logghanterare som skriver till stderr:
Först, lägg till SwiftLog i dina projektoberoenden i Package.swift
:
// swift-tools-version:5.3
import PackageDescription
let package = Package(
name: "DittPaketnamn",
dependencies: [
.package(url: "https://github.com/apple/swift-log.git", from: "1.0.0"),
],
targets: [
.target(
name: "DittMålnamn",
dependencies: [
.product(name: "Logging", package: "swift-log"),
]),
]
)
Sedan, implementera en anpassad logghanterare som skriver till stderr:
import Logging
import Foundation
struct StderrLogHandler: LogHandler {
let label: String
var logLevel: Logger.Level = .info
func log(level: Logger.Level, message: Logger.Message, metadata: Logger.Metadata?, source: String, file: String, function: String, line: UInt) {
let output = "\(message)\n"
if let data = output.data(using: .utf8) {
FileHandle.standardError.write(data)
}
}
subscript(metadataKey metadataKey: String) -> Logger.Metadata.Value? {
get { return nil }
set(newValue) { }
}
var metadata: Logger.Metadata {
get { return [:] }
set(newMetadata) { }
}
}
// Användning
LoggingSystem.bootstrap(StderrLogHandler.init)
let logger = Logger(label: "com.example.dittapp")
logger.error("Detta är ett felmeddelande")
Utdata till stderr:
Detta är ett felmeddelande
Denna anpassade hanterare låter dig dirigera dina SwiftLog felmeddelanden direkt till standardfel, och integreras sömlöst med andra loggmeddelanden som din applikation kan generera.