Xcode Logger 是一个 快速(比 NSLog 快 6 倍,比 CocoaLumberjack 快 4 倍)、简单易用、灵活的库,它提供了依赖方案、可定制、可筛选和彩色的 NSLog 替代方案。
*基于在主线程上运行的同步串行测试,比较 XLog_NH 与 NSLog 与 DDLogVerbose,平均运行时间在第一次运行后 5 次测试中,每次测试有 5000 次迭代,在 MacBook Pro Retina 上运行。启用颜色的 Xcode Logger,禁用颜色的 CocoaLumberjack(带有 ASL 文件记录)。
Xcode Logger 已在 iOS 7,8 以及 OSX 上进行测试。它需要 ARC。
(Dracula 颜色主题,由 Zeno Rocha 提供)
Xcode Logger 提供多种依赖于和独立于方案的日志记录器,具有多个日志级别。它默认作为即插即用的形式提供,包含以下类型的日志记录器
DLog()
- 调试DVLog()
- 开发DDLog()
- 调试和开发(适用于两种方案的共享日志类型)OLog()
- 在线服务XLog()
- NSLog 类型(与 NSLog 的行为相同:不依赖于方案)每种日志类型都有以下 日志级别
XLog()
)_NH
(例如:XLog_NH()
)_INFO
(例如:XLog_INFO()
)_IMPORTANT
_WARNING
_ERROR
极其易于使用,具有 可筛选的日志级别。
颜色主题,支持使用UIColor、NSColor和RGB颜色(主题师,你们在这里受追捧!)。
几乎每种日志类型和级别都可以按以下方式自定义
XLog
和DDLog
类型)。_NH
)。NEW
日志状态描述(除_NH
),可作为自定义或默认标题的参数使用。timestamp
参数的时间戳格式。克隆或下载存储库,并将Xcode Logger文件夹及其内容添加到项目中。
可选:
如果您想使用彩色日志并尚未安装Xcode Colors插件,则需要安装它。
可选:
如果您想使用方案相关的日志记录器,则需要根据您的需求创建方案并将它们与相应的日志记录器类型链接(请参阅“如何使用”下的方案链接
)。有关Xcode方案的官方信息可以在这里找到。
第2点所需:
为了让Xcode Logger确定当前的方案,Xcode需要在构建项目时能够在项目的Info.plist
文件中为key
添加一个值,所以您需要进行以下两项操作: 第一
,在Info.plist
文件中为string
值创建键条目,同时保留值
字段为空,如下所示(点击查看示例):接下来,您需要将以下脚本来添加到每个方案下的
构建
> 预动作
中。请务必选择一个用于构建的目标!提示:
在创建任何第二个自定义方案之前这样做,并只需复制方案。
#This script will provide that value at runtime.
#You can change "XLRunningScheme" with whatever key name you wish as long as it matches the one from Info.plist.
/usr/libexec/PlistBuddy -c "Set :XLRunningScheme \"$SCHEME_NAME\"" "$PROJECT_DIR/$INFOPLIST_FILE"
默认日志记录器
要开始使用Xcode Logger,您只需要在类中#import "XcodeLogger.h"
,并使用所有级别的XLog
日志记录器类型替换NSLog
。
方案链接
要开始使用方案依赖的日志记录器,您需要执行以下操作(假设您已遵循“设置”部分中描述的可选但仍必须执行的步骤)
通过调用告诉Xcode Logger在您的Info.plist
和脚本中定义的键的名称
[[XcodeLogger sharedManager] setInfoPlistKeyNameForRunningSchemes:@"XLRunningScheme"];
将运行方案名与日志记录器类型链接
//Example for setting a scheme for DLog type logger
[[XcodeLogger sharedManager] setBuildSchemeName:@"XL Debug"
forXLogType:XLOGGER_TYPE_DEBUG];
XLOGGER_TYPES:
XLOGGER_TYPE_NSLOG_REPLACEMENT, //XLog
XLOGGER_TYPE_DEBUG, //DLog
XLOGGER_TYPE_DEVELOPMENT, //DVLog
XLOGGER_TYPE_DEBUG_DEVELOPMENT, //DDLog
XLOGGER_TYPE_ONLINE_SERVICES //OLog
就这样!
注意:由于其预期用途,不能将方案链接到
XLOGGER_TYPE_NSLOG_REPLACEMENT
或XLOGGER_TYPE_DEBUG_DEVELOPMENT
。这样做将引发异常。
日志过滤器
您可以为每个类(实现文件)或全局地对单个或多个日志级别进行筛选。
您有两种选择:或者使用一个方法并手动设置实现文件名称,或者您可以使用一个方便的宏来大大简化整个过程。
//The following examples will output only warnings and errors
//Example Option 1
//You can call this almost anywhere (before calling the logs) since you manually set the file name. If you pass nil for file name, the effect will become global.
[[XcodeLogger sharedManager] filterXLogLevels:@[XL_LEVEL_WARNING,XL_LEVEL_ERROR]
forFileName:@"AppDelegate.m"];
//Example Option 2 (LOCAL FILTERS)
//You must call this in the implementation file where you need filters
XL_FILTER_LEVELS(XL_LEVEL_WARNING,XL_LEVEL_ERROR);
//Example Option 3 (GLOBAL FILTERS)
//You should call this as early as possible in your app's lifecycle
XL_FILTER_GLOBAL_LEVELS(XL_LEVEL_WARNING,XL_LEVEL_ERROR);
//Convenience wrappers for XLOGGER_LEVEL_### constants
XL_LEVEL_SIMPLE
XL_LEVEL_SIMPLE_NO_HEADER
XL_LEVEL_INFORMATION
XL_LEVEL_IMPORTANT
XL_LEVEL_WARNING
XL_LEVEL_ERROR
标题格式选项
您可以通过这种方式更改默认设置并自定义任何 XLOGGER_TYPE
和 XLOGGER_LEVEL
的信息头部
//NEW: Example for changing the default Log Status Description and Color
[[XcodeLogger sharedManager] setLogHeaderDescription:@"DEVLOG_INFO"
forLogType:XLOGGER_TYPE_DEVELOPMENT
level:XLOGGER_LEVEL_INFORMATION
color:[XLColor redColor];
//Example for changing the informations header for DVLog_INFO()
//This will set the header to show the log description and a timestamp followed by the line number
[[XcodeLogger sharedManager] setHeaderForXLogType:XLOGGER_TYPE_DEVELOPMENT
level:XLOGGER_LEVEL_INFORMATION
format:@"{%@}->[%@]::[#%@]"
arguments:@[XL_ARG_LOG_DESCRIPTION,XL_ARG_TIMESTAMP,XL_ARG_LINE_NUMBER]];
注:您可以使用
XLOGGER_ALL_LEVELS
枚举为XLOGGER_TYPE
的所有级别设置相同的标题格式。
// XLOGGER_LEVELS:
XLOGGER_LEVEL_SIMPLE,
XLOGGER_LEVEL_SIMPLE_NO_HEADER, //_NH
XLOGGER_LEVEL_INFORMATION, //_INFO
XLOGGER_LEVEL_IMPORTANT, //_IMPORTANT
XLOGGER_LEVEL_WARNING, //_WARNING
XLOGGER_LEVEL_ERROR, //_ERROR
XLOGGER_ALL_LEVELS
// XL_ARG macros:
XL_ARG_LOG_DESCRIPTION
XL_ARG_TIMESTAMP
XL_ARG_CALLEE_ADDRESS
XL_ARG_CALLEE_METHOD
XL_ARG_LINE_NUMBER
XL_ARG_FILE_NAME
注:默认标题包含以下信息(按顺序)
[Logger_Type_Level](Timestamp)=> [>Callee_Memory_Address<]:Callee_File_Name:[#Line_Number]:[>Callee_Method<]
如果您想,可以通过调用来添加或删除标题和信息输出之间的新行(空格)
- (void)setNumberOfNewLinesAfterHeader:(NSUInteger)paramNumberOfLines
forXLogType:(XLOGGER_TYPE)paramXLogType
level:(XLOGGER_LEVEL)paramXLogLevel;
或者,通过调用添加或删除输出和下一个日志语句之间的新行(空格)
- (void)setNumberOfNewLinesAfterOutput:(NSUInteger)paramNumberOfLines
forXLogType:(XLOGGER_TYPE)paramXLogType
level:(XLOGGER_LEVEL)paramXLogLevel;
您还可以通过使用有效的 NSDateFormatter
格式字符串并调用来更改 timestamp
格式
//The default is @"HH:mm:ss"
- (void)setTimestampFormat:(NSString *)paramTimestampFormat;
色彩主题
(Jason Brennan 的 Solarize Dark 主题)
(Jason Brennan 的 Solarize Light 主题)
Xcode Logger 根据 log 的类型和级别使用色彩主题。它内置 六种默认主题
,您可以非常容易地创建自己的主题。
不同的色彩主题可以用于不同的类。
您可以通过调用来检查可用的主题
- (void)printAvailableColorThemes;
您可以通过调用来加载主题
//paramColorThemeName is case-insensitive
- (void)loadColorThemeWithName:(NSString *)paramColorThemeName;
为了方便,XcodeLogger.h
中定义了两个常数来对应默认主题
// THE DEFAULT COLOR THEMES FOR XCODE LOGGER
// YOU'RE INVITED TO ADD(CREATE) MORE HERE AND SEND A PULL REQUEST (check -[printColorThemeCreationInstructions])
XLCT_DEFAULT_LIGHT_THEME //based on Xcode's Default Theme
XLCT_DEFAULT_DUSK_THEME //based on Xcode's Dusk Theme
XLCT_DEFAULT_DARK_THEME //based on Xcode's Midnight Theme
XLCT_SOLARIZE_LIGHT_THEME //Based on Solarize Light Theme by Jason Brennan https://github.com/jbrennan/xcode4themes
XLCT_SOLARIZE_DARK_THEME //Based on Solarize Dark Theme by Jason Brennan https://github.com/jbrennan/xcode4themes
XLCT_DRACULA_THEME //Based on Dracula Theme by Zeno Rocha https://github.com/zenorocha/dracula-theme
注:Xcode Logger 默认加载
DEFAULT_LIGHT_THEME
,所以如果您不感兴趣改变主题,就不需要调用loadColorThemeWithName:
。
所有Xcode Logger的主题都在XLColorThemes.plist
文件中定义,你可以在这里找到默认主题旁边的两个示例主题
。
你所做的只是复制这些示例,按照相应的名称重命名它们,并对其进行修改,同时保留每个字典
的keys
,除了根字典的key
,即主题的名称。
你可以使用空格分隔的RGB值或使用,./-*+
,或者你可以使用类似的UIColor/NSColor
选择器,如blackColor
。
当你向XLColorThemes.plist
添加新的主题时,如果可以为它的名称添加一个常数,就像默认的主题一样(请使用XLCT_
前缀)那会很酷。
你可以通过调用来获取详细的主题创建说明
。
[[XcodeLogger sharedManager] printColorThemeCreationInstructions];
颜色格式化选项
你可以独立于当前加载的颜色主题(如果是在更改颜色之前加载的)启用或禁用对颜色日志的支持,并分别更改输出(不包括标题)的文本颜色和背景颜色。
默认情况下,颜色是启用的,但你可以通过调用来更改此设置。
- (void)setColorLogsEnabled:(BOOL)paramEnableColors;
你可以通过调用设置输出的文本颜色。
//XLColor is a convenience macro for cross platform
//compatibility between iOS (UIColor) and OSX (NSColor)
- (void)setTextColor:(XLColor *)paramTextColor
forXLogType:(XLOGGER_TYPE)paramLogType
level:(XLOGGER_LEVEL)paramLogLevel;
- (void)setTextColorForXLogType:(XLOGGER_TYPE)paramXLogType
level:(XLOGGER_LEVEL)paramXLogLevel
withRed:(NSUInteger)red
Green:(NSUInteger)green
Blue:(NSUInteger)blue;
你可以通过调用设置输出的背景颜色。
//XLColor is a convenience macro for cross platform
//compatibility between iOS (UIColor) and OSX (NSColor)
- (void)setBackgroundColor:(XLColor *)paramBackgroundColor
forXLogType:(XLOGGER_TYPE)paramLogType
level:(XLOGGER_LEVEL)paramLogLevel
- (void)setBackgroundColorForXLogType:(XLOGGER_TYPE)paramXLogType
level:(XLOGGER_LEVEL)paramXLogLevel
withRed:(NSUInteger)red
Green:(NSUInteger)green
Blue:(NSUInteger)blue;
Xcode Logger
提供了一个名为XLPerformanceTests
的类。你可以使用其公开方法来测试Xcode Logger
。
此存储库包含iOS和OSX
的代码示例。
这些示例非常棒,可以查看和测试一些Xcode Logger
的用法。
您可以通过克隆或下载存储库后在主文件夹中找到它们。
版本 1.2.1
XL_FILTER_GLOBAL_LEVELS
宏添加了全局过滤选项。XLogObject
类增加了一些微小的补充(目前未使用的方法dealloc
)版本 1.2.0
_HIGHLIGHT
日志级别重命名为_IMPORTANT
setLogHeaderDescription:forLogType:level:
setLogHeaderDescription:forLogType:level:color:
版本 1.1.1
此库由Razvan Tanase创建并开源。
您也可以在Twitter上找到我 @razvan_tanase。
我非常感谢任何反馈,无论是积极还是建设性的,这样我可以改善这个项目。
太阳能化主题 & 深色主题,基于Jason Brennan的工作 https://github.com/jbrennan/xcode4themes。
Dracula 主题,基于Zeno Rocha的工作 https://github.com/zenorocha/dracula-theme。
热烈欢迎您为此项目贡献力量! 当您希望主仓库中增加某些修改时,请提交Pull Request。
MIT许可证(MIT)版权所有©2015 Razvan Tanase(Codebringers软件)。