2015-04-17 55 views
3

我正在考慮使用XCGLogger替換CocoaLumberjack,並想知道是否允許使用在主線程上創建和設置的全局記錄器按照自述文件從任何線程記錄以下內容?XCGLogger線程安全嗎?

log.info("This is not a valid format: \(inputStr)") 

回答

7

TL; DR:是的,XCGLogger是線程安全的,但它使用println()這本身它的線程安全的,所以println()其他呼叫者可以使它看起來好像XCGLogger本身不是。

XCGLogger使用隊列來確保調用的所有println()都是以線程安全的方式調用和完成的。

但請注意,如果您直接從應用程序的其他位置或其他庫中調用println(),則這些調用不是線程安全的,仍可能會干擾XCGLogger的調用。

項目中有一個單元測試(testMultiThreaded),它顯示通過併發隊列對XCGLogger進行多次調用,並且它們都安全地寫入。但是您可以看到,Xcode本身在運行時會輸出有關測試的信息,並且輸出可能會與日誌輸出混雜在一起。