[swift] Swift XCGLogger를 사용하여 로깅 메시지를 어떻게 시간별로 필터링하나요?

XCGLogger는 Swift에서 사용할 수 있는 강력한 로깅 프레임워크입니다. 로깅 메시지를 필터링하려면 로그 콘솔에 로그가 출력되기 전에 필터 함수를 사용하여 원하는 조건에 따라 필터링할 수 있습니다. 이러한 필터 함수를 통해 로깅 메시지를 시간별로 필터링하는 방법에 대해 알아보겠습니다.

먼저, 필터 함수를 생성합니다. 이 함수는 로깅 메시지가 시간 조건과 일치하는지 확인하는 역할을 합니다. 다음은 시간 조건에 따라 로깅을 필터링하는 로그 필터 함수의 예시입니다.

let timeFilter: XCGLogger.BlockFilterFunction = { (logDetails: LogDetails, logLevel: LogLevel) -> Bool in
    let calendar = Calendar.current
    let currentDate = Date()
    
    let currentTimeComponents = calendar.dateComponents([.hour, .minute], from: currentDate)
    let logTimeComponents = calendar.dateComponents([.hour, .minute], from: logDetails.date)
    
    // 필터링할 때 시작 시간과 종료 시간을 설정하고 해당 시간 범위에 포함되는 메시지만 필터링합니다.
    let startTimeComponents = DateComponents(hour: 9, minute: 0)
    let endTimeComponents = DateComponents(hour: 18, minute: 0)
    let startTime = calendar.date(bySettingHour: startTimeComponents.hour!, minute: startTimeComponents.minute!, second: 0, of: currentDate)!
    let endTime = calendar.date(bySettingHour: endTimeComponents.hour!, minute: endTimeComponents.minute!, second: 0, of: currentDate)!
    
    return calendar.compare(logTimeComponents, to: startTime, toGranularity: .minute) != .orderedAscending &&
           calendar.compare(logTimeComponents, to: endTime, toGranularity: .minute) != .orderedDescending
}

위의 예시에서는 현재 시간과 로깅 메시지의 시간을 비교하여 필터링 조건을 확인합니다. 이 필터 함수에서는 로깅 메시지를 ‘9:00 AM’부터 ‘6:00 PM’까지의 시간 범위에 해당하는지 확인합니다.

이제 로그 필터를 생성하고, 로그 설정에 등록합니다. 다음은 로그 필터를 생성하고, 필터를 로그 설정에 추가하는 예시 코드입니다.

let log = XCGLogger.default

if let logger = log.logAppenders.first?.logger {
    // 로그 필터 생성
    let timeFilter = XCGLogger.FilterBlock(filterBlock: timeFilter, queue: log.logQueue)
    logger.addLogFilter(timeFilter)
}

// 로그 출력 예시
log.verbose("This is a verbose message")
log.debug("This is a debug message")
log.info("This is an info message")
log.warning("This is a warning message")
log.error("This is an error message")

위의 코드에서는 기본 로그 인스턴스를 생성한 후, 로그 필터를 생성하여 로그 설정에 추가합니다. 이렇게하면 로그 필터가 로그 메시지를 필터링하고 원하는 시간 범위에 따라 로그가 출력됩니다.

참고 자료: XCGLogger 공식 문서