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

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.h和UALogger.m导入你的项目。
pod 'UALogger', '~> 0.3'
然后在prefix.pch文件中引入UALogger。
#import <UALogger.h>
使用
宏定义
UALogBasic就像NSLog一样工作,但额外包含了文件名和行号。
UALogBasic(@"Foobar");
UALogFull会记录调用对象(self),文件名,行号和方法名。
UALogFull(@"Foobar");
UALogPlain直接像NSLog那样输出,没有任何附加信息。
UALogPlain(@"Foobar");
UALog是UALogBasic的简写形式。
一个快速上手的方式是在整个项目中找到并替换所有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的功能。
如果你想改变日志的格式,可以在运行时定制UALogPlain,UALogBasic,UALogFull的格式:
[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参数的变体:
UASLogPlainUASLogBasicUASLogFullUASLog// 默认为 UASLogBasic
S表示严重性,作为这些函数的第一个参数。UALogger识别5种严重程度:
UALoggerSeverityDebug// 最低日志级别UALoggerSeverityInfoUALoggerSeverityWarnUALoggerSeverityErrorUALoggerSeverityFatal// 最高日志级别
要在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是如何提供更强大、更灵活的日志管理能力的。赶快把它纳入你的项目,让开发和维护变得更加轻松!
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00