כתיבה לשגיאה התקנית

Swift:
כתיבה לשגיאה התקנית

איך לעשות:

ב-Swift, ניתן לכתוב לשגיאת פלט סטנדרטית באמצעות המחלקה FileHandle לגישה ישירה ל-stderr. הנה דוגמה פשוטה:

import Foundation

// הגדרת הודעה
let errorMessage = "אירעה שגיאה.\n"

// המרת ההודעה לנתונים
if let data = errorMessage.data(using: .utf8) {
    // כתיבת הודעת השגיאה ל-stderr
    FileHandle.standardError.write(data)
}

פלט ל-stderr (שנצפה לרוב בקונסולה או בטרמינל):

אירעה שגיאה.

לצורך תיעוד מורכב יותר או כאשר עובדים עם ספריות חיצוניות, קיים האפשרות לשקול שימוש בספריית צד שלישי כמו SwiftLog. למרות ש-SwiftLog לא כותב ל-stderr באופן ישיר מחוץ לקופסה, ניתן ליישם backend לוגים מותאם אישית כדי להשיג זאת. הנה דוגמה פשוטה להגדרת מטפל בלוגים מותאם אישית שכותב ל-stderr:

תחילה, הוסף את SwiftLog לתלות הפרויקט שלך ב-Package.swift:

// swift-tools-version:5.3

import PackageDescription

let package = Package(
    name: "YourPackageName",
    dependencies: [
        .package(url: "https://github.com/apple/swift-log.git", from: "1.0.0"),
    ],
    targets: [
        .target(
            name: "YourTargetName",
            dependencies: [
                .product(name: "Logging", package: "swift-log"),
            ]),
    ]
)

לאחר מכן, יש ליישם מטפל לוגים מותאם אישית שכותב ל-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) { }
    }
}

// שימוש
LoggingSystem.bootstrap(StderrLogHandler.init)
let logger = Logger(label: "com.example.yourapp")

logger.error("זו הודעת שגיאה")

פלט ל-stderr:

זו הודעת שגיאה

מטפל המותאם אישית הזה מאפשר לך למסר הודעות שגיאה של SwiftLog ישירות לשגיאת פלט סטנדרטית, משתלב בצורה חלקה עם הודעות לוג אחרות שהיישום שלך עשוי לייצר.