首页
/ 推荐使用:UALogger——iOS与Mac的高效日志工具

推荐使用:UALogger——iOS与Mac的高效日志工具

2024-05-22 02:15:37作者:袁立春Spencer
UALogger
A powerful and flexible logging utility for Mac/iOS apps

UALogger Logo

UALogger是一个轻量级的日志记录工具,专为iOS和Mac应用设计。它允许您自定义日志格式,在运行时动态控制何时将日志输出到控制台,并能收集完整的应用程序最近控制台日志。它包括UALogger类以及便捷的宏定义。

为什么选择UALogger?

获取上下文信息

NSLog非常实用,但仍有提升空间。例如,你可能会在代码中看到这样的日志输出,结果是不具帮助性的通用错误消息:

NSLog(@"Error: %@", [error localizedDescription]);

UALogger则能助你一臂之力,只需基本的日志格式设置,就能将你的通用日志信息放入上下文环境中,使之成为强大的反馈工具:

UALog(@"Error: %@", [error localizedDescription]);

上面的代码将输出类似<UAViewController.m:27> Error: There was a problem loading resource.的信息,清晰明了。

提升生产环境性能

NSLog调用会消耗资源。每次写入都需要追加到操作系统文件,涉及定位、打开、追加、保存等同步操作。虽然单个NSLog不会明显影响性能,但大量使用时,就会有显著的性能损失。

不要担心,使用UALogger,即使在生产环境中,你也不必删掉这些日志。UALogger默认不在生产构建中向控制台输出日志,且能在运行时动态开启或关闭日志功能。

保护敏感信息

NSLog写出的系统控制台日志可以被任何应用读取,或者被了解设备的人获取。如果其中包含用户的邮件地址、密码或其他私密信息,这可能带来问题。而UALogger在生产环境中不会打印这些日志到系统控制台,确保了你和用户的隐私安全。

改善客户服务

UALogger让你能够获取应用的所有系统日志信息。以我们的旗舰应用Ambiance为例,我们利用这一特性来协助解决客户的疑难问题。当客户报告的问题难以复现时,我们会要求他们通过应用设置中的开关启用日志,然后发送日志给我们进行排查。

日志严重等级

UALogger支持日志严重等级,这样只有重要的日志会在生产环境中传递,有助于处理严重错误和关键信息。

安装

安装UALogger十分简单,可以使用CocoaPods。如果你喜欢手动添加,只需将UALogger.hUALogger.m导入你的项目。

pod 'UALogger', '~> 0.3'

然后在prefix.pch文件中引入UALogger

#import <UALogger.h>

使用

宏定义

UALogBasic就像NSLog一样工作,但额外包含了文件名和行号。

UALogBasic(@"Foobar");

UALogFull会记录调用对象(self),文件名,行号和方法名。

UALogFull(@"Foobar");

UALogPlain直接像NSLog那样输出,没有任何附加信息。

UALogPlain(@"Foobar");

UALogUALogBasic的简写形式。

一个快速上手的方式是在整个项目中找到并替换所有NSLog调用为UALog

UALog(@"This used to be an NSLog()");

自定义

默认情况下,UALog调用UALogBasic,但你可以根据需求修改。在prefix.pch文件中#import <UALogger.h>之后添加以下代码:

#import <UALogger.h>
#undef UALog;
#define UALog( s, ... ) UALogPlain( s, ##__VA_ARGS__);

或者

#import <UALogger.h>
#undef UALog;
#define UALog( s, ... ) UALogFull( s, ##__VA_ARGS__);

如果你设置预处理器宏UALOGGER_SWIZZLE_NSLOG,无需更改代码即可使用UALogger。

NSLog(@"This NSLog call is actually routing through UALogger.");

但是,只有在已导入UALogger.h的项目文件中,对NSLog的调用才会路由至UALogger。

UALogger 类方法

即使方便的宏定义很实用,你也可以直接调用类方法进行日志记录:

[UALogger log:@"I am logging now: %@", [NSDate date]];

不过这种方式不会附带额外信息,因为UALogger类本身无法获取调用文件名、行号等信息。建议使用宏定义来最大化UALogger的功能。

如果你想改变日志的格式,可以在运行时定制UALogPlainUALogBasicUALogFull的格式:

[UALogger setFormat:@"Foobar! %@" forVerbosity:UALoggerVerbosityPlain];
UALogPlain(@"Barfoo%@", @"d");

随后的指定级别日志输出都会使用这个格式。查看setupDefaultFormats方法了解更多默认格式和变量顺序信息。要重置格式,调用:

[UALogger resetDefaultLogFormats];

生产环境日志

默认情况下,UALogger会在调试环境下输出日志,而在生产环境中不输出。判断依据是DEBUG预处理器宏是否存在。规则如下:

  • 如果不是生产构建并且shouldLogInDebug为真
  • 是生产构建并且shouldLogInProduction为真
  • 用户偏好设置中的日志键值为真。

