关于ALiyun打点日志的 oc 代码和 java

OC代码如下

//
//  AliyunLog.m
//  AliyunLogProducerSampleOC
//
//  Created by lichao on 2020/9/27.
//  Copyright © 2020 lichao. All rights reserved.
//

#import "AliyunLog.h"
#import "AliyunLogProducer/AliyunLogProducer.h"



LogProducerClient* client = nil;
LogProducerClient* config = nil;

void on_log_send_done(const char * config_name, log_producer_result result, size_t log_bytes, size_t compressed_bytes, const char * req_id, const char * message, const unsigned char * raw_buffer, void * userparams) {
    if (result == LOG_PRODUCER_OK) {
        printf("aaaa send success, config : %s, result : %d, log bytes : %d, compressed bytes : %d, request id : %s \n", config_name, (result), (int)log_bytes, (int)compressed_bytes, req_id);
    } else {
        printf("aaaa send fail   , config : %s, result : %d, log bytes : %d, compressed bytes : %d, request id : %s \n, error message : %s\n", config_name, (result), (int)log_bytes, (int)compressed_bytes, req_id, message);
    }
}


LogProducerConfig* Internal_CreateConfig(char* endpoint,char* project, char* logstore, char* accesskeyid, char* accesskeysecret, char* securityToken) {

    NSString * endpointStr= [NSString stringWithFormat:@"%s",endpoint];
    NSString * projectStr= [NSString stringWithFormat:@"%s",project];
    NSString * logstoreStr= [NSString stringWithFormat:@"%s",logstore];
    NSString * accesskeyidStr= [NSString stringWithFormat:@"%s",accesskeyid];
    NSString * accesskeysecretStr= [NSString stringWithFormat:@"%s",accesskeysecret];
    NSString * securityTokenStr= [NSString stringWithFormat:@"%s",securityToken];
    NSArray  *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *Path = [[paths lastObject] stringByAppendingString:@"/log.dat"];
    LogProducerConfig* config = [[LogProducerConfig alloc] initWithEndpoint:endpointStr project:projectStr logstore:logstoreStr accessKeyID:accesskeyidStr accessKeySecret:accesskeysecretStr securityToken:securityTokenStr];
        // 设置主题
        [config SetTopic:@"test_topic"];
        // 设置tag信息,此tag会附加在每条日志上
        [config AddTag:@"test" value:@"test_tag"];

        // 1 开启断点续传功能, 0 关闭
        // 每次发送前会把日志保存到本地的binlog文件,只有发送成功才会删除,保证日志上传At Least Once
        [config SetPersistent:1];
        // 持久化的文件名,需要保证文件所在的文件夹已创建。
        [config SetPersistentFilePath:Path];
        // 是否每次AddLog强制刷新,高可靠性场景建议打开
        [config SetPersistentForceFlush:1];
        // 持久化文件滚动个数,建议设置成10。
        [config SetPersistentMaxFileCount:10];
        // 每个持久化文件的大小,建议设置成1-10M
        [config SetPersistentMaxFileSize:1024*1024];
        // 本地最多缓存的日志数,不建议超过1M,通常设置为65536即可
        [config SetPersistentMaxLogCount:65536];
    return config;
}

LogProducerClient* Internal_Init (LogProducerConfig* config )
{
   //创建client
    client = [[LogProducerClient alloc] initWithLogProducerConfig:config callback:on_log_send_done];
    return client;
}

void Internal_ResetToken (LogProducerConfig* config , char* accesskeyid, char* accesskeysecret, char* securityToken)
{
    NSString * accesskeyidStr= [NSString stringWithFormat:@"%s",accesskeyid];
    NSString * accesskeysecretStr= [NSString stringWithFormat:@"%s",accesskeysecret];
    NSString * securityTokenStr= [NSString stringWithFormat:@"%s",securityToken];
    [config ResetSecurityToken: accesskeyidStr accessKeySecret:accesskeysecretStr securityToken:securityTokenStr];
}
Log* Internal_CreateLog()
{
    Log* log = [[Log alloc] init];
    int logTime = [[NSDate date] timeIntervalSince1970];
    [log SetTime:logTime];
    return  log;
}
void Internal_PutContent(Log* log,char* key, char* value)
{
    NSString * keyStr= [NSString stringWithFormat:@"%s",key];
    NSString * valueStr= [NSString stringWithFormat:@"%s",value];
    [log PutContent:keyStr value:valueStr];
}
void Internal_SendLog(Log* log)
{
    LogProducerResult res = [client AddLog:log];
}

