Skip to content

Latest commit

 

History

History
282 lines (191 loc) · 8.36 KB

README-zh.md

File metadata and controls

282 lines (191 loc) · 8.36 KB

Logan

license Release Version PRs Welcome Platform Support

Logan是美团点评集团移动端基础日志组件。名称是Log和An的组合,代表个体日志服务,同时也是金刚狼大叔的大名。

Logan

Logan 承载着各种日志的聚合、存储、分析,作为基础日志库,Logan 已经接入了集团众多日志系统,例如端到端日志、用户行为日志、代码级日志、崩溃日志等。

Getting started

Android

Prerequisites

如果你想编译源代码,请确保NDK版本不高于16.1.4479499

Installation

在项目的build.gradle文件中添加:

compile 'com.dianping.android.sdk:logan:1.2.2'

Usage

在使用之前,必须初始化Logan,例如:

LoganConfig config = new LoganConfig.Builder()
        .setCachePath(getApplicationContext().getFilesDir().getAbsolutePath())
        .setPath(getApplicationContext().getExternalFilesDir(null).getAbsolutePath()
                + File.separator + "logan_v1")
        .setEncryptKey16("0123456789012345".getBytes())
        .setEncryptIV16("0123456789012345".getBytes())
        .build();
Logan.init(config);

初始化之后,就可以愉快的写日志了,例如这样写一条日志:

Logan.w("test logan", 1);

Logan.w方法有两个参数,详解如下:

  • String log:写入的日志内容;
  • int type:写入的日志类型,这非常重要,在下文的最佳实践内容会详细讲述如何优雅利用日志类型参数。

如果你想立即写入日志文件,需要调用flush方法:

Logan.f();

如果你想查看所有日志文件的信息,需要调用getAllFilesInfo方法:

Map<String, Long> map = Logan.getAllFilesInfo();

其中key为日期,value为日志文件大小(Bytes)。

Upload

Logan内部提供了日志上传机制,对需要上传的日志做了预处理操作。如果你需要上传日志功能,首先需要实现一个自己的SendLogRunnable:

public class RealSendLogRunnable extends SendLogRunnable {

    @Override
    public void sendLog(File logFile) {
      // logFile为预处理过后即将要上传的日志文件
      // 在此方法最后必须调用finish方法
      finish();
      if (logFile.getName().contains(".copy")) {
				logFile.delete();
			}
    }
}

注意:在sendLog方法的最后必须调用finish方法。如上面代码所示。

最后需要调用Logan的send方法:

Logan.s(date, mSendLogRunnable);

其中第一个参数为日期数组(yyyy-MM-dd)。

Permission

如果你需要上传日志到服务器,需要申请 INTERNET 权限。

如果你需要写日志到外部存储,或者从外部存储读取日志信息,则需要 WRITE_EXTERNAL_STORAGE 权限或者 READ_EXTERNAL_STORAGE 权限。

iOS & macOS

Installation

Logan支持以CocoaPods方式将Logan库引入到项目中。

Podfile

在Xcode项目中引入Logan,podfile添加Logan。

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'

target 'TargetName' do
pod 'Logan', '~> 1.2.5'
end

然后运行以下命令:

$ pod install

Logan Init

在使用之前,必须初始化Logan,例如:

#import "Logan.h"

NSData *keydata = [@"0123456789012345" dataUsingEncoding:NSUTF8StringEncoding]; 
NSData *ivdata = [@"0123456789012345" dataUsingEncoding:NSUTF8StringEncoding];
uint64_t file_max = 10 * 1024 * 1024;
// logan初始化,传入16位key,16位iv,写入文件最大大小(byte)
loganInit(keydata, ivdata, file_max);

#if DEBUG
loganUseASL(YES);
#endif

Usage

写入一条日志:

logan(1, @"this is a test");

方法有两个参数,详解如下:

  • String log:写入的日志内容;
  • int type:写入的日志类型,这非常重要,在下文的最佳实践内容会详细讲述如何优雅利用日志类型参数。

如果你想立即写入日志文件,需要调用flush方法:

loganFlush();

如果你想查看所有日志文件的信息,需要调用getAllFilesInfo方法:

NSDictionary *map = loganAllFilesInfo();

其中key为日期,value为日志文件大小(Bytes)。

Upload

Logan提供了获取日志文件方法,对需要上传的日志做了预处理操作。实现网络上传功能就可以日志上传。

    loganUploadFilePath(loganTodaysDate(), ^(NSString *_Nullable filePatch) {
        if (filePatch == nil) {
            return;
        }
        NSString *urlStr = @"http://127.0.0.1:3000/logupload";
        NSURL *url = [NSURL URLWithString:urlStr];
        NSMutableURLRequest *req = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60];
        [req setHTTPMethod:@"POST"];
        [req addValue:@"binary/octet-stream" forHTTPHeaderField:@"Content-Type"];
        NSURL *fileUrl = [NSURL fileURLWithPath:filePatch];
        NSURLSessionUploadTask *task = [[NSURLSession sharedSession] uploadTaskWithRequest:req fromFile:fileUrl completionHandler:^(NSData *_Nullable data, NSURLResponse *_Nullable response, NSError *_Nullable error) {
            if (error == nil) {
                NSLog(@"upload success");
            } else {
                NSLog(@"upload failed. error:%@", error);
            }
        }];
        [task resume];
    });

Log parsing

java

将Logan/parser-java 拷贝到项目中。

解析日志数据

new LoganParser(Key16.getBytes(),Iv16.getBytes()).parse(InputStream, OutputStream)

node.js

请参考 Example/Logan-Server/server.js 实现。

Demo

How to use demo

Log protocol

Best Practices

在Logan面世之前,日志系统是相对分散的。

Before_Logan

简单来说,传统的思路是通过搜集散落在各系统的日志拼凑出问题出现的场景,而新的思路是从用户产生的所有日志中聚合分析,寻找出现问题的场景。

Logan核心体系由四大模块构成:

  • 日志输入
  • 日志存储
  • 后端系统
  • 前端系统

Logan_Process

新的个案分析流程如下:

Logan_Case

Article

美团点评移动端基础日志库 — Logan

Logan:美团点评的开源移动端基础日志库

Feature

未来我们会提供基于Logan大数据的数据平台,包含机器学习、疑难日志解决方案、大数据特征分析等高级功能。

最后,我们希望提供更加完整的一体化个案分析生态系统。

Logan_System

Module Open Source Processing Planning
iOS & macOS
Android
Web
Mini Programs
Back End
Front End

Contributing

关于贡献PRs和issue的更多信息,请参考贡献指南

Authors

贡献者列表

License

Logan项目采用MIT许可协议 - 详细内容请查看LICENSE

Acknowledgments