推荐使用: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
参数的变体:
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是如何提供更强大、更灵活的日志管理能力的。赶快把它纳入你的项目,让开发和维护变得更加轻松!
- DDeepSeek-V3.1-BaseDeepSeek-V3.1 是一款支持思考模式与非思考模式的混合模型Python00
- QQwen-Image-Edit基于200亿参数Qwen-Image构建,Qwen-Image-Edit实现精准文本渲染与图像编辑,融合语义与外观控制能力Jinja00
GitCode-文心大模型-智源研究院AI应用开发大赛
GitCode&文心大模型&智源研究院强强联合,发起的AI应用开发大赛;总奖池8W,单人最高可得价值3W奖励。快来参加吧~052CommonUtilLibrary
快速开发工具类收集,史上最全的开发工具类,欢迎Follow、Fork、StarJava04GitCode百大开源项目
GitCode百大计划旨在表彰GitCode平台上积极推动项目社区化,拥有广泛影响力的G-Star项目,入选项目不仅代表了GitCode开源生态的蓬勃发展,也反映了当下开源行业的发展趋势。06GOT-OCR-2.0-hf
阶跃星辰StepFun推出的GOT-OCR-2.0-hf是一款强大的多语言OCR开源模型,支持从普通文档到复杂场景的文字识别。它能精准处理表格、图表、数学公式、几何图形甚至乐谱等特殊内容,输出结果可通过第三方工具渲染成多种格式。模型支持1024×1024高分辨率输入,具备多页批量处理、动态分块识别和交互式区域选择等创新功能,用户可通过坐标或颜色指定识别区域。基于Apache 2.0协议开源,提供Hugging Face演示和完整代码,适用于学术研究到工业应用的广泛场景,为OCR领域带来突破性解决方案。00openHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!C0315- WWan2.2-S2V-14B【Wan2.2 全新发布|更强画质,更快生成】新一代视频生成模型 Wan2.2,创新采用MoE架构,实现电影级美学与复杂运动控制,支持720P高清文本/图像生成视频,消费级显卡即可流畅运行,性能达业界领先水平Python00
- GGLM-4.5-AirGLM-4.5 系列模型是专为智能体设计的基础模型。GLM-4.5拥有 3550 亿总参数量,其中 320 亿活跃参数;GLM-4.5-Air采用更紧凑的设计,拥有 1060 亿总参数量,其中 120 亿活跃参数。GLM-4.5模型统一了推理、编码和智能体能力,以满足智能体应用的复杂需求Jinja00
Yi-Coder
Yi Coder 编程模型,小而强大的编程助手HTML013
热门内容推荐
最新内容推荐
项目优选









