iOS 앱의 원격 로그 뷰어(NSLogger)

iOS 앱의 원격 로그 획득 정보



iOS10부터 OS의 로그가 대량으로 나오게 되었고, 콘솔 로그에서 일본어가 깨지는 경우도 있고, 앱 로그를 개별적으로 원격 감시하고 싶었습니다.

그래서 NSLogger ( htps : // 기주 b. 코 m/f 핏 t/응 S㎉게 r ) 라는 원격 로그 앱을 이용해 보았습니다.
이 NSLogger는 원격 로그 전송 클라이언트 라이브러리와 수신 뷰어 앱으로 구성되어 있지만 사용하기 쉽고 유지 보수가 계속되는 것이 좋습니다.

이 앱은 뷰어와 클라이언트 라이브러리로 구성되어 있으며 뷰어는 게시 된 소스 코드에서 빌드 (Mac 개발자 라이센스) 또는 바이너리로 제공됩니다.

iOS 앱에 내장



앱에 내장하는 방법



github 사이트에 적힌대로,
  • cocoapods 또는 carthage로 프레임 워크를 프로젝트 파일에 포함
  • 로깅을위한 클래스를 만들고 앱에서 사용

  • 됩니다.
    앱측에서의 로그 출력용 클래스의 샘플을 아래에 기재합니다.
    LOGFILE은, 오프라인시의 로그 버퍼용 파일명. iOS 기기의 임시 디렉토리에 기록됩니다.
    SERVICE_NAME은 Bonjour의 서비스 이름입니다. NSLogger의 Preferences->Network 설정에서 설정할 값과 일치합니다.

    LogManager.swift
    import NSLogger
    
    class LogManager {
    
        static let LOGFILE_NAME = "logging_data"
        static let SERVICE_NAME = "test"
        static let DEBUG_LEVEL  = 0
    
        // 初期化
        static func start() {
    
            // インスタンス生成
            let logger = LoggerGetDefaultLogger()
    
            // オフラインロギングファイル設定、Bonjour設定
            let paths = NSTemporaryDirectory()
            let file = "\(paths)/\(LOGFILE_NAME)"
            LoggerSetBufferFile(logger, file as CFString!)
            LoggerSetOptions(logger, UInt32(
                                     kLoggerOption_BufferLogsUntilConnection |
                                     kLoggerOption_BrowseBonjour |
                                     kLoggerOption_BrowseOnlyLocalDomain))
            LoggerSetupBonjour(logger, nil, SERVICE_NAME as CFString!)
    
            // ロギングスタート
            LoggerStart(logger)
        }
    
        // ログ出力
        static func print(format: String!, args: CVarArg...) {
            let appID = Bundle.main.bundleIdentifier
            LogMessage_va(appID, Int32(DEBUG_LEVEL), format, getVaList(args))
        }
    }
    

    전화 방법
    먼저 LogManager.start()로 초기화
    이후는 아래 예와 같이 print 메소드로 로그 출력
  • LogManager.print(format:"일본어")
  • LogManager.print(format:"%@:%@", args:#function,"테스트")

  • Objective-C 샘플도 나열합니다.

    LogManager.h
    @interface LogManager : NSObject
    +(void)start;
    +(void)print:(NSString*)format, ...;
    @end
    

    LogManager.m
    #import "LogManager.h"
    #import <NSLogger/NSLogger.h>
    
    @implementation LogManager
    
    #define LOGFILE_NAME @"logging_data"
    #define SERVICE_NAME @"test"
    #define DEBUG_LEVEL 0
    
    // 初期化
    +(void)start
    {
        // インスタンス作成
        Logger *logger = LoggerGetDefaultLogger();
    
        // オフラインロギングファイル設定、Bonjour設定
        NSString *tmpDirPath = NSTemporaryDirectory();
        NSString *file = [NSString stringWithFormat:@"%@/%@",tmpDirPath,LOGFILE_NAME];
        LoggerSetBufferFile(logger,(__bridge CFStringRef)file);
        LoggerSetOptions(logger,kLoggerOption_BufferLogsUntilConnection |
                                kLoggerOption_BrowseBonjour |
                                kLoggerOption_BrowseOnlyLocalDomain);
        LoggerSetupBonjour(logger, nil, (__bridge CFStringRef)SERVICE_NAME);
    
        // ロギングスタート
        LoggerStart(logger);
    }
    
    // ログ出力
    +(void)print:(NSString*)format,...
    {
        NSString *appID = [[NSBundle mainBundle] bundleIdentifier];
        va_list args;
        va_start(args, format);
        NSString *message = [[NSString alloc]initWithFormat:format arguments:args];
        va_end(args);
        LogMessage_va(appID, DEBUG_LEVEL, message, nil);
    }
    @end
    

    전화 방법
    먼저 [LogManager start]로 초기화
    이후는 아래 예와 같이 print 메소드로 로그 출력
  • [LogManager print:@"한국어"];
  • [LogManager print:@"%s:%@",__FUNCTION__,@"테스트"];

  • 뷰어 준비



    사이트에는 macOS 용 뷰어와 iPad 용 뷰어 소스 코드가 있습니다. macOS 용 뷰어는 바이너리도 있습니다.
    다운로드하고 시작한 후 위에서 설명한대로 Preferences의 Bonjour Service Name을 설정합니다.
    로그 보내기 iOS 기기와 뷰어를 실행하는 Mac이 동일한 WiFi에 있으면 Bonjour는 로그를 뷰어로 보냅니다.



    마지막으로



    아직 조금밖에 사용하고 있지 않습니다만, 사용하기 쉬운 툴일까라고 생각합니다.
    로그에 대해서는 문자 뿐만이 아니라, 바이너리 데이터나 화상도 보낼 수 있다고 하는 것입니다.
    각 화면의 스크린샷을 로그로 보내는데도 사용할 수 있을 것 같네요.

    좋은 웹페이지 즐겨찾기