iOS开发:日志记录文件及压缩上传OSS

本文涉及的产品
对象存储 OSS,20GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
对象存储 OSS,恶意文件检测 1000次 1年
简介: 发现APP上传本地日志文件相当的好用,根据之前研究学习的对这一模块做了一些更具体的优化处理。从标题可以看出,实现这一功能分以下几个步骤:1、日志记录本地文件2、日志文件压缩[xx.zip]3、压缩之后的文件上传4、压缩文件删除

目录


一、简述

二、实现步骤

三、参考链接


一、简述


发现APP上传本地日志文件相当的好用,根据之前研究学习的对这一模块做了一些更具体的优化处理。从标题可以看出,实现这一功能分以下几个步骤:

1、日志记录本地文件

2、日志文件压缩[xx.zip]

3、压缩之后的文件上传

4、压缩文件删除

这里写了一个【Demo】,将日志记录和日志压缩放在【LogManager】文件,日志上传放在【ZMAliOSSManager】文件,日志上传OSS我只用了一个简单上传的实现,没有做鉴权处理和其他上传方式,但是相关的实现方法写集成了,希望需要的有用。当然这也不影响我对功能的实现,以下是我实现功能的几个实例:


//
//  ViewController.m
//  ZMLogZipUpdateDemo
//
//  Created by chenzm on 2018/10/11.
//  Copyright © 2018年 chenzm. All rights reserved.
//
#import "ViewController.h"
#import "ZMLogZipOssHeader.h"
@interface ViewController ()
///显示日志
@property(nonatomic,strong)ZMLogView *logView;
@end
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    //写入数据到本地文件并显示
    [self testShowLocalLog];
    //1、直接上传文件(不压缩)
    [self testUpdateLocalFile];
    //2、压缩打包后上传文件
    [self testUpdateLocalZipFile];
    //3、根据上传文件的大小上传文件
    [self testCalcuUpdateFile];
    //4、上传隔天上一个的日志文件
    [self testUpdateTodayBeforeADayFile];
}
///写入数据到本地文件并显示
-(void)testShowLocalLog{
    //写入数据到本地文件
    kLocalLog(@"错误信息(文件类/方法)",@"具体信息啊啊啊啊啊啊");
    //获取日志信息并显示
    NSString *str = [[LogManager sharedInstance] readFile:@"2018-10-11"];
    NSLog(@"%@",str);
    //渲染
    [self.logView logInfo:str];
}
///1、直接上传文件
-(void)testUpdateLocalFile{
    [[ZMAliOSSManager shareManager] zm_configClient];
    //获取文件路径
    NSString *path = [NSString stringWithFormat:@"%@%@%@",NSHomeDirectory(),kCacheLogFilePath,@"2018-10-11"];
    //上传后文件的名称
    NSString *upFileNameStr = @"test[2018-10-11]";
    [[ZMAliOSSManager shareManager] zm_putResourceWithLocalFilePath:path fileName:upFileNameStr response:^(BOOL isSuccess, NSString *resultUrl) {
        if (isSuccess == YES) {
            NSLog(@"上传文件成功");
        }
    }];
}
///2、压缩打包后上传文件
-(void)testUpdateLocalZipFile{
    [[ZMAliOSSManager shareManager] zm_configClient];
    //    NSDictionary *dic = @{@"type":@"0"};
    //    NSDictionary *dic1 = @{@"type":@"1",@"dates":@[@"2018-10-11",@"2018-10-09"]};
    NSDictionary *dic2 = @{@"type":@"2"};
    //上传后文件的名称
    NSString *upFileNameStr = @"ZMDemo压缩包测试";
    [[LogManager sharedInstance] zm_uploadZipFile:dic2 upFileName:upFileNameStr];
}
///3、根据上传文件的大小上传文件
-(void)testCalcuUpdateFile{
    [[ZMAliOSSManager shareManager] zm_configClient];
    //获取文件路径
    NSString *path = [NSString stringWithFormat:@"%@%@%@",NSHomeDirectory(),kCacheLogFilePath,@"2018-10-11"];
    CGFloat file_size = [[LogManager sharedInstance] zm_calculatorFileSizeAtPath:path];
    if (file_size > 1.0) {//如果文件大于1MB,则打包上传
        NSDictionary *dic1 = @{@"type":@"1",@"dates":@[@"2018-10-11"]};
        //上传后文件的名称
        NSString *upFileNameStr = @"ZMDemo压缩包测试";
        [[LogManager sharedInstance] zm_uploadZipFile:dic1 upFileName:upFileNameStr];
    }else{
        //上传后文件的名称
        NSString *upFileNameStr = @"test[2018-10-11]";
        [[ZMAliOSSManager shareManager] zm_putResourceWithLocalFilePath:path fileName:upFileNameStr response:^(BOOL isSuccess, NSString *resultUrl) {
            if (isSuccess == YES) {
                NSLog(@"上传文件成功");
            }
        }];
    }
}
///4、上传隔天上一个的日志文件
-(void)testUpdateTodayBeforeADayFile{
    [[ZMAliOSSManager shareManager] zm_configClient];
    NSString *fileName = [[LogManager sharedInstance] zm_getUpdateLogFileName];
    [[LogManager sharedInstance] zm_updateFileWithUpName:fileName];
}
#pragma mark - lazyload
-(ZMLogView *)logView{
    if (!_logView) {
        _logView = [ZMLogView initLogView];
        [self.view addSubview:_logView];
    }
    return _logView;
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
@end


二、实现步骤


是不是发现很好用,让我们来看看是怎么实现的吧:

1、下载【Demo】,将【ZMTools】文件夹内的所有文件导入项目。

2、创建【Podfile】工程,在[Podfile]文件中导入两个包:


#压缩文件包
pod 'ZipArchive', '1.4.0',:inhibit_warnings => true
#阿里云OSS
pod 'AliyunOSSiOS','2.10.5',:inhibit_warnings => true

3、在需要压缩上传的文件类中引入文件【ZMLogZipOssHeader.h】,

#import "ZMLogZipOssHeader.h"

在需要记录文件的文件中引入文件类【LogManager.h】。

//写入数据到本地文件
   kLocalLog(@"错误信息(文件类/方法)",@"具体信息啊啊啊啊啊啊");

4、调用方法实现,见第一段代码。


三、参考链接

1、iOS开发:日志记录及AFNetworking请求


相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
打赏
0
0
0
0
794
分享
相关文章
docker运维查看指定应用log文件位置和名称
通过本文的方法,您可以更高效地管理和查看Docker容器中的日志文件,确保应用运行状态可控和可监测。
122 28
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
219 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
124 1
【赵渝强老师】Oracle的控制文件与归档日志文件
【赵渝强老师】PostgreSQL的运行日志文件
PostgreSQL的物理存储结构包括数据文件、日志文件等。运行日志默认未开启,需配置`postgresql.conf`文件中的相关参数如`log_destination`、`log_directory`等,以记录数据库状态、错误信息等。示例配置中启用了CSV格式日志,便于管理和分析。通过创建表操作,可查看生成的日志文件,了解具体日志内容。
114 3
【赵渝强老师】MySQL的全量日志文件
MySQL全量日志记录所有操作的SQL语句,默认禁用。启用后,可通过`show variables like %general_log%检查状态,使用`set global general_log=ON`临时开启,执行查询并查看日志文件以追踪SQL执行详情。
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
119 1
为什么 SQL 日志文件很大,我应该如何处理?
为什么 SQL 日志文件很大,我应该如何处理?
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
162 67
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。

热门文章

最新文章

  • 1
    iOS|解决 setBrightness 调节屏幕亮度不生效的问题
    110
  • 2
    iOS|记一名 iOS 开发新手的前两次 App 审核经历
    16
  • 3
    iOS各个证书生成细节
    27
  • 4
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    142
  • 5
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    46
  • 6
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    58
  • 7
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    48
  • 8
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    41
  • 9
    uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
    162
  • 10
    【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
    326
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等