swift学习日志—— Log日志
2015-12-31 11:55
218 查看
Log 输出是程序开发中很重要的组成部分,虽然它并不是直接的业务代码,但是却可以忠实地反映我们的程序是如何工作的,以及记录程序运行的过程中发生了什么。在OC中的Log日志设置请看我的另一篇博客:设置Log日志打印开关
在 Swift 中,最简单的输出方法就是使用
log 的文件,调用的行号以及所处的方法名字等等。
我们当然可以在
但是这显然非常麻烦,每次输入文件名和方法名不说,随着代码的改变,这些 Log 的位置也可能发生改变,这时我们可能还需要不断地去维护这些输出,代价实在太大。
在 Swift 中,编译器为我们准备了几个很有用的编译符号,用来处理类似这样的需求,它们分别是:
因此,我们可以通过使用这些符号来写一个好一些的 Log 输出方法:
这样,在进行 log 的时候我们只需要使用这个方法就能完成文件名,行号以及方法名的输出了。最棒的是,我们不再需要对这样的输出进行维护,无论在哪里它都能正确地输出各个参数:
另外,对于 log 输出更多地其实是用在程序开发和调试的过程中的,过多的输出有可能对运行的性能造成影响。在 Release 版本中关闭掉向控制台的输出也是软件开发中一种常见的做法。如果我们在开发中就注意使用了统一的 log 输出的话,这就变得非常简单了。使用条件编译的方法,我们可以添加条件,并设置合适的编译配置,使
Release 时被去掉,从而成为一个空方法:
新版本的 LLVM 编译器在遇到这个空方法时,甚至会直接将这个方法整个去掉,完全不去调用它,从而实现零成本
在 Swift 中,最简单的输出方法就是使用
log 的文件,调用的行号以及所处的方法名字等等。
我们当然可以在
// Test.swift func method() { //... print("文件名:Test.swift, 方法名:method,这是一条输出") //... }
但是这显然非常麻烦,每次输入文件名和方法名不说,随着代码的改变,这些 Log 的位置也可能发生改变,这时我们可能还需要不断地去维护这些输出,代价实在太大。
在 Swift 中,编译器为我们准备了几个很有用的编译符号,用来处理类似这样的需求,它们分别是:
符号 | 类型 | 描述 |
---|---|---|
FILE | String | 包含这个符号的文件的路径 |
LINE | Int | 符号出现处的行号 |
COLUMN | Int | 符号出现处的列 |
FUNCTION | String | 包含这个符号的方法名字 |
func printLog<T>(message: T, file: String = __FILE__, method: String = __FUNCTION__, line: Int = __LINE__) { print("\((file as NSString).lastPathComponent)[\(line)], \(method): \(message)") }
这样,在进行 log 的时候我们只需要使用这个方法就能完成文件名,行号以及方法名的输出了。最棒的是,我们不再需要对这样的输出进行维护,无论在哪里它都能正确地输出各个参数:
// Test.swift func method() { //... printLog("这是一条输出") //... } // 输出: // Test.swift[62], method(): 这是一条输出
另外,对于 log 输出更多地其实是用在程序开发和调试的过程中的,过多的输出有可能对运行的性能造成影响。在 Release 版本中关闭掉向控制台的输出也是软件开发中一种常见的做法。如果我们在开发中就注意使用了统一的 log 输出的话,这就变得非常简单了。使用条件编译的方法,我们可以添加条件,并设置合适的编译配置,使
printLog的内容在
Release 时被去掉,从而成为一个空方法:
func printLog<T>(message: T, file: String = __FILE__, method: String = __FUNCTION__, line: Int = __LINE__) { #if DEBUG print("\((file as NSString).lastPathComponent)[\(line)], \(method): \(message)") #endif }
新版本的 LLVM 编译器在遇到这个空方法时,甚至会直接将这个方法整个去掉,完全不去调用它,从而实现零成本
相关文章推荐
- MySQL Server 日志
- Apple Swift学习教程
- Awstats处理多apache日志
- 介绍 Fedora 上的 Swift
- 典型入侵日志分析
- MSSQL 2005 LOG备份webshell的方法
- MS SQL Server数据库清理错误日志的方法
- 对MySQL日志操作的一些基本命令总结
- 简介操作MySQL日志的一些方法
- MySQL的日志基础知识及基本操作学习教程
- MSSQL 2005/2008 日志压缩清理方法小结
- SQL Server误区30日谈 第19天 Truncate表的操作不会被记录到日志
- C#3.0使用EventLog类写Windows事件日志的方法
- 使用MySQL Slow Log来解决MySQL CPU占用高的问题
- MySQL中查询日志与慢查询日志的基本学习教程
- mysql binlog二进制日志详解
- C#实现线程安全的简易日志记录方法
- C#实现将程序运行信息写入日志的方法
- ORACLE DATAGUARD中手工处理日志v$archive_GAP的方法