Swift: print() vs println() vs NSLog()
사이에 무슨 차이가 있습니까?print,NSLog그리고.println그리고 제가 각각 언제 사용해야 하나요?
예를 들어 Python에서 사전을 인쇄하려면print myDict하지만 지금은 두 가지 다른 선택지가 있습니다.제가 각각을 어떻게, 언제 사용해야 하나요?
몇 가지 차이점:
print대println:그
printfunction은 앱을 디버깅할 때 Xcode 콘솔에 메시지를 출력합니다.그
println는 Swift 2에서 제거된 버전으로, 더 이상 사용되지 않습니다.을 사용하는 ,println하게 이제안대수있습다니체할게하로 대체할 수.print.Swift , Swift 1.x 돌아서가로,,
print에, 된문자끝새에줄추않반은면지가하문를인자의쇄열,▁did▁charact반쇄,은면않ers▁new▁atline지▁not▁whereas▁add,println에는 죠었그랬. 하지만 요즘은.print하지 상항문의끝새줄문추가고하, 그하않제다다공니합음을면려으지렇게를을 합니다.terminator의 매 변 수 개의 파라미터."".NSLog:NSLog타스탬식출별추력반가는하면에와프를임자▁adds반▁a면,▁and▁whereas▁output▁timestamp▁to▁ident는.print하지 않을 것입니다;NSLog의 콘솔에 되는 반면, "Debugger의 콘솔"에는 표시됩니다.print디버거 콘솔에만 나타납니다.NSLog10에서는 iOS 10-13/macOS 10.12-10.x를 사용합니다.printf문자열 -style 형문열예자)NSLog("%0.4f", CGFloat.pi)다음을 생성할 수 있습니다.
2017-06-09 11:57:55.642328-0700 MyApp [28937:1751492] 3.1416
NSLog14/macOS 11은 일반적으로 (iOS 14와 11은으로) 선호합니다Logger1파운드가NSLog다음 점을 봅니다.)
즘은요.
NSLog합니다. 으로 "로그인합니다. 우리는 일반적으로 다음과 같은 방법을 사용합니다(아래 참조).NSLog.11 , 는 iOS 14/macOS 11, 우는을 가지고 .
Logger인터페이스를 사용할 수 있습니다.에대 위해를개에 대한 .LoggerWWDC 2020 Swift의 탐색 로깅을 참조하십시오.사용하기
Logger은 가와야합을 수입해야 .os:import os맘에 들다
NSLog콘솔 합니다. Xcode는 Xcode 디버깅 콘솔에서도 마찬가지입니다.성을 합니다.
Logger그리고.log그것에 대한 메시지:let logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "network") logger.log("url = \(url)")외부 콘솔 앱을 통해 앱을 관찰할 때 다음을 기준으로 필터링할 수 있습니다.
subsystem그리고.category디버깅 메시지를 (a) 앱을 대신하여 다른 하위 시스템에서 생성한 메시지 또는 (b) 다른 범주 또는 유형의 메시지와 구별하는 것이 매우 유용합니다.메시지를 할 수 . 를 들어 " " " " " 입니다.
.info,.debug,.error,.fault,.critical,.notice,.trace예:logger.error("web service did not respond \(error.localizedDescription)")따라서 외부 콘솔 앱을 사용하는 경우 특정 범주의 메시지만 표시하도록 선택할 수 있습니다(예: 콘솔 "액션" 메뉴에서 "디버깅 메시지 포함"을 선택한 경우 디버깅 메시지만 표시).또한 이러한 설정은 디스크에 기록되는지 여부에 대한 많은 미묘한 문제 세부 정보를 제공합니다.자세한 내용은 WWDC 비디오를 참조하십시오.
기본적으로 숫자가 아닌 데이터는 로그에서 수정됩니다.URL을 기록한 예에서 앱이 장치 자체에서 호출되고 MacOS 콘솔 앱에서 시청 중인 경우 macOS 콘솔에 다음이 표시됩니다.
URL = <private>
이 메시지에 사용자 기밀 데이터가 포함되지 않을 것으로 확신하고 macOS 콘솔에서 문자열을 보려면 다음을 수행해야 합니다.
logger.log("url = \(url, privacy: .public)")
11 이전 , 10 14/macOS 11 이전 버전, iOS 10/mac 10 소개 OS 10.12 »
os_log"로그인 기록"에 사용됩니다.통합 로깅에 대한 일반적인 소개는 WWDC 2016 비디오 통합 로깅 및 활동 추적을 참조하십시오.수품
os.log:import os.log은 정야합다니해의를 .
subsystem그리고.category:let log = OSLog(subsystem: Bundle.main.bundleIdentifier!, category: "network")을 할 때
os_log문자열 보간 대신 printf 스타일 패턴을 사용합니다.os_log("url = %@", log: log, url.absoluteString)메시지를 할 수 . 를 들어 " " " " " 입니다.
.info,.debug,.error,.fault(또는).default):os_log("web service did not respond", type: .error)보열간 자 사 수 없 니 습 다
os_log예를 들어 다음과 같습니다.print그리고.Logger사용자:logger.log("url = \(url)")하지만 함께
os_log다음을 수행해야 합니다.os_log("url = %@", url.absoluteString)그
os_log에서는 동일한 개인 정보를 에 공개 가시성을 지정합니다( 에는동예서사자는용용하보만지를지다식니정형합시성을가개으공로적).%{public}@%@예를 들어, 외부 장치에서 보려면 다음 작업을 수행해야 합니다.os_log("url = %{public}@", url.absoluteString)계측기에서 다양한 활동을 보려면 "관심 지점" 로그를 사용할 수도 있습니다.
let pointsOfInterest = OSLog(subsystem: Bundle.main.bundleIdentifier!, category: .pointsOfInterest)범위는 다음과 같이 시작합니다.
os_signpost(.begin, log: pointsOfInterest, name: "Network request")마지막으로 다음과 같이 마무리합니다.
os_signpost(.end, log: pointsOfInterest, name: "Network request")자세한 내용은 https://stackoverflow.com/a/39416673/1271826 을 참조하십시오.
줄, 결론:print 로깅으로 통합 Xcode를 사용하는지 여부)Logger또는os_log 더 큰 는 동일한 기능을 제공하지만 훨씬 더 큰 기능을 제공합니다.
통합 로깅의 힘은 Xcode 외부에서 테스트해야 하는 iOS 앱을 디버깅할 때 크게 완화됩니다.예를 들어 백그라운드 가져오기와 같은 백그라운드 iOS 앱 프로세스를 테스트할 때 Xcode 디버거에 연결하면 앱 수명 주기가 변경됩니다.따라서 Xcode의 디버거에서 앱을 시작하는 것이 아니라 장치 자체에서 앱을 실행하여 물리적 장치에서 테스트하는 경우가 많습니다.통합 로깅을 사용하면 macOS 콘솔 앱에서 iOS 장치 로그 문을 계속 볼 수 있습니다.
Swift 2를 사용하는 경우 이제 print()만 사용하여 출력에 무언가를 쓸 수 있습니다.
Apple은 println()과 print() 기능을 하나로 결합했습니다.
iOS 9로 업데이트됨
기본적으로 이 함수는 줄 바꿈을 추가하여 인쇄하는 줄을 종료합니다.
print("Hello Swift")
터미네이터
값 뒤에 줄 바꿈 없이 값을 인쇄하려면 빈 문자열을 종료자로 전달
print("Hello Swift", terminator: "")
구분자
이제 구분 기호를 사용하여 여러 항목을 연결할 수 있습니다.
print("Hello", "Swift", 2, separator:" ")
둘다요.
아니면 이런 식으로 사용할 수도 있습니다.
print("Hello", "Swift", 2, separator:" ", terminator:".")
는 게가는스트프위 2를 가지고 .debugPrint())CustomDebugStringConvertible의전)!
잊지 마세요debugPrint()와 같이 작동하는.print()디버깅에 가장 적합합니다.
예:
- 줄들
print("Hello World!")되다Hello WorlddebugPrint("Hello World!")되다"Hello World"
- 범위
print(1..<6)되다1..<6debugPrint(1..<6)되다Range(1..<6)
모든 클래스는 프로토콜을 통해 디버그 문자열 표현을 사용자 지정할 수 있습니다.
Rob의 답변에 덧붙여, Apple은 iOS 10.0 이후 로그 데이터 압축 및 지연 데이터 수집을 포함한 새로운 기술 덕분에 기존 로깅 시스템(ASL 및 Syslog, NSLog 포함)을 대체하고 성능 면에서 기존 로깅 접근 방식을 능가하는 완전히 새로운 "통합 로깅" 시스템을 도입했습니다.
Apple에서:
유니파이드 로깅 시스템은 시스템의 모든 레벨에서 메시징을 캡처할 수 있는 효율적이고 성능이 뛰어난 단일 API를 제공합니다.이 유니파이드 시스템은 메모리 및 Disk의 데이터 저장소에 로그 데이터를 중앙 집중식으로 저장합니다.
은 Apple을 사용하는 을 강력히 추천합니다.os_log이전 로깅 시스템에 비해 훨씬 향상된 성능과 개발자를 위한 편리한 로그 및 활동 검사를 가능하게 하는 중앙 집중식 데이터 수집으로 인해 정보, 디버그, 오류 메시지를 포함한 모든 종류의 메시지를 기록할 것입니다.사실, 새로운 시스템은 너무 낮은 설치 공간이기 때문에 로그 명령을 삽입하면 버그가 사라지는 "관찰자 효과"를 유발하지 않고 버그가 발생하는 시기를 방해합니다.
자세한 내용은 여기에서 확인할 수 있습니다.
약요: 사용을 합니다.print()사용자의 편의를 위해 개인 디버깅을 수행할 수 있습니다(그러나 사용자 장치에 배포된 경우 메시지는 기록되지 않습니다).그런 다음 Unified Logging)을 합니다.os_log 모든 을 위해 한 한 다른 모든 것을 위해 가능한 한 많이.
iOS 로거
NSLog타임스탬프 및 식별자와 같은 메타 정보를 추가하고 1023개의 기호를 출력할 수 있습니다.또한 메시지를 콘솔에 인쇄합니다.가장 느린 방법.다른 응용 프로그램이 로그 파일에 액세스할 수 있으므로 안전하지 않습니다.@import Foundation NSLog("SomeString")print모든 문자열을 Xcode로 인쇄합니다.이전보다 성능이 향상되었습니다.@import Foundation print("SomeString")println) 및 (Swift v1 사용 가능) 및능\n의os_log(iOS v10에서) - 32768개의 기호도 콘솔에 인쇄합니다.이전보다 성능이 향상되었습니다.@import os.log os_log("SomeIntro: %@", log: .default, type: .info, "someString")Logger(iOS v14에서) - 32768개의 기호도 콘솔에 인쇄합니다.이전보다 성능이 향상되었습니다.@import os let logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "someCategory") logger.log("\(s)")
다른 방법이 있습니다.dump()로깅에도 사용할 수 있습니다.
func dump<T>(T, name: String?, indent: Int, maxDepth: Int, maxItems: Int)표준 출력에 대한 미러를 사용하여 개체의 내용을 덤프합니다.
언급URL : https://stackoverflow.com/questions/25951195/swift-print-vs-println-vs-nslog
'codememo' 카테고리의 다른 글
| PostgreSQL 서버가 중지되지 않음 (0) | 2023.05.08 |
|---|---|
| PHP의 Excel로 MySQL 데이터 내보내기 (0) | 2023.05.08 |
| 각 ng 모듈의 엔트리 구성 요소란 무엇입니까? (0) | 2023.05.03 |
| Xcode 4: .xarchive 대신 IPA 파일 생성 (0) | 2023.05.03 |
| HTML 표의 단어 모음 (0) | 2023.05.03 |
