1. 程式人生 > >iOS搭建Log日誌系統

iOS搭建Log日誌系統

CocoaLumberjack

CocoaLumberjack是適用於Mac和iOS的快速簡單但功能強大且靈活的日誌框架。
本文主要介紹基於CocoaLumberjack搭建iOS專案Log日誌系統。

一、CocoaLumberjack架構

CocoaLumberjack架構

二、簡單使用

1、使用CocoaPods安裝CocoaLumberjack

platform :ios, '7.0'
pod 'CocoaLumberjack'           # Log日誌

2、全域性定義DDLog日誌級別,才可以編譯通過

  • DDLogLevelOff 關閉Log
  • DDLogLevelError 列印Error級別Log
  • DDLogLevelWarning 列印Error、Warning級別Log
  • DDLogLevelInfo 列印Error、Warn、Info級別Log
  • DDLogLevelDebug 列印Error、Warn、Info、Debug級別Log
  • DDLogLevelVerbose 列印Error、Warn、Info、Debug、Verbose級別Log
#ifdef DEBUG
  static const int ddLogLevel = DDLogLevelVerbose;
#else
  static const int ddLogLevel = DDLogLevelWarning;
#endif

3、初始化DDLog配置

  • DDASLLogger 輸出出到Console.app
  • DDTTYLogger 輸出到Xcode控制檯
  • DDLogFileManager 輸出到檔案
  • DDAbstractDatabaseLogger 輸出到DB
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    [DDLog addLogger:[DDTTYLogger sharedInstance]];             // TTY = Xcode console
    [DDLog addLogger:[DDASLLogger sharedInstance]];             // ASL = Apple System Logs
    DDFileLogger *fileLogger = [[DDFileLogger alloc] init];     // File Logger
    fileLogger.rollingFrequency = 60 * 60 * 24;                 // 重新整理頻率為24小時
    fileLogger.logFileManager.maximumNumberOfLogFiles = 7;      // 最大檔案數量為7個
    [DDLog addLogger:fileLogger];
return YES;
}

4、簡單使用不同Log等級

DDLogVerbose(@"Verbose");       // 詳細日誌
DDLogDebug(@"Debug");           // 除錯日誌
DDLogInfo(@"Info");             // 資訊日誌
DDLogWarn(@"Warn");             // 警告日誌
DDLogError(@"Error");           // 錯誤日誌

三、搭建Log日誌系統

實現需求:

1、實現不同Log日誌等級。
2、實現定時任務上傳Log日誌到伺服器。

1、建立MagicLogManager類,管理Log日誌系統

通過MagicLogManager來配置日誌資訊、獲取日誌路徑、獲取日誌內容。
所有Log日誌預設儲存在Library/Caches/Logs/目錄下,檔名為bundleid+空格+日期.log。

MagicLogManager.h檔案

#import <Foundation/Foundation.h>
#import <CocoaLumberjack/CocoaLumberjack.h>
//開源依賴
#if DEBUG
static const DDLogLevel ddLogLevel = DDLogLevelVerbose;
#else
static const DDLogLevel ddLogLevel = DDLogLevelWarning;
#endif

@interface MagicLogManager : NSObject
@property(nonatomic, strong)DDFileLogger *fileLogger;
+ (MagicLogManager *)shareManager;
- (void)start;                              // 配置日誌資訊
- (NSArray *)getAllLogFilePath;             // 獲取日誌路徑
- (NSArray *)getAllLogFileContent;          // 獲取日誌內容
@end

MagicLogManager.m檔案

#import "MagicLogManager.h"
#import "MagicLogFormatter.h"

@implementation MagicLogManager
+ (MagicLogManager *)shareManager{    
    static MagicLogManager *manager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        manager = [[MagicLogManager alloc] init];
        manager.fileLogger = [[DDFileLogger alloc] init];
        manager.fileLogger.rollingFrequency = 60 * 60 * 24;                 // 重新整理頻率為24小時
        manager.fileLogger.logFileManager.maximumNumberOfLogFiles = 7;      // 儲存一週的日誌,即7天
        manager.fileLogger.maximumFileSize = 1024 * 1024 * 2;               // 最大檔案大小

    });
    return manager;
}
/**
 配置日誌資訊
 */
