NBULog 2.5.0

NBULog 2.5.0

测试已测试
语言语言 Obj-CObjective C
许可协议 Apache-2.0
发布最新发布2020年6月

Ernesto RiveraErnesto Rivera 维护。




NBULog 2.5.0

  • CyberAgent Inc. 和 Ernesto Rivera

NBULog

Platform: iOS/OSX Version: 2.5.0 License: Apache 2.0 Dependency Status Build Status

基于 CocoaLumberjack 的日志框架。增加了动态日志级别、模块支持,并简化了使用。

曾是 NBUCore 的一部分。

演示

仓库中包括 iOS 和 OS X 演示项目。

特性

动态日志级别

使用 ddLogLevel 变量设置应用日志级别而不是静态设置。与支持 NBULog 的第三方库也能兼容。

[NBULog setAppLogLevel:DDLogLevelInfo];
[NBULog setKitLogLevel:DDLogLevelWarning]; // When using NBUKit

模块

默认情况下,所有源都指向 APP_MODULE_DEFAULT,但你可以在你的 prefix.pch 文件中定义自己的模块。

// Custom log modules
#define APP_MODULE_NETWORK  1 // APP_MODULE_DEFAULT = 0
#define APP_MODULE_OTHER    2

然后,只需为属于你的自定义模块之一的文件重新定义 LOG_MODULE

#import "MockNetworkModule.h"

// Define log module for this file
#undef  LOG_MODULE
#define LOG_MODULE APP_MODULE_NETWORK

此外,你也可以为不属于你的文件的模块记录信息。

// Send an extra message for another module
NBULogInfoWithModule(APP_MODULE_OTHER, @"Log message from a APP_MODULE_OTHER");

最后,您还可以修改各个模块的日志级别。

// Only log messages from the custom APP_MODULE_NETWORK
[NBULog setAppLogLevel:DDLogLevelOff];
[NBULog setAppLogLevel:DDLogLevelInfo
             forModule:APP_MODULE_NETWORK];

[NBULog setKitLogLevel:DDLogLevelWarning
             forModule:NBUKIT_MODULE_ADDITIONS]; // When using NBUKit

Xcode颜色

XcodeColors

安装后,XcodeColors 会自动启用 Xcode 控制台的颜色。

设备日志控制台和GUI调整级别

LumberjackConsole 1 LumberjackConsole 2

LumberjackConsole 存在时,您可以从UI中添加设备仪表板日志记录器并调整日志级别。

#ifndef MY_PRODUCTION_MACRO
    // Register custom modules before adding the dashboard
    [NBULog registerAppContextWithModulesAndNames:@{@(APP_MODULE_NETWORK)   : @"Network",
                                                    @(APP_MODULE_OTHER)     : @"Other"}];
    
    // Add dashboard only for testing builds
    [NBULog addDashboardLogger];
#endif

安装

pod 'NBULog' 添加到你的 CocoaPods' Podfile

platform :ios, '8.0'
use_frameworks!

pod 'NBULog'

# Optional on-device console
pod 'NBULog/Console'

文档

http://cocoadocs.org/docsets/NBULog/

在第三方库中的使用

当可用时,您可以在库中使用NBULog,无需将其作为需求。

1. 条件性使用NBULog

...否则回退到CocoaLumberjack或NSLog。

例如,来自NBUKitNBUKitPrivate.h

//  NBUKitPrivate.h

// ...

// a) Use NBULog for logging when available
#if __has_include("NBULog.h")

#import "NBULog+NBUKit.h"

#undef  LOG_CONTEXT
#define LOG_CONTEXT NBUKIT_LOG_CONTEXT

#undef  LOG_MODULE
#define LOG_MODULE  NBUKIT_MODULE_DEFAULT

#undef  LOG_LEVEL
#define LOG_LEVEL   [NBULog kitLogLevel]

// b) Else try CocoaLumberjack
#elif __has_include("DDLog.h")

#ifdef DEBUG
    #define NBUKitLogLevel DDLogLevelVerbose
#else
    #define NBUKitLogLevel DDLogLevelWarning
#endif

#define LOG_LEVEL_DEF   NBUKitLogLevel
#import <CocoaLumberjack/DDLog.h>

#define NBULogError(frmt, ...)      DDLogError(frmt, ##__VA_ARGS__)
#define NBULogWarn(frmt, ...)       DDLogWarn(frmt, ##__VA_ARGS__)
#define NBULogInfo(frmt, ...)       DDLogInfo(frmt, ##__VA_ARGS__)
#define NBULogDebug(frmt, ...)      DDLogDebug(frmt, ##__VA_ARGS__)
#define NBULogVerbose(frmt, ...)    DDLogVerbose(frmt, ##__VA_ARGS__)
#define NBULogTrace()               NBULogDebug(@"%@", THIS_METHOD)

// c) Else fallback to NSLog
#else

#ifdef DEBUG
    #define LOG_LEVEL 3
#else
    #define LOG_LEVEL 2
#endif

#define THIS_METHOD                 NSStringFromSelector(_cmd)
#define NBULogError(frmt, ...)      do{ if(LOG_LEVEL >= 1) NSLog((frmt), ##__VA_ARGS__); } while(0)
#define NBULogWarn(frmt, ...)       do{ if(LOG_LEVEL >= 2) NSLog((frmt), ##__VA_ARGS__); } while(0)
#define NBULogInfo(frmt, ...)       do{ if(LOG_LEVEL >= 3) NSLog((frmt), ##__VA_ARGS__); } while(0)
#define NBULogDebug(frmt, ...)      do{ if(LOG_LEVEL >= 4) NSLog((frmt), ##__VA_ARGS__); } while(0)
#define NBULogVerbose(frmt, ...)    do{ if(LOG_LEVEL >= 5) NSLog((frmt), ##__VA_ARGS__); } while(0)
#define NBULogTrace()               NBULogDebug(@"%@", THIS_METHOD)

#endif

2. 注册日志上下文和可选模块

//  NBULog+NBUKit.h

#if __has_include("NBULog.h")

#import <NBULog/NBULog.h>

// NBUKit log context
#define NBUKIT_LOG_CONTEXT          110

// NBUKit modules
#define NBUKIT_MODULE_DEFAULT       0

@interface NBULog (NBUKit)

// Allow to set and read the current levels.
+ (DDLogLevel)kitLogLevel;
+ (void)setKitLogLevel:(DDLogLevel)logLevel;

@end

#endif

然后注册您的上下文和模块,如果希望它们出现在LumberjackConsole中。

//  NBULog+NBUKit.m

#if __has_include("NBULog.h")

#import "NBULog+NBUKit.h"
#import <NBULog/NBULogContextDescription.h>

@implementation NBULog (NBUKit)

+ (void)load
{
    // Register the NBUKit log context
    [NBULog registerContextDescription:[NBULogContextDescription descriptionWithName:@"NBUKit"
                                                                             context:NBUKIT_LOG_CONTEXT
                                                                     modulesAndNames:nil
                                                                   contextLevelBlock:^{ return [NBULog kitLogLevel]; }
                                                                setContextLevelBlock:^(int level) { [NBULog setKitLogLevel:level]; }
                                                          contextLevelForModuleBlock:NULL
                                                       setContextLevelForModuleBlock:NULL]];
}

+ (DDLogLevel)kitLogLevel
{
    // ...
}

+ (void)setKitLogLevel:(DDLogLevel)logLevel
{
    // ...
}

@end

#endif

许可证

Copyright (c) 2012-2017 CyberAgent Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. 
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.