Swift:
표준 에러에 쓰기
방법:
Swift에서 표준 오류에 쓰기는 직접적으로 stderr 접근을 위한 FileHandle
클래스를 사용하여 수행될 수 있습니다. 간단한 예제는 다음과 같습니다:
import Foundation
// 메시지 정의
let errorMessage = "An error occurred.\n"
// 메시지를 데이터로 변환
if let data = errorMessage.data(using: .utf8) {
// stderr에 에러 메시지 쓰기
FileHandle.standardError.write(data)
}
stderr로의 출력(일반적으로 콘솔이나 터미널에서 볼 수 있음):
An error occurred.
보다 복잡한 로깅이나 외부 라이브러리와 함께 작업할 때는 SwiftLog과 같은 서드파티 라이브러리 사용을 고려할 수 있습니다. SwiftLog은 기본적으로 직접 stderr에 쓰지 않지만, 커스텀 로깅 백엔드를 구현하여 이를 달성할 수 있습니다. stderr에 쓰기 위한 사용자 정의 로그 핸들러를 정의하는 간소화된 예는 다음과 같습니다:
먼저 Package.swift
에서 프로젝트 의존성에 SwiftLog을 추가하세요:
// 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("This is an error message")
stderr로의 출력:
This is an error message
이 사용자 정의 핸들러를 사용하면 SwiftLog 오류 메시지를 직접 표준 오류로 라우팅할 수 있어, 애플리케이션이 생성할 수 있는 다른 로그 메시지와 원활하게 통합됩니다.