XcodeLogger 1.2.2

XcodeLogger 1.2.2

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布上次发布2015年10月

Razvan Tanase维护。




Xcode Logger

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。

文档

Xcode Logger - Dracula Theme (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颜色(主题师,你们在这里受追捧!)。

几乎每种日志类型和级别都可以按以下方式自定义

  • 运行方案(除XLogDDLog类型)。
  • 日志信息标题(除_NH)。
  • 所有日志类型和级别的NEW日志状态描述(除_NH),可作为自定义或默认标题的参数使用。
  • 输出文本颜色(覆盖已加载主题中的值)。
  • 输出背景颜色(覆盖已加载主题中的值)。
  • 标题与输出之间或输出与下一日志语句之间的换行符数量(空格数)。
  • 信息标题中timestamp参数的时间戳格式。

> 返回目录

如何安装

手册

克隆或下载存储库,并将Xcode Logger文件夹及其内容添加到项目中。

设置

  1. 可选:如果您想使用彩色日志并尚未安装Xcode Colors插件,则需要安装它

  2. 可选:如果您想使用方案相关的日志记录器,则需要根据您的需求创建方案并将它们与相应的日志记录器类型链接(请参阅“如何使用”下的方案链接)。有关Xcode方案的官方信息可以在这里找到。

  3. 第2点所需:为了让Xcode Logger确定当前的方案,Xcode需要在构建项目时能够在项目的Info.plist文件中为key添加一个值,所以您需要进行以下两项操作: 第一,在Info.plist文件中为string值创建键条目,同时保留字段为空,如下所示(点击查看示例):Info.plist Key接下来,您需要将以下脚本来添加到每个方案下的构建 > 预动作中。请务必选择一个用于构建的目标!提示:在创建任何第二个自定义方案之前这样做,并只需复制方案。

#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"       

Add the script to your schema

> 返回目录

如何使用

默认日志记录器

要开始使用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_REPLACEMENTXLOGGER_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_TYPEXLOGGER_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;

> 返回目录

色彩主题

Xcode Logger - Dusk Theme (基于 Xcode 的黄昏主题)

Xcode Logger - Default Dark Theme (基于 Xcode 的午夜主题的暗色主题)

Xcode Logger - Solarize Dark Theme (Jason Brennan 的 Solarize Dark 主题)

Xcode Logger - Solarize Light Theme (Jason Brennan 的 Solarize Light 主题)

Xcode Logger - Default Light Theme (基于 Xcode 的默认主题的浅色主题)

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 Performance: Synchronous Tests Xcode Logger Performance: Asynchronous Tests

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

  • 大量的重构!
  • 日志筛选器
  • 颜色主题
  • UIColor / NSColor支持
  • 日志状态描述定制选项

> 返回目录


作者

此库由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软件)。