一、前言

Unity项目开发中,遇到bug的时候,我们一般是通过日志来定位问题,所以写日志到本地文件,或者把日志文件上传到web服务器这样的功能就很必要了。下面就介绍下如何实现日志写入本地文件和上传本地日志文件到web服务器。

二、运行效果

三、Unity场景

创建场景,创建UI界面

创建Main.cs脚本(代码见文章最下面),挂到Main Camera上,绑定UI对象

四、Main.cs代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;
using System.IO;
using System.Text;public class Main : MonoBehaviour {public Button writeLogBtn;public Text logText;public Text progressLbl;public Slider progressSlider;public Button uploadBtn;const string UPLOAD_URL = "你上传日志的Http接口URL";string m_logFileSavePath;StringBuilder m_logStr = new StringBuilder();void Awake () {m_logFileSavePath = string.Format("{0}/output.log", Application.persistentDataPath);Application.logMessageReceived += LogCallBack;writeLogBtn.onClick.AddListener (() => {Debug.Log("write log test");});uploadBtn.onClick.AddListener (() => {byte[] data = ReadLogFile();Debug.Log(data.Length);StartCoroutine(HttpPost(UPLOAD_URL, data));});}// 输出日志回调void LogCallBack(string condition, string stackTrace, LogType type){m_logStr.Append (condition);m_logStr.Append ("\n");m_logStr.Append (stackTrace);m_logStr.Append ("\n");logText.text += m_logStr.ToString ();WriteLogToFile ();}// 将日志写入本地文件中void WriteLogToFile(){if (m_logStr.Length <= 0) return;if (!File.Exists (m_logFileSavePath)) {var fs = File.Create (m_logFileSavePath);fs.Close ();}using (var sw = File.AppendText (m_logFileSavePath)) {sw.WriteLine (m_logStr.ToString ());m_logStr.Remove (0, m_logStr.Length);}}// 读取日志文件的字节流byte[] ReadLogFile(){byte[] data = null;using (FileStream fs = File.OpenRead (m_logFileSavePath)) {int index = 0;long len = fs.Length;data = new byte[len];int offset = data.Length > 1024 ? 1024 : data.Length;while (index < len) {int readByteCnt = fs.Read (data, index, offset);index += readByteCnt;long leftByteCnt = len - index;offset = leftByteCnt > offset ? offset : (int)leftByteCnt;}Debug.Log ("Read Done");}return data;}// 将日志字节流上传到web服务器IEnumerator HttpPost(string url, byte[] data){WWWForm form = new WWWForm ();form.AddField ("desc", "test upload log file");form.AddBinaryData ("errlog", data, "test_log.txt", "application/x-gzip");// 使用UnityWebRequestUnityWebRequest request = UnityWebRequest.Post (url, form);var result = request.Send ();if (request.isError) {Debug.LogError (request.error);}while (!result.isDone) {yield return null;// 更新上传日志进度条progressSlider.value = request.uploadProgress;progressLbl.text = request.uploadProgress * 100 + "%";Debug.Log ("result.progress: " + request.uploadProgress);}Debug.Log ("finish upload, http return msg: \n" + request.downloadHandler.text);}
}