可以查询这些值并在运行时进行设置。

BOOL isProduction = [UALogger isProduction];
BOOL shouldLogInProduction = [UALogger shouldLogInProduction];
if (shouldLogInProduction)
    [UALogger setShouldLogInProduction:NO];
BOOL shouldLogInDebug = [UALogger shouldLogInDebug];
if (!shouldLogInDebug)
    [UALogger setShouldLogInDebug:YES];
NSString *userDefaultsKey = [UALogger userDefaultsKey];
if ([userDefaultsKey isEqualToString:UALogger_LoggingEnabled])
    [UALogger setUserDefaultsKey:@"CustomizedUserDefaultsKey"];

举例来说,如果你想在特定功能启用时进行日志记录,如带有beta标签的特色功能X:

BOOL featureXIsEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:@"featureXIsEnabled"];
[UALogger setUserDefaultsKey:@"featureXIsEnabled"];

设置logger使用相同的键意味着当该功能开启时,也会启动日志记录。

BOOL loggingEnabled = [UALogger loggingEnabled];

使用日志严重等级

UALogger还可以配置成使用日志严重等级。三个日志宏(UALogPlain, UALogBasic, 和 UALogFull)都有对应接收UALoggerSeverity参数的变体:

  • UASLogPlain
  • UASLogBasic
  • UASLogFull
  • UASLog // 默认为 UASLogBasic

S表示严重性,作为这些函数的第一个参数。UALogger识别5种严重程度:

  • UALoggerSeverityDebug // 最低日志级别
  • UALoggerSeverityInfo
  • UALoggerSeverityWarn
  • UALoggerSeverityError
  • UALoggerSeverityFatal // 最高日志级别

要在UALogger中使用严重等级,必须 设置最小严重性:

[UALogger setMinimumSeverity:UALoggerSeverityWarn];

默认情况下,严重程度设为UALoggerSeverityUnset,此时不用于确定是否记录日志。未设定时,使用[UALogger loggingEnabled]方法。一旦设置了最小严重性,只会根据严重性 来决定是否输出日志。

示例:

[UALogger setMinimumSeverity:UALoggerSeverityWarn];
UASLog(UALoggerSeverityDebug,     @" - Logged with severity => UALoggerSeverityDebug");
UASLog(UALoggerSeverityInfo,      @" - Logged with severity => UALoggerSeverityInfo");
UASLog(UALoggerSeverityWarn,      @" - Logged with severity => UALoggerSeverityWarn");
UASLog(UALoggerSeverityError,     @" - Logged with severity => UALoggerSeverityError");
UASLog(UALoggerSeverityFatal,     @" - Logged with severity => UALoggerSeverityFatal");
UASLog(UALoggerSeverityFatal,     @" - Only 3 of the above lines are logged because they meet or exceed the configured minimum severity.");

现在,你已经了解到UALogger是如何提供更强大、更灵活的日志管理能力的。赶快把它纳入你的项目,让开发和维护变得更加轻松!

UALogger
A powerful and flexible logging utility for Mac/iOS apps
热门项目推荐
相关项目推荐

项目优选

收起
CangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
669
0
RuoYi-Vue
🎉 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本
Java
136
18
openHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
10
4
redis-sdk
仓颉语言实现的Redis客户端SDK。已适配仓颉0.53.4 Beta版本。接口设计兼容jedis接口语义,支持RESP2和RESP3协议,支持发布订阅模式,支持哨兵模式和集群模式。
Cangjie
322
26
advanced-java
Advanced-Java是一个Java进阶教程,适合用于学习Java高级特性和编程技巧。特点:内容深入、实例丰富、适合进阶学习。
JavaScript
75.83 K
19.04 K
qwerty-learner
为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workers
TSX
15.56 K
1.44 K
Jpom
🚀简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件
Java
1.41 K
292
Yi-Coder
Yi Coder 编程模型,小而强大的编程助手
HTML
30
5
easy-es
Elasticsearch 国内Top1 elasticsearch搜索引擎框架es ORM框架,索引全自动智能托管,如丝般顺滑,与Mybatis-plus一致的API,屏蔽语言差异,开发者只需要会MySQL语法即可完成对Es的相关操作,零额外学习成本.底层采用RestHighLevelClient,兼具低码,易用,易拓展等特性,支持es独有的高亮,权重,分词,Geo,嵌套,父子类型等功能...
Java
1.42 K
231
taro
开放式跨端跨框架解决方案,支持使用 React/Vue/Nerv 等框架来开发微信/京东/百度/支付宝/字节跳动/ QQ 小程序/H5/React Native 等应用。 https://taro.zone/
TypeScript
35.34 K
4.77 K