Khi nhắc đến log ở trong ứng dụng của Swift hoặc iOS nói chung, thì những API mà thường hay được chúng ta nghĩ đến đầu tiên đó là print
hoặc NSLog
. Tuy nhiên, Apple đã giới thiệu một chuẩn mới cho việc log code trở nên thống nhất, đó là OSLog
. Đây là cách log hiện tại đang được khuyến khích sử dụng nhất, đưa ra một cách tóm gọn thông tin hiệu quả trong toàn bộ ứng dung của chúng ta.
Việc log thống nhất cung cấp một số cải thiện lớn so với các kĩ thuật cũ và một số điểm mà chúng ta đã quen thuộc
Việc sử dung log thống nhất trong Swift cực kỳ đơn giản bằng cách sử dụng hàm os_log
, và chúng ta sẽ thấy rằng hàm này sẽ sử dụng StaticString
làm tham số thay vì sử dụng String
như bình thường. Cách đơn giản nhất để log một message đó chính là đưa thẳng String
vào trong hàm để gọi. Có thể trích xuất message ra thành một property, tuy nhiên nó vẫn phải là một StaticString
StaticString
, thay vì dùng một string đơn giản, chúng ta phải sử dụng các tham số được format. Điều này có thể gây khó chịu, tuy nhiên nó không quá khó để sử dụng và cung cấp lợi ích cho việc bảo mật người dùng mà chúng ta sẽ đề cập đến sau này. Chúng ta có thể truy cập vào tất cả các kí hiệu tham số thông thường và các decoder.Gọi đến os_log
sẽ đặc tả một đối tượng là OSLog
để sử dụng, chứa bên trong nó là thông tin về hệ thống con và category. Thông tin này là vô giá cho việc tìm kiểu, lọc và đọc hiểu log sau này.
Hệ thống con sẽ gom lại tất cả các log cho một ứng dụng hoặc một module cụ thể, cho phép chúng ta lọc những gì thuộc về log của chúng ta. Từ đánh giá log của Apple, convention cho hệ thống con làreverse domain style
, giống như là Bundle Identifier
của ứng dụng hoặc framework. Nếu ứng dụng được module hoá thành các framework thì kiểu log này vô cùng cần thiết để phân biệt.
Các category được sử dụng thành từng nhóm log vào trong những vùng liên quan, để giúp ta khoanh vùng được scope của message log. Convention của category sử dụng là human-readable name
giống như là UI
hoặc User
. Chúng ta có thể nhóm log thành các layer xuyên suốt các hệ thống hoặc các chức năng, như là Network
hoặc Contacts
. Hoặc thay vì cách trên, chúng ta có thể nhóm thành các class như là Contacts Repository
. Tất cả phụ thuộc vào việc chúng ta đi theo hướng nào để hiểu được project của chúng ta dễ nhất.
Chúng ta có thể thêm các category và các hệ thống con như là extension của OSLog
, làm cho chúng dễ truy cập hơn trong toàn ứng dụng. Lưu chúng vào một nơi tránh cho việc tạo chúng tràn lan khó kiểm soát.
Hệ thống log tổng hợp chứa đựng một set những tầng log mà ở đó sẽ hiện lên những message mà chúng ta hướng đến. Các tầng log sẽ điều khiển việc log sẽ hiện lên cho chúng ta như thế nào và khi nào với từng môi trường khác nhau. Hệ thống quản lý log có thể được tuỳ chỉnh dễ dàng dựa vào command-line .
Đặc tả các tầng của log bằng các sử dụng OSLogType
chính là một tham số của os_log
Để đảm bảo rằng thông tin bảo mật người dùng một cách chặt chẽ trong hệ thống log của ứng dụng, hệ thống log thống nhất có một tham số để phân biệt public và private. Mặc định, chỉ có scalar(boolean, integer) là được gom và các string động hoặc đối tượng động phức tạp là được ghi lại. Nếu cần thiết , tham số string động có thể được đặc tả thành public và tham số scalar có thể đặc tả thành private.
Trong lúc debugging, message log sẽ được hiện trong Xcode. Nhưng cách tốt nhất đọc log chính là ở trong console của MacOS. Ở đây chúng ta sẽ sắp xếp, loc và tìm kiếm log, cùng với việc xem chúng dễ hơn.
Nguồn: Devmaster Academy via viblo.asia