
XCGLOGGER는 신속한 프로젝트에 사용하기위한 원래 디버그 로그 모듈입니다.
Swift에는 C 전 처리기가 포함되어 있지 않으므로 개발자가 Objective-C에서 사용할 디버그 로그 #define 매크로를 사용할 수 없습니다. 이것은 멋진 디버그 로그를 생성하는 전통적인 방법이 더 이상 작동하지 않음을 의미합니다. 평범한 오래된 print 전화에 의지하면 유용한 정보가 많이 손실되거나 더 많은 코드를 입력해야합니다.
Xcglogger를 사용하면 NSLog() 또는 print() 와 마찬가지로 날짜, 함수 이름, 파일 이름 및 줄 번호와 같은 추가 정보와 마찬가지로 콘솔 (및 선택적으로 파일 또는 기타 사용자 정의 목적지)에 세부 사항을 기록 할 수 있습니다.
이것으로 이동 :
Simple message
이것에 :
2014-06-09 06:44:43.600 [Debug] [AppDelegate.swift:40] application(_:didFinishLaunchingWithOptions:): Simple message
실행하다:
git submodule add https://github.com/DaveWoodCom/XCGLogger.git
저장소 폴더에서.
Cartfile 에 다음 줄을 추가하십시오.
github "DaveWoodCom/XCGLogger" ~> 7.1.5
그런 다음 carthage update --no-use-binaries 또는 carthage update 실행하십시오. Carthage의 설치 및 사용에 대한 자세한 내용은 프로젝트 페이지를 방문하십시오.
Swift에서 5.0 이상을 실행하는 개발자는 Copy Carthage Frameworks 빌드 단계의 입력 파일에 $(SRCROOT)/Carthage/Build/iOS/ObjcExceptionBridging.framework 를 추가해야합니다.
Podfile 에 다음 줄과 비슷한 것을 추가하십시오. 플랫폼, 버전/지점 등을 기준으로 조정해야 할 수도 있습니다.
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '12.0'
use_frameworks!
pod 'XCGLogger', '~> 7.1.5'
POD XCGLogger 자체적으로 지정에는 핵심 프레임 워크가 포함됩니다. 옵션 구성 요소도 포함 할 수 있도록 SUBSPEC를 추가하기 시작했습니다.
pod 'XCGLogger/UserInfoHelpers', '~> 7.1.5' : userInfo 사전 사용을 사용하여 로그 메시지를 태그하는 데 도움이되는 실험 코드를 포함시킵니다.
그런 다음 pod install 실행하십시오. Cocoapods의 설치 및 사용에 대한 자세한 내용은 공식 웹 사이트를 방문하십시오.
참고 : Cocoapods 1.4.0 이전에는 스위프트 버전의 혼합물과 함께 여러 포드를 사용할 수 없었습니다. 각 포드가 올바른 스위프트 버전에 대해 구성되어 있는지 확인해야 할 수도 있습니다 (작업 영역의 POD 프로젝트에서 대상을 확인하십시오). 프로젝트의 Swift 버전을 수동으로 조정하면 다음에 pod install 실행할 때 재설정됩니다. PODSFILE에 post_install 후크를 추가하여 올바른 스위프트 버전 설정을 자동화 할 수 있습니다. 이것은 대부분 테스트되지 않았으며 그것이 좋은 해결책인지 확실하지 않지만 작동하는 것 같습니다.
post_install do |installer|
installer.pods_project.targets.each do |target|
if ['SomeTarget-iOS', 'SomeTarget-watchOS'].include? "#{target}"
print "Setting #{target}'s SWIFT_VERSION to 4.2n"
target.build_configurations.each do |config|
config.build_settings['SWIFT_VERSION'] = '4.2'
end
else
print "Setting #{target}'s SWIFT_VERSION to Undefined (Xcode will automatically resolve)n"
target.build_configurations.each do |config|
config.build_settings.delete('SWIFT_VERSION')
end
end
end
print "Setting the default SWIFT_VERSION to 3.2n"
installer.pods_project.build_configurations.each do |config|
config.build_settings['SWIFT_VERSION'] = '3.2'
end
end
물론 필요에 맞게 조정할 수 있습니다.
패키지 의존성에 다음 항목을 추가하십시오.
.Package(url: "https://github.com/DaveWoodCom/XCGLogger.git", majorVersion: 7)
사용:
이 빠른 시작 방법은 로거로 당신을 올리거나 실행하기위한 것입니다. 그러나 아래의 고급 사용량을 사용 하여이 라이브러리를 최대한 활용해야합니다.
Xcglogger 프로젝트를 프로젝트의 하위 프로젝트로 추가하고 타겟의 종속성으로 적절한 라이브러리를 추가하십시오. 대상의 General 탭에서 XCGLogger.framework 및 ObjcExceptionBridging.framework Embedded Binaries 섹션에 추가하십시오.
그런 다음 각 소스 파일에서 :
import XCGLoggerAppDelegate (또는 기타 글로벌 파일)에서 기본 XCGLOGGER 인스턴스에 대한 글로벌 상수를 선언하십시오.
let log = XCGLogger . default에서
application ( _ application : UIApplication , didFinishLaunchingWithOptions launchOptions : [ UIApplicationLaunchOptionsKey : Any ] ? = nil ) // iOS, tvOS또는
applicationDidFinishLaunching ( _ notification : Notification ) // macOS기능, 필요한 옵션을 구성하십시오.
log . setup ( level : . debug , showThreadName : true , showLevel : true , showFileNames : true , showLineNumbers : true , writeToFile : " path/to/file " , fileLevel : . debug ) writeToFile: String 또는 URL 일 수 있습니다. 파일이 이미 존재하면 사용하기 전에 청소됩니다. 매개 변수를 생략하거나 콘솔에만 로그인하기 위해 nil 로 설정하십시오. fileLevel: 매개 변수를 사용하여 파일 출력의 다른 로그 레벨을 선택적으로 설정할 수 있습니다. 콘솔과 동일한 로그 레벨을 사용하려면 nil 로 설정하거나 생략하십시오.
그런 다음 무언가를 기록하고 싶을 때마다 편의 방법 중 하나를 사용하십시오.
log . verbose ( " A verbose message, usually useful when working on a specific problem " )
log . debug ( " A debug message " )
log . info ( " An info message, probably useful to power users looking in console.app " )
log . notice ( " A notice message " )
log . warning ( " A warning message, may indicate a possible error " )
log . error ( " An error occurred, but it's recoverable, just info about what happened " )
log . severe ( " A severe error occurred, we are likely about to crash now " )
log . alert ( " An alert error occurred, a log destination could be made to email someone " )
log . emergency ( " An emergency error occurred, a log destination could be made to text someone " ) 다른 방법은 메시지의 로그 레벨을 설정합니다. XCGLOGGER는 현재 로그 레벨 설정에 더 큰 로그 레벨의 메시지 만 인쇄합니다. 따라서 .error 레벨이있는 로거는 .error , .severe , .alert 또는 .emergency 레벨의 로그 메시지 만 출력합니다.
Xcglogger는 사용하기 쉽고 위의 2 줄의 코드로 빠르게 실행하고 실행하는 것을 목표로합니다. 그러나 그것은 훨씬 더 큰 제어와 유연성을 허용합니다.
로그 메시지는 다양한 목적지로 로그 메시지를 전달하도록 구성 할 수 있습니다. 위의 기본 설정을 사용하여 Logger는 로그 메시지를 표준 Xcode 디버그 콘솔에 출력하고 경로가 제공되는 경우 선택적으로 파일을 출력합니다. Apple System Console, 데이터베이스, 타사 서버 또는 NSLogger와 같은 다른 응용 프로그램과 같은 더 흥미로운 장소로 로그를 보내고 싶을 것입니다. 이것은 로거에 대상을 추가하여 달성됩니다.
다음은 Apple System Log 및 파일에 출력하도록 로거를 구성하는 예입니다.
// Create a logger object with no destinations
let log = XCGLogger ( identifier : " advancedLogger " , includeDefaultDestinations : false )
// Create a destination for the system console log (via NSLog)
let systemDestination = AppleSystemLogDestination ( identifier : " advancedLogger.systemDestination " )
// Optionally set some configuration options
systemDestination . outputLevel = . debug
systemDestination . showLogIdentifier = false
systemDestination . showFunctionName = true
systemDestination . showThreadName = true
systemDestination . showLevel = true
systemDestination . showFileName = true
systemDestination . showLineNumber = true
systemDestination . showDate = true
// Add the destination to the logger
log . add ( destination : systemDestination )
// Create a file log destination
let fileDestination = FileDestination ( writeToFile : " /path/to/file " , identifier : " advancedLogger.fileDestination " )
// Optionally set some configuration options
fileDestination . outputLevel = . debug
fileDestination . showLogIdentifier = false
fileDestination . showFunctionName = true
fileDestination . showThreadName = true
fileDestination . showLevel = true
fileDestination . showFileName = true
fileDestination . showLineNumber = true
fileDestination . showDate = true
// Process this destination in the background
fileDestination . logQueue = XCGLogger . logQueue
// Add the destination to the logger
log . add ( destination : fileDestination )
// Add basic app info, version info etc, to the start of the logs
log . logAppDetails ( )요구에 따라 각각의 로그 대상을 다른 옵션으로 구성 할 수 있습니다.
또 다른 일반적인 사용 패턴은 여러 로거, 아마도 UI 문제, 하나는 네트워킹 및 데이터 문제를위한 여러 로거를 갖는 것입니다.
각 로그 대상은 자체 로그 레벨을 가질 수 있습니다. 편의로 로그 객체 자체에서 로그 레벨을 설정할 수 있으며 해당 레벨을 각 대상으로 전달합니다. 그런 다음 다른 데 필요한 목적지를 설정하십시오.
참고 : 대상 객체는 하나의 로거 객체에만 추가 할 수 있으며, 1 초에 추가하면 첫 번째에서 제거됩니다.
또는 폐쇄를 사용하여 글로벌 변수를 초기화하여 모든 초기화가 한 곳에서 수행 될 수 있습니다.
let log : XCGLogger = {
let log = XCGLogger ( identifier : " advancedLogger " , includeDefaultDestinations : false )
// Customize as needed
return log
} ( ) 참고 : 로그 객체를 게으르게 생성하므로 실제로 필요할 때까지 생성되지 않습니다. 앱 정보 세부 사항의 초기 출력이 지연됩니다. 이로 인해 앱 실행에서 무언가를 let _ = log 하지 않으면 didFinishLaunching 을 추가하여 앱 시작시 로그 오브젝트를 앱 시작시 생성하는 것이 좋습니다.
문자열을 기록 할 수 있습니다.
log . debug ( " Hi there! " )또는 당신이 원하는 모든 것 :
log . debug ( true )
log . debug ( CGPoint ( x : 1.1 , y : 2.2 ) )
log . debug ( MyEnum . Option )
log . debug ( ( 4 , 2 ) )
log . debug ( [ " Device " : " iPhone " , " Version " : 7 ] ) XCGLOGGER 4를 처음 접하고 이제 로거 (또는 특정 목적지)에 적용 할 필터를 만들 수 있습니다. 필터를 작성하고 구성한 다음 (아래 예제) 옵션 filters 속성을 필터가 포함 된 배열로 설정하여 로거 또는 대상 객체에 추가하십시오. 필터는 배열에 존재하는 순서대로 적용됩니다. 처리 중에 각 필터는 로그 메시지를 로그에서 제외 해야하는지 묻습니다. 필터가 로그 메시지를 제외하면 제외됩니다. 필터는 다른 필터의 제외를 되돌릴 방법이 없습니다.
대상의 filters 속성이 nil 인 경우 로그 filters 속성이 대신 사용됩니다. 하나의 대상 로그를 모두 갖추려면 다른 모든 목적지가 무언가를 필터링하는 동안 필터를 로그 오브젝트에 추가하고 한 대상의 filters 속성을 빈 배열로 설정하십시오 [] .
참고 : 목적지와 달리 여러 로거 및/또는 여러 대상에 동일한 필터 객체를 추가 할 수 있습니다.
특정 파일에서 모든 로그 메시지를 제외하려면 다음과 같은 제외 필터를 만듭니다.
log . filters = [ FileNameFilter ( excludeFrom : [ " AppDelegate.swift " ] , excludePathWhenMatching : true ) ] excludeFrom: Array<String> 또는 Set<String> 동시에 여러 파일을 지정할 수 있습니다.
excludePathWhenMatching: Defaults to true 에서 Path 's를 일치시키지 않으면 생략 할 수 있습니다.
특정 세트로 파일에 대한 로그 메시지를 포함하려면 includeFrom: Initializer를 사용하여 필터를 만듭니다. inverse 속성을 전환하여 제외 필터를 포함 필터로 뒤집을 수도 있습니다.
태그로 로그 메시지를 필터링하려면 로그 메시지에 태그를 설정할 수 있어야합니다. 각 로그 메시지에는 이제 필터 (및/또는 포맷터 등)가 사용할 추가 사용자 정의 데이터가 연결되어있을 수 있습니다. 이것은 userInfo: Dictionary<String, Any> 객체로 처리됩니다. 사전 키는 향후 추가와의 충돌을 피하기 위해 네임 스케이팅 문자열이어야합니다. 공식 키는 com.cerebralgardens.xcglogger 로 시작합니다. 태그 키는 XCGLogger.Constants.userInfoKeyTags 에서 액세스 할 수 있습니다. 당신은 확실히 그것을 입력하고 싶지 않으므로 글로벌 바로 가기를 자유롭게 만들 수 있습니다 : let tags = XCGLogger.Constants.userInfoKeyTags . 이제 로그를 쉽게 태그 할 수 있습니다.
let sensitiveTag = " Sensitive "
log . debug ( " A tagged log message " , userInfo : [ tags : sensitiveTag ] ) 태그의 값은 필요에 따라 Array<String> , Set<String> String 일 수 있습니다. 그들은 필터링 될 때 모두 같은 방식으로 작동합니다.
워크 플로 및 사용량에 따라 userInfo 사전을 설정하는 더 빠른 방법을 만들 수 있습니다. 가능한 다른 바로 가기는 아래를 참조하십시오.
로그가 태그를 지정 했으므로 쉽게 필터링 할 수 있습니다.
log . filters = [ TagFilter ( excludeFrom : [ sensitiveTag ] ) ] FileNameFilter 와 마찬가지로 includeFrom: 또는 지정된 태그가있는 로그 메시지 만 포함하도록 inverse 사용할 수 있습니다.
개발자에 의한 필터링은 XCGLogger.Constants.userInfoKeyDevs 의 userInfo 키 만 사용하여 태그로 필터링하는 것과 같습니다. 실제로 두 필터는 추가 필터를 만들 때 사용할 수있는 UserInfoFilter 클래스의 서브 클래스입니다. 아래의 XCGlogger 확장을 참조하십시오.
여러 개발자가있는 대규모 프로젝트에서는 로그 메시지 태그 태그를 시작하고 메시지를 추가 한 개발자를 표시 할 것입니다.
매우 유연하지만 userInfo 사전은 사용하기가 약간 번거 롭을 수 있습니다. 단순히 물건에 사용할 수있는 몇 가지 가능한 방법이 있습니다. 나는 여전히 이것들을 직접 테스트하고 있으므로 공식적으로 도서관의 일부가 아니라고 아직 피드백이나 다른 제안을 좋아합니다.
userinfo 사전을 만드는 데 도움이되는 실험 코드를 만들었습니다. (Cocoapods를 사용하는 경우 선택적 UserInfoHelpers subspec를 포함). iOS 데모 앱을 확인하여 사용중인 것을 확인하십시오.
UserInfoTaggingProtocol 프로토콜을 준수하는 두 가지 struct가 있습니다. Tag 와 Dev .
프로젝트에 맞는 각각에 대한 확장을 만들 수 있습니다. 예를 들어:
extension Tag {
static let sensitive = Tag ( " sensitive " )
static let ui = Tag ( " ui " )
static let data = Tag ( " data " )
}
extension Dev {
static let dave = Dev ( " dave " )
static let sabby = Dev ( " sabby " )
} 이러한 유형과 함께 오버로드 된 연산자가 있습니다 | 이를 사용하여 UserInfo: 로깅 통화의 매개 변수와 호환되는 사전으로 병합 할 수 있습니다.
그런 다음 다음과 같은 메시지를 기록 할 수 있습니다.
log . debug ( " A tagged log message " , userInfo : Dev . dave | Tag . sensitive ) 이 UserInfoHelpers 에서보고있는 몇 가지 현재 문제가 있기 때문에 현재 선택 사항/실험을 한 이유입니다. 개선에 대한 의견/제안을 듣고 싶습니다.
| Set 가없는 한 사전을 합치십시오. 사전 중 하나에 Set 포함되어 있으면 합병하지 않고 그 중 하나를 사용합니다. 양쪽에 동일한 키에 대한 세트가있는 경우 왼쪽을 선호합니다.userInfo: 매개 변수에는 사전이 필요하므로 단일 개발자 또는 태그 객체를 전달할 수 없습니다. | 운영자는 자동으로 호환 가능한 사전으로 변환하도록합니다. 예를 들어 하나의 태그 만 원한다면 .dictionary 매개 변수에 수동으로 액세스해야합니다. userInfo: Tag("Blah").dictionary . 모든 로그 방법은 폐쇄시 작동합니다. Swift 's assert() 함수와 동일한 구문 설탕을 사용 하여이 접근 방식을 사용하면 어쨌든 출력되지 않는 로그 메시지를 구축하는 동시에 깨끗한 통화 사이트를 보존 할 수 없습니다.
예를 들어, 디버그 로그 레벨이 억제되는 경우 다음 로그 명령문은 리소스를 낭비하지 않습니다.
log . debug ( " The description of ( thisObject ) is really expensive to create " ) 마찬가지로 결과를 기록하기 전에 계산을 수행하려면 루프를 반복해야한다고 가정 해 봅시다. Objective-C에서는 해당 코드 블록을 #if #endif 사이에 넣고 코드가 실행되는 것을 방지 할 수 있습니다. 그러나 Swift에서는 이전에는 여전히 해당 루프를 처리하고 자원을 낭비해야합니다. XCGLogger 사용하면 다음과 같이 간단합니다.
log . debug {
var total = 0.0
for receipt in receipts {
total += receipt . total
}
return " Total of all receipts: ( total ) "
} 로그 라인을 생성하지 않고 코드를 선택적으로 실행하거나 nil 반환하거나 verboseExec , debugExec , infoExec , warningExec , errorExec 및 severeExec 중 하나를 사용하려는 경우.
자신만의 DateFormatter 객체를 만들어 로거에 할당 할 수 있습니다.
let dateFormatter = DateFormatter ( )
dateFormatter . dateFormat = " MM/dd/yyyy hh:mma "
dateFormatter . locale = Locale . current
log . dateFormatter = dateFormatterXcglogger는 다양한 장소에서 색상을 활성화하기 위해 로그 메시지에 서식 코드를 추가하는 것을 지원합니다. 원래 옵션은 Xcodecolors 플러그인을 사용하는 것이 었습니다. 그러나 Xcode (버전 8 기준)는 더 이상 공식적으로 플러그인을 지원하지 않습니다. 현재 로그를 Xcode가 아닌 색상으로 볼 수 있습니다. ANSI 색상 지지대를 사용하여 제출 개체에 색상을 추가하고 터미널 창을 통해 로그를 볼 수 있습니다. 이것은 대담한, 이탤릭체를 추가하거나 깜박이는 것과 같은 몇 가지 추가 옵션을 제공합니다!
일단 활성화되면 각 로그 레벨은 고유 한 색상을 가질 수 있습니다. 이러한 색상은 원하는대로 사용자 정의 할 수 있습니다. 여러 로거를 사용하는 경우 각 로거를 자체 색상으로 설정할 수 있습니다.
ANSI Formatter 설정의 예 :
if let fileDestination : FileDestination = log . destination ( withIdentifier : XCGLogger . Constants . fileDestinationIdentifier ) as? FileDestination {
let ansiColorLogFormatter : ANSIColorLogFormatter = ANSIColorLogFormatter ( )
ansiColorLogFormatter . colorize ( level : . verbose , with : . colorIndex ( number : 244 ) , options : [ . faint ] )
ansiColorLogFormatter . colorize ( level : . debug , with : . black )
ansiColorLogFormatter . colorize ( level : . info , with : . blue , options : [ . underline ] )
ansiColorLogFormatter . colorize ( level : . notice , with : . green , options : [ . italic ] )
ansiColorLogFormatter . colorize ( level : . warning , with : . red , options : [ . faint ] )
ansiColorLogFormatter . colorize ( level : . error , with : . red , options : [ . bold ] )
ansiColorLogFormatter . colorize ( level : . severe , with : . white , on : . red )
ansiColorLogFormatter . colorize ( level : . alert , with : . white , on : . red , options : [ . bold ] )
ansiColorLogFormatter . colorize ( level : . emergency , with : . white , on : . red , options : [ . bold , . blink ] )
fileDestination . formatters = [ ansiColorLogFormatter ]
} 필터와 마찬가지로 여러 로거 및/또는 여러 대상에 동일한 Formatter 객체를 사용할 수 있습니다. 목적지의 formatters 속성이 nil 인 경우 로거의 formatters 속성이 대신 사용됩니다.
고유 한 맞춤형 포맷터 생성에 대한 정보는 아래의 xcglogger 확장을 참조하십시오.
Swift 빌드 플래그를 사용하면 디버깅과 스테이징/생산에 다른 로그 레벨을 사용할 수 있습니다. 설정 -> 스위프트 컴파일러 -사용자 정의 플래그 -> 기타 스위프트 플래그를 빌드하고 디버그 항목에 -DDEBUG 추가하십시오.
#if DEBUG
log . setup ( level : . debug , showThreadName : true , showLevel : true , showFileNames : true , showLineNumbers : true )
#else
log . setup ( level : . severe , showThreadName : true , showLevel : true , showFileNames : true , showLineNumbers : true )
#endif 비슷한 방식으로 여러 옵션을 설정할 수 있습니다. 옵션을 기반으로 다른 로그 대상을 사용하는 예를 들어 USE_NSLOG 를 검색하는 예를 들어 업데이트 된 iOSDEMO 앱을 참조하십시오.
기본적으로 제공된 로그 대상은 호출 된 스레드의 로그를 처리합니다. 응용 프로그램을 디버깅 할 때 로그 메시지가 즉시 표시되도록하기위한 것입니다. 통나무 호출 직후에 중단 점을 추가하고 중단 점이 발생할 때 결과를 볼 수 있습니다.
그러나 애플리케이션을 적극적으로 디버깅하지 않으면 현재 스레드의 로그를 처리하면 성능이 발생할 수 있습니다. 이제 선택한 디스패치 대기열에 로그를 대상 프로세스를 지정할 수 있습니다 (또는 기본 공급 장치를 사용).
fileDestination . logQueue = XCGLogger . logQueue또는 심지어
fileDestination . logQueue = DispatchQueue . global ( qos : . background )위의 대체 구성 방법과 결합하면 매우 잘 작동합니다.
#if DEBUG
log . setup ( level : . debug , showThreadName : true , showLevel : true , showFileNames : true , showLineNumbers : true )
#else
log . setup ( level : . severe , showThreadName : true , showLevel : true , showFileNames : true , showLineNumbers : true )
if let consoleLog = log . logDestination ( XCGLogger . Constants . baseConsoleDestinationIdentifier ) as? ConsoleDestination {
consoleLog . logQueue = XCGLogger . logQueue
}
#endif로거의 고급 구성을 사용하는 경우 (위의 고급 사용법 참조) 이제 로거가 자동으로 덮어 쓰는 대신 기존 로그 파일에 추가하도록 지정할 수 있습니다.
옵션을 추가 shouldAppend: FileDestination 객체를 초기화 할 때 매개 변수를 추가하십시오. 또한 appendMarker: 매개 변수를 추가하여 앱의 새 인스턴스가 추가 된 위치를 나타내는 로그 파일에 마커를 추가 할 수 있습니다. 기본적으로 매개 변수를 -- ** ** ** -- 하면 추가합니다. 마커를 추가하여 건너 뛰기 위해 nil 로 설정하십시오.
let fileDestination = FileDestination(writeToFile: "/path/to/file", identifier: "advancedLogger.fileDestination", shouldAppend: true, appendMarker: "-- Relauched App --")
파일에 로그인 할 때 로그 파일을 보관 된 대상으로 자동 회전시키고 로거가 이전 로그 파일 대신 새 로그 파일을 자동으로 작성하도록하는 옵션이 있습니다.
AutoRotatingFileDestination 레스트레이션 클래스를 사용하여 대상을 생성하고 다음 속성을 설정하십시오.
targetMaxFileSize : 파일이 이것보다 커지면 자동으로 회전합니다.
targetMaxTimeInterval : 몇 초 후에 자동 회전합니다
targetMaxLogFiles : 보관할 로그 파일 수, 이전 버전은 자동으로 삭제됩니다.
이것들은 모두 하드 제한이 아니라 로거의 지침입니다.
대체 로그 대상을 만들 수 있습니다 (내장 된 로그 대상 외에). 사용자 정의 로그 대상은 DestinationProtocol 프로토콜을 구현해야합니다. 객체를 인스턴스화하고 구성한 다음 add(destination:) 로 XCGLogger 객체에 추가하십시오. 두 가지 기본 대상 클래스 ( BaseDestination 및 BaseQueuedDestination )가 있으며 대부분의 프로세스를 처리하여 상속받을 수 있으며 사용자 정의 클래스에서 하나의 추가 메소드 만 구현해야합니다. 예제에 대한 ConsoleDestination 및 FileDestination 살펴보십시오.
사용자 정의 필터 또는 형식 반포를 만들 수도 있습니다. 제공된 버전을 시작점으로 살펴보십시오. 필터와 포맷터는 로그 메시지가 처리 될 때 변경할 수 있습니다. 즉, 암호를 벗기고, 특정 단어를 강조 표시하고, 메시지를 암호화하는 등의 필터를 만들 수 있습니다.
Xcglogger는 당신과 같은 커뮤니티의 기여로 인해 Swift에 가장 적합한 로거입니다. 계속해서 훌륭하게 만들 수있는 방법에는 여러 가지가 있습니다.
참고 : 풀 요청을 제출할 때 많은 작은 커밋 구절을 사용하여 하나의 큰 커밋을 사용하십시오. 새 버전에 결합 해야하는 몇 가지 풀 요청이있을 때 합병하기가 훨씬 쉽습니다.
이 라이브러리가 도움이되면이 다른 도구가 도움이 될 것입니다.
Watchdog : https://watchdogforxcode.com/
또한 다른 프로젝트를 확인하십시오.
변경 로그는 이제 자체 파일에 있습니다 : changelog.md