对应的Java代码



import android.app.Activity;
import android.util.Log;

import com.aliyun.sls.android.producer.LogProducerCallback;
import com.aliyun.sls.android.producer.LogProducerClient;
import com.aliyun.sls.android.producer.LogProducerConfig;
import com.aliyun.sls.android.producer.LogProducerException;
import com.aliyun.sls.android.producer.LogProducerResult;

public class ALiYunLogAdapter {
    private static LogProducerConfig config;
    private static LogProducerClient client;
    public static LogProducerConfig CreateConfig(Activity unityActivity, String endpoint, String project, String logstore, String accessKeyID,
                                                 String accessKeySecret, String securityToken) throws LogProducerException {
        if (config != null){
            Log.e("unity", "Unity CreateConfig: config已经不为空,是否重复调用了!!");
        }
        if (securityToken.isEmpty()){
            config = new LogProducerConfig(unityActivity, endpoint, project, logstore, accessKeyID, accessKeySecret);
        }else {
            config = new LogProducerConfig(unityActivity, endpoint, project, logstore, accessKeyID, accessKeySecret, securityToken);
        }
        // 1 开启断点续传功能, 0 关闭
        // 每次发送前会把日志保存到本地的binlog文件,只有发送成功才会删除,保证日志上传At Least Once
        config.setPersistent(0);
        // 是否每次AddLog强制刷新,高可靠性场景建议打开
        config.setPersistentForceFlush(1);
        // 持久化文件滚动个数,建议设置成10。
        config.setPersistentMaxFileCount(10);
        // 每个持久化文件的大小,建议设置成1-10M
        config.setPersistentMaxFileSize(1024 * 1024);
        // 本地最多缓存的日志数,不建议超过1M,通常设置为65536即可
        config.setPersistentMaxLogCount(65536);
        config.logProducerDebug();
        return config;
    }

    public static void Init(LogProducerConfig config) throws LogProducerException {
        client = new LogProducerClient(config, new LogProducerCallback() {
            @Override
            public void onCall(int resultCode, String reqId, String errorMessage, int logBytes, int compressedBytes) {
                Log.e("unity", String.format("Unity ALiYunLog: \nresultCode: %s\nreqId: %s\nerrorMessage: %s\nlogBytes: %s\ncompressedBytes: %s", LogProducerResult.fromInt(resultCode), reqId, errorMessage, logBytes, compressedBytes));
            }
        });
    }

    public static void ResetToken(String accessKeyID, String accessKeySecret, String securityToken){
        config.resetSecurityToken(accessKeyID, accessKeySecret, securityToken);
    }

    public static com.aliyun.sls.android.producer.Log CreateLog(){
        return new com.aliyun.sls.android.producer.Log();
    }

    public static void SendLog(com.aliyun.sls.android.producer.Log log){
        if (client != null) {
            LogProducerResult res = client.addLog(log);
            Log.i("unity", String.format("Unity SendLog: res: %s isLogProducerResultOk: %s%n", res, res.isLogProducerResultOk()));
        }else{
            Log.e("unity", "Unity SendLog: Log适配器没有初始化!! ALiYunLogAdapter.Init()");
        }
    }

