也谈 Swift 日志

作者:Joe,原文链接,原文日期:2016-01-23
译者:DianQK;校对:numbbbbb;定稿:Cee

2016 年 2 月 26 日更新swiftlogmaster 分支已经更新至 Swift 3.0 版本。

Swift 2.2Swift 3.0License ISC

Apple 发布 Swift 不久,就有大量的开发者提供了日志静态库,但 Lumberjack 这样的好项目并不能在 Xcode 外执行。我们开发了 swiftlog ,这是一个简单的日志记录程序。

来看看 swiftlog 的更新内容,它主要为 Linux 系统上的 Swift 应用提供快捷添加日志信息的方法。它有以下新特性:

  • Swift 包管理支持(SPM)

  • 使用惊艳的 Rainbow 包输出彩色日志

  • 支持写入文件

我们并不想把 swiftlog 变成一个复杂的框架,它只是一个非常简单实用的包。

使用 swiftlog

要使用 swiftlog 只需把以下代码添加到你的 Package.swift 依赖中:


import PackageDescription
 
let package = Package(
    name:"example",
    dependencies:[
      .Package(url:"https://github.com/iachievedit/swiftlog", majorVersion:1)
    ]
)

你可以引入 swiftlog 来使用日志记录,通过全局变量 sLogLevel(默认是 .None 即不使用日志记录)调整你需要的日志等级。


import swiftlog

slogLevel = .Verbose

SLogVerbose("A verbose log")
SLogInfo("An info log")
SLogWarning("A warning log")
SLogError("An error log")

所有的日志等级按重要程度从低到高排列输出。日志是彩色的:

Colored Logs!

很容易就能确定你的 slogLevel 级别,不过为了完整起见,这里还是列出所有级别:

  • .None

  • .Verbose

  • .Info

  • .Warning

  • .Error

此外,按照惯例还有两个方法: ENTRY_LOGEXIT_LOG 。这些“宏指令”用于追踪函数进入和退出:


import swiftlog

func multiply(multiplicand:Int, multiplier:Int) -> Int {
  ENTRY_LOG()
  let result = multiplicand * multiplier
  EXIT_LOG()
  return result
}

slogLevel = .Verbose

SLogVerbose("A verbose log")
SLogInfo("An info log")
SLogWarning("A warning log")
SLogError("An error log")

SLogVerbose("10 times 10 equals \(multiply(10, multiplier:10))")

这样就会有三条附加的日志信息:

VERBOSE - ENTRY multiply(_:multiplier:)
VERBOSE - EXIT  multiply(_:multiplier:)
VERBOSE - 10 times 10 equals 100

最后,我们可以使用 slogToFileAtPath 方法将日志写入文件。


import swiftlog

func multiply(multiplicand:Int, multiplier:Int) -> Int {
  ENTRY_LOG()
  let result = multiplicand * multiplier
  EXIT_LOG()
  return result
}

slogLevel = .Verbose
slogToFileAtPath("/tmp/log.txt", append:true)

SLogVerbose("A verbose log")
SLogInfo("An info log")
SLogWarning("A warning log")
SLogError("An error log")

SLogVerbose("10 times 10 equals \(multiply(10, multiplier:10))")

slogToFileAtPathappend 参数可以设置为 false,这会覆盖文件之前的内容。

源代码

你可以在 GitHub 上获取源代码。如果你不喜欢我选择的这些日志等级的颜色,动手修改吧!我可能会在接下来新的修改中提供更多定制的选项;到目前为止,我在努力让这个包使用起来非常简单,并努力减少旋钮(可配置项)的数量。

这个仓库还有一个例子,在 logexample 目录中。进入 logexample 并输入 swift build 来编译运行一下吧!


译者注:

在 Linux 上使用 swiftlog 是一件非常简单实用的工具,事实上我们在 Xcode 开发中也可以实现类似的功能。
文章开头提到的 Lumberjack 就是不错的选择,此外我们还可以使用 XCGLogger ,这个更轻量简洁一些。

我曾写过一篇 打造一个愉快的 Swift Debug 控制台,如果你喜欢用彩色的日志来装逼,这一定是你的菜。此外我还写了一个非常简单轻量的 RxSwift 的日志扩展 RxLogger。使用起来非常方便,当然你也可以参考这些来配置你喜欢或者符合你现在的业务需求的日志工具,比如日志白名单、过滤等功能。

多亏 jasl123 的提醒,我才意识到白名单是件很重要的事情,特别是在写入文件的时候,一定要记得过滤掉隐私信息。
本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 http://swift.gg


SwiftGG翻译组
授权翻译国外 Swift 大牛的优秀 Swift 文章,绝对走心,绝对一手。 最新文章请访问官网:[链接]

走心的 Swift 翻译组

1.6k 声望
955 粉丝
0 条评论
推荐阅读
如何用 UIKit Dynamics 进行碰撞检测
用 UIKit Dynamics 可以让指定对象具备碰撞行为。动态的项目能相互碰撞或者和任何指定的边界碰撞。在本节教程中,将学习创建自行一的边界,随机地让一些方块下落到边界上。本节教程使用的是 Xcode 8.3 和 iOS 10.3。

SwiftGG翻译组6阅读 4.3k

swift 第二节课学习笔记 字符串连接
{代码...} 输出结果HelloWorld,asdhjdh,200请按任意键继续. . .

风口的猪会飞阅读 654

MVVM 到底比 MVC 好在哪里?
MVC 和 MVVM 是比较常用的前端设计模式,你能清楚地说出 MVVM 到底比 MVC 好在哪里吗?我最近了解了一下 SwiftUI 里的 MVVM 是怎么应用的,觉得应该记录一下自己的想法,对这两种模式的对比和优缺点做个总结。

deepfunc阅读 608

UIControllerView 加载之后,UITableView 无法滑动到最底部
项目中,需要在进入 UIViewController 后对它里面的 UITableView 滑动到最底部,那么需要把代码写在 viewDidLoad 中。

ZanxinZ阅读 430

Y 分钟速成 swift
Swift 是 Apple 开发的用于 iOS 和 macOS 开发的编程语言。Swift 于2014年 Apple WWDC (全球开发者大会)中被引入,用以与 Objective-C 共存,同时对错误代码更具弹性。Swift 由 Xcode 6 beta 中包含的 LLVM 编...

小X学技术1阅读 250

【iOS逆向与安全】系统推送服务(APNS)拦截
经过之前的分享,相信大家已经掌握了用户级的插件开发。勤奋好学的你是否对系统级的插件也有着浓厚的性趣,本篇文章将和大家一起学习如何分析并编写一款系统级的插件。

小陈阅读 167

【iOS】字符串NSString转换为emoji表情的方式
emoji的表情存成uint32的形式,如0x1f60d、0x1f603等,可以通过系统方法转换为emoji的表情,emoji表情可以直接复制到其他地方打开。正常存储往往以字符串的形式保存。以下为Swift及oc版本的字符串转emoji表情的方...

Lynx阅读 145

走心的 Swift 翻译组

1.6k 声望
955 粉丝
宣传栏