- (void)start{
    // 1.自定義Log格式
    MagicLogFormatter *logFormatter = [[MagicLogFormatter alloc] init];
    // 2.DDASLLogger,日誌語句傳送到蘋果檔案系統、日誌狀態傳送到Console.app
    [[DDASLLogger sharedInstance] setLogFormatter:logFormatter];
    [DDLog addLogger:[DDASLLogger sharedInstance]];
    // 3.DDFileLogger,日誌語句寫入到檔案中(預設路徑:Library/Caches/Logs/目錄下,檔名為bundleid+空格+日期.log)
    DDFileLogger *fileLogger = [MagicLogManager shareManager].fileLogger;
    [fileLogger setLogFormatter:logFormatter];
    [DDLog addLogger:fileLogger withLevel:DDLogLevelError];        // 錯誤日誌,寫到檔案中
    // 4.DDTTYLogger,日誌語句傳送到Xcode
    [[DDTTYLogger sharedInstance] setLogFormatter:logFormatter];
    [[DDTTYLogger sharedInstance] setColorsEnabled:YES];           // 啟用顏色區分
    [[DDTTYLogger sharedInstance] setForegroundColor:DDMakeColor(255, 0, 0) backgroundColor:nil forFlag:DDLogFlagError];
    [[DDTTYLogger sharedInstance] setForegroundColor:DDMakeColor(105, 200, 80) backgroundColor:nil forFlag:DDLogFlagInfo];
    [[DDTTYLogger sharedInstance] setForegroundColor:DDMakeColor(100, 100, 200) backgroundColor:nil forFlag:DDLogFlagDebug];
    [DDLog addLogger:[DDTTYLogger sharedInstance]];
}
/**
 獲取日誌路徑(檔名bundleid+空格+日期)
 */
- (NSArray *)getAllLogFilePath{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *cachesPath = [paths objectAtIndex:0];
    NSString *logPath = [cachesPath stringByAppendingPathComponent:@"Logs"];
    NSFileManager *fileManger = [NSFileManager defaultManager];
    NSError *error = nil;
    NSArray *fileArray = [fileManger contentsOfDirectoryAtPath:logPath error:&error];
    NSMutableArray *result = [NSMutableArray array];
    [fileArray enumerateObjectsUsingBlock:^(NSString *filePath, NSUInteger idx, BOOL * _Nonnull stop) {
        if([filePath hasPrefix:[NSBundle mainBundle].bundleIdentifier]){
            NSString *logFilePath = [logPath stringByAppendingPathComponent:filePath];
            [result addObject:logFilePath];
        }
    }];
    return result;
}
/**
 獲取日誌內容
 */
- (NSArray *)getAllLogFileContent{
    NSMutableArray *result = [NSMutableArray array];
    NSArray *logfilePaths = [self getAllLogFilePath];
    [logfilePaths enumerateObjectsUsingBlock:^(NSString *filePath, NSUInteger idx, BOOL * _Nonnull stop) {
        NSData *data = [NSData dataWithContentsOfFile:filePath];
        NSString *content = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        [result addObject:content];
    }];
    return result;
}

2、建立MagicLogFormatter類,自定義Log日誌格式

通過MagicLogFormatter自定義日誌格式,繼承DDAbstractLogger,遵循DDLogFormatter協議,重寫formatLogMessage方法,返回最終Log訊息字串。

MagicLogFormatter.h檔案

#import <Foundation/Foundation.h>
#import "DDLog.h"
@interface MagicLogFormatter : DDAbstractLogger<DDLogFormatter>
@end

MagicLogFormatter.m檔案

#import "MagicLogFormatter.h"
@implementation MagicLogFormatter
- (NSString *)formatLogMessage:(DDLogMessage *)logMessage{
    NSString *loglevel = nil;
    switch (logMessage.flag){
        case LOG_FLAG_ERROR:
            loglevel = @"[ERROR]--->";
            break;
        case LOG_FLAG_WARN:
            loglevel = @"[WARN]--->";
            break;
        case LOG_FLAG_INFO:
            loglevel = @"[INFO]--->";
            break;
        case LOG_FLAG_DEBUG:
            loglevel = @"[DEBUG]--->";
            break;
        case LOG_FLAG_VERBOSE:
            loglevel = @"[VBOSE]--->";
            break;
        default:
            break;
    }
    NSString *resultString = [NSString stringWithFormat:@"%@ %@___line[%ld]__%@", loglevel, logMessage->_function, logMessage->_line, logMessage->_message];
    return resultString;
}
@end
  /*
    DDLogMessage中返回資訊
    
    NSString *_message;             // 具體logger內容
    DDLogLevel _level;              // 全域性lever等級
    DDLogFlag _flag;                // log的flag等級
    NSInteger _context;             // 
    NSString *_file;                // 檔案
    NSString *_fileName;            // 檔名稱
    NSString *_function;            // 函式名
    NSUInteger _line;               // 行號
    id _tag;                        // 
    DDLogMessageOptions _options;   //
    NSDate *_timestamp;             // 時間
    NSString *_threadID;            // 執行緒id 
    NSString *_threadName;          // 執行緒名稱
    NSString *_queueLabel;          // gcd執行緒名稱
    */