Unity使用UnityWebRequest实现本地日志上传到web服务器相关推荐

  1. Python 技术篇-用flask服务实现mac本地文件上传至windows服务器指定文件夹下实例演示

    操作 linux 主机的话用 paramiko 会简单很多,可以看我下面的文章. Python 技术篇-用 paramiko 库实现 winodws 本地文件上传至 linux 服务器实例演示 首先是 ...

  2. Python 技术篇-用paramiko库实现winodws本地文件上传至linux服务器实例演示

    利用 paramiko 库可以实现 linux 服务器的管理. 如果想管理 windows 服务器的话就麻烦一点了,我用 flask 服务实现的,可以看我的这篇文章: Python 技术篇-用 fla ...

  3. 如何将视频上传到网站服务器,如何将本地视频上传到云服务器

    如何将本地视频上传到云服务器 内容精选 换一换 在本地主机和Windows云服务器上分别安装QQ.exe等工具进行数据传输.使用远程桌面连接mstsc方式进行数据传输.该方式不支持断点续传,可能存在传 ...

  4. java用itextPDF生成PDF文件保存至本地并上传至ftp服务器

    标题java用itextPDF生成PDF文件保存至本地并上传至ftp服务器 所需jar :itext-asian-5.2.0.jar,itextpdf-5.5.5.jar,commons-net-3. ...

  5. 没有找到站点和本地项目上传到云服务器

    没有找到站点解决 用宝塔面板提示"您的请求在Web服务器中没有找到对应的站点"这是什么原因?出现这个界面说明域名解析已经正确并生效,这是由于域名没有绑定好,很可能是由于www域名和 ...

  6. 摄像头网页服务器,js调用本地摄像头拍照并上传到web服务器

    [实例简介] js调用本地摄像头拍照并上传到web服务器.后台使用java实现图片的接收和存储,上传的图片默认保存到项目下的images文件夹中. [实例截图] [核心代码] MyCamera └── ...

  7. http文件上传到web服务器,上传到ftp服务器

    前期准备: ftp:服务器的配置.(为ftp上传使用). 注意: 1.要是你测试用,ftp就在你自己开发的机器上配置,一定别忘了要先创建用户.且该用户一定要有可读写的权限!要不然会出现ftp 530错 ...

  8. 服务器怎么用u盘传文件进去_本地文件上传到linux服务器的几种方法

    本文介绍几种常见的方法,把文件上传到Linux服务器中!速维网络 常见有使用:scp命令.xshell软件里的xftp程序.U盘挂载.服务器自带的lrzsz程序. 一.scp使用说明: 1.把本机的文 ...

  9. php程序怎么上传服务器,php本地文件上传到远程服务器

    利用curl实现把本地服务器的文件通过curl发送请求给远程服务器的php文件接受就实现了上传,还一个是利用ftp来上传方法也是php中的curl操作ftp服务器进行上传. 本地代码如下: heade ...

最新文章

  1. 通信测试:5G 时代的“卖水人”
  2. 人工智能深度学习Caffe框架介绍,优秀的深度学习架构
  3. Web动画API教程:可爱的运动路径(Motion Path)
  4. android 支付宝月账单 统计图_2019年你抢了多少微信红包?花了多少?(微信账单查看教程)...
  5. 九十六、双指针和滑动窗口算法模板
  6. python已知Camera及Lidar2到Lidar1外参,求Camera到Lidar2外参
  7. spring配置文件-------通配符
  8. 【前端就业课 第一阶段】HTML5 零基础到实战(四)伪类与伪元素
  9. C++:19---重载与模板、模板特例化
  10. 卡内基·梅隆大学新提出AdaScale:自适应缩放实现视频对象实时检测算法
  11. three.js 坐标系、camera位置属性、点、线、面
  12. Android studio设置代码自动提示
  13. tomcat中 JVM 内存溢出及合理配置
  14. 传统项目管理 VS 敏捷项目管理
  15. 【运筹学】线性规划数学模型 ( 线性规划三要素 | 一般形式 | 标准形式 | 标准形式转化 | 可行解 | 最优解 | 基 | 基向量 | 基变量 | 非基变量 ) ★★
  16. java抖音字符视频_java爬取新版抖音无水印视频教程(2020/09/14附带java代码)
  17. 5分钟latex 使用入门写llncs论文
  18. Unity InputField光标位置不对
  19. Arcmap特殊注记
  20. 禁用win10笔记本键盘

热门文章

  1. ❤️ 万字Python MySQL从入门到精通详细教程❤️ 再也不用担心学不会数据库了❤️
  2. css33d图片轮播_手把手教你用纯css3实现轮播图效果
  3. iOS 16 Beta如何降级iOS 15系统?详细图文教程!
  4. CentOS7 通过 cups 与 Windows 共享 HP 1020 打印机
  5. 哔哩哔哩2018.9.21笔试题——扭蛋机(堆的思想解决)
  6. 【滤波器】6. 高通滤波器
  7. LeetCode--第25题K个一组翻转链表
  8. bmp图片灰度化和二值化
  9. 工作日记:JavaScript生成随机色
  10. Solidworks2014在win8下安装无权限