    public static String HelpString(){
        return "\n        // 设置主题\n" +
                "        config.setTopic(\"test_topic\");\n" +
                "        // 设置tag信息,此tag会附加在每条日志上\n" +
                "        config.addTag(\"test\", \"test_tag\");\n" +
                "        // 每个缓存的日志包的大小上限,取值为1~5242880,单位为字节。默认为1024 * 1024\n" +
                "        config.setPacketLogBytes(1024 * 1024);\n" +
                "        // 每个缓存的日志包中包含日志数量的最大值,取值为1~4096,默认为1024\n" +
                "        config.setPacketLogCount(1024);\n" +
                "        // 被缓存日志的发送超时时间,如果缓存超时,则会被立即发送,单位为毫秒,默认为3000\n" +
                "        config.setPacketTimeout(3000);\n" +
                "        // 单个Producer Client实例可以使用的内存的上限,超出缓存时add_log接口会立即返回失败\n" +
                "        // 默认为64 * 1024 * 1024\n" +
                "        config.setMaxBufferLimit(64 * 1024 * 1024);\n" +
                "        // 发送线程数,默认为1\n" +
                "        config.setSendThreadCount(1);\n" +
                "\n" +
                "        // 1 开启断点续传功能, 默认 0 关闭\n" +
                "        // 每次发送前会把日志保存到本地的binlog文件,只有发送成功才会删除,保证日志上传At Least Once\n" +
                "        config.setPersistent(0);\n" +
                "        // 持久化的文件名,需要保证文件所在的文件夹已创建。配置多个客户端时,不应设置相同文件\n" +
                "        config.setPersistentFilePath(getFilesDir() + \"/log.dat\");\n" +
                "        // 是否每次AddLog强制刷新,高可靠性场景建议打开(适配器已配置)\n" +
                "        config.setPersistentForceFlush(1);\n" +
                "        // 持久化文件滚动个数,建议设置成10。(适配器已配置)\n" +
                "        config.setPersistentMaxFileCount(10);\n" +
                "        // 每个持久化文件的大小,建议设置成1-10M(适配器已配置)\n" +
                "        config.setPersistentMaxFileSize(1024 * 1024);\n" +
                "        // 本地最多缓存的日志数,不建议超过1M,通常设置为65536即可(适配器已配置)\n" +
                "        config.setPersistentMaxLogCount(65536);\n" +
                "\n" +
                "        //网络连接超时时间,整数,单位秒,默认为10\n" +
                "        config.setConnectTimeoutSec(10);\n" +
                "        //日志发送超时时间,整数,单位秒,默认为15\n" +
                "        config.setSendTimeoutSec(10);\n" +
                "        //flusher线程销毁最大等待时间,整数,单位秒,默认为1\n" +
                "        config.setDestroyFlusherWaitSec(2);\n" +
                "        //sender线程池销毁最大等待时间,整数,单位秒,默认为1\n" +
                "        config.setDestroySenderWaitSec(2);\n" +
                "        //数据上传时的压缩类型,默认为LZ4压缩,0 不压缩,1 LZ4压缩,默认为1\n" +
                "        config.setCompressType(1);\n" +
                "        //设备时间与标准时间之差,值为标准时间-设备时间,一般此种情况用户客户端设备时间不同步的场景\n" +
                "        //整数,单位秒,默认为0;比如当前设备时间为1607064208, 标准时间为1607064308,则值设置为 1607064308 - 1607064208 = 10\n" +
                "        config.setNtpTimeOffset(3);\n" +
                "        //日志时间与本机时间之差,超过该大小后会根据 `drop_delay_log` 选项进行处理。\n" +
                "        //一般此种情况只会在设置persistent的情况下出现,即设备下线后,超过几天/数月启动,发送退出前未发出的日志\n" +
                "        //整数,单位秒,默认为7*24*3600,即7天\n" +
                "        config.setMaxLogDelayTime(7 * 24 * 3600);\n" +
                "        //对于超过 `max_log_delay_time` 日志的处理策略\n" +
                "        //0 不丢弃,把日志时间修改为当前时间; 1 丢弃,默认为 1 (丢弃)\n" +
                "        config.setDropDelayLog(0);\n" +
                "        //是否丢弃鉴权失败的日志,0 不丢弃,1丢弃\n" +
                "        //默认为 0,即不丢弃\n" +
                "        config.setDropUnauthorizedLog(0);";
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值