3、使用

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [[MagicLogManager shareManager] start];
    DDLogVerbose(@"Verbose");    // 詳細日誌
    DDLogDebug(@"Debug");        // 除錯日誌
    DDLogInfo(@"Info");          // 資訊日誌
    DDLogWarn(@"Warn");          // 警告日誌
    DDLogError(@"Error");        // 錯誤日誌
    NSLog(@"日誌路徑%@", [[MagicLogManager shareManager] getAllLogFilePath]);
    NSLog(@"日誌內容%@", [[MagicLogManager shareManager] getAllLogFileContent]);
}

相關推薦

iOS搭建Log日誌系統

CocoaLumberjack CocoaLumberjack是適用於Mac和iOS的快速簡單但功能強大且靈活的日誌框架。 本文主要介紹基於CocoaLumberjack搭建iOS專案Log日誌系統。 一、CocoaLumberjack架構 CocoaLum

【U3D系統架構教程——開發篇】之二:Log日誌系統2.0

這篇文章由唐三胖ヾ(•ω•`)o網路整理總結,將告訴你如何開發一個高效率的日誌系統。 通過這篇文章,你可以知道 1)C#特性Condtional 2)開發2.0版的日誌系統 開篇介紹 通過上一章節的介紹,我們已經實現了重寫的日誌

利用log4mongo-java+mongodb複製集搭建java日誌系統

The log4mongo-java 0.6 release added full support for replica sets. While earlier releases would work with replica sets, you could specify only one host

C++實現log日誌系統

1.log日誌的作用在軟體開發週期中,不管是前臺還是後臺,系統一般會採用一個持久化的日誌系統來記錄執行情況。在程式碼中嵌入log程式碼資訊,主要記錄下列資訊:(1)記錄系統執行異常資訊。(2)記錄系統執行狀態資訊。(3)記錄系統執行效能指標。 通過對上述資訊分析和診斷,我們能

iOSLog日誌輸出到檔案中儲存

對於那些做後端開發的工程師來說,看LOG解Bug應該是理所當然的事,但我接觸到的移動應用開發的工程師裡面,很多人並沒有這個意識,查Bug時總是一遍一遍的試圖重現,試圖除錯,特別是對一些不太容易重現的Bug經常焦頭爛額。而且iOS的異常機制比較複雜,Objecti

記錄日誌系統ELKB 5.6.4的搭建過程

logstash elk stack 集中式日誌系統 前言ELK是最近比較流行的免費的日誌系統解決方案,註意,ELK不是一個軟件名,而是一個結局方案的縮寫,即Elasticsearch+Logstash+Kibana(ELK Stack),其中Logstash負責日誌的采集和過濾,Elastics

ELK日誌系統:Elasticsearch+Logstash+Kibana搭建教程

htpasswd ins 4.2 httpd 2.3 ted location parser oracle ELK日誌系統:Elasticsearch + Logstash + Kibana 搭建教程 安裝配置JDK環境 JDK安裝(不能安裝JRE) JDK下載地址:htt

.NET基於Eleasticsearch搭建日誌系統實戰演練(公開版)

問題: 動手 控制 arch 推送 平臺 記錄 插件 解決 一、需求背景介紹 1.1、需求描述 大家都知道C/S架構模式的客戶端應用程序(比如:WinForm桌面應用、WPF、移動App應用程序、控制臺應用程序、Windows服務等等)的日誌記錄都存儲在本地客戶端中

Linux搭建ELK日誌收集系統:FIlebeat+Redis+Logstash+Elasticse

uri 對數 exp 取數 網速 docker useradd 通過 演示 Centos7部署ELK日誌收集系統 一、ELK概述: ELK是一組開源軟件的簡稱,其包括Elasticsearch、Logstash 和 Kibana。ELK最近幾年發展迅速,已經成為目前最流行的

Docker手動搭建sentry錯誤日誌系統

ise onf -- 標記 .rpm src 使用 項目 記錄 Sentry介紹 在開發過程中,我們通過debug來排查bug,並且使用logging來記錄系統的錯誤。但是logging有很多不足: 必須登陸到服務器查看日誌文件 需要主動去查詢 輸出日誌方式無法把門,無法

MySQL日誌系統:redo log與binlog

日誌系統主要有redo log(重做日誌)和binlog(歸檔日誌)。redo log是InnoDB儲存引擎層的日誌,binlog是MySQL Server層記錄的日誌, 兩者都是記錄了某些操作的日誌(不是所有)自然有些重複(但兩者記錄的格式不同)。 圖來自極客時間的mysql實踐,該圖是描述的是MyS

iOS開發 搭建視訊直播系統,基於LFLiveKit+ijkplayer+rtmp(iOS端)

本文主要使用的三個技術: 推流:LFLiveKit 播放:ijkplayer 伺服器:nginx+rtmp+ffmpeg   有了這三點技術就可以完成一個簡約的直播系統。效果圖如下(右邊的是用模擬器裝置執行播放的,中間的是用VLC播放器播放的,當前在用手機推流

在Windows系統搭建ELK日誌分析平臺

  2018年07月11日 22:29:45 民國周先生 閱讀數:35 再記錄一下elk的搭建,個人覺得挺麻煩的,建議還是在linux系統下搭建,效能會好一些,但我是在windows下搭建的,還是記錄一下吧,像我這種記性差的人還是得靠爛筆頭  

CentOS 7.x 搭建 ELK 日誌監控系統

一、ELK介紹      ELK簡介: ELK是三個開源軟體的縮寫,分別表示:Elasticsearch , Logstash, Kibana , 它們都是開源軟體。新增了一個FileBeat,它是一個輕量級的日誌收集處理工具(Agent),Fileb

快速搭建日誌系統——ELK STACK

什麼是ELK STACK ELK Stack是Elasticserach、Logstash、Kibana三種工具組合而成的一個日誌解決方案。ELK可以將我們的系統日誌、訪問日誌、執行日誌、錯誤日誌等進行統一收集、儲存分析和搜尋以及圖形展現。相比傳統的CTRL+F或者資料庫語句來進行資料查詢,ELK支援分散式

在滴滴雲 DC2 雲伺服器上搭建 ELK 日誌採集系統

前段時間大學同學聚會,一個在讀的博士同學談到他們實驗室做實驗時,物理伺服器需要向老師申請且組內同學都共用那些機器。由於執行一些大資料和人工智慧的專案比較耗費資源,且對資源環境的隔離要求比較高,因而很多時候用機器還得排隊(畢竟學校經費和底層基礎設施沒有公司充裕),不是很方便。於是我就對他說到,

ELASTICSEARCH、LOGSTASH、KIBANA 搭建高效率日誌管理系統

ELK (ElasticSearch、LogStash以及Kibana)三者組合是一個非常強大的工具,這裡我們來實現監控日誌檔案並且收到日誌到ElasticSearch搜尋引擎,利用Kibana視覺化工具實現ElasticSearch查詢. ElasticS

elk搭建日誌系統

一、使用背景     當生產環境有很多伺服器、很多業務模組的日誌需要每時每刻檢視時 二、環境 系統:centos 6.5 JDK:1.8 Elasticsearch-5.0.0 Logstash-5.0.0 k

運維開發實踐:基於Sentry搭建錯誤日誌監控系統

錯誤日誌監控也可稱為業務邏輯監控, 旨在對業務系統執行過程中產生的錯誤日誌進行收集歸納和監控告警。似乎有那麼點曾相識?沒錯… 就是上一篇文章提到的“APM應用效能監控”。但它又與APM不同,APM系統主要注重應用層的行為分析,收集的更多是運營方向的資料。而sentry所做的是收集應用底層程式碼的崩潰

如何檢視linux的系統log日誌

1.檢視系統日誌所存放的位置 通過nginx的配置檔案檢視 default 。 access_log /var/log/nginx/hej.access.log common; 2.檢視系統日誌的格式 通過nginx的配置檔案檢視 nginx.conf。(如果是apac