缘起

最近Android,IOS自动化多开群控都搞好了,但是Appium中的log 显示中文乱码问题像个苍蝇一样,看着感觉特别难受,挥之不去,抚之不平。论坛搜索了一下,很多帖子都反映过这个问题,但是都没给出解决策略。不知道这些小 伙伴最终有没有解决。遂决定,吃个大闸蟹,研究一下看能否解决。

特别声明

本文只针对解决Jenkins集成后Appium的log日志中文乱码问题。桌面版本人1.8.1版的未发现乱码,如您桌面版的乱码,我也解决不 了。另外命令执行时受限于机器,环境,开发语言,执行姿势等多方面影响,如果参考本帖未能解决您的问题,真诚的对您说声非常抱歉。没能终结您的乱码问题, 牛逼吹大了

工程代码编码设置

  • 设置自己工程代码字符编码为UTF-8
  • 设置Maven打包编译jar的编码为UTF-8

Jenkins环境变量设置

简而言之一句话:管理员账号登录后,设置全局属性 LANG :zh.CH.UTF-8
设置位置:【系统管理】--->【系统设置】--->【全局属性】

 

Java启动参数设置

设置java执行的环境变量,也即如下执行testng时设置一个编码的参数
java -Dfile.encoding=UTF-8 -classpath /Users/iosTest.jar org.testng.TestNG /Users/mytestng.xml

如果经过以上的几步骚操作后,您的log中文不乱码了,那下面的可以忽略了。

Appium的log采集处理

由于要命令起Appium服务,写一个java调用CMD或者shell的共通类。执行命令时,输出命令返回的log也即Appium服务日志信息。在接受命令执行输出时设置一下编码:UTF-8。
废话少说,放码过来。

/**
* 命令执行器
* @author Zhang
*
*/
public class CommandExecutorImpl implements CommandExecutor { static final Logger logger = LoggerFactory.getLogger(CommandExecutorImpl.class);
static ExecutorService pool = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 3L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>()); public ExecuteResult executeCommand(long timeout,String ... commands) { Process process = null;
InputStream pIn = null;
StreamManger outputManger = null;
try {
if(commands == null || commands.length == 0){
logger.error("执行的命令行语句不能为空!");
return new ExecuteResult(9999,"执行的命令行语句不能为空");
}
process = Runtime.getRuntime().exec(commands);
final Process p = process;
p.waitFor(timeout, TimeUnit.MILLISECONDS);
p.getOutputStream().close(); pIn = process.getInputStream();
outputManger = new StreamManger(pIn);
outputManger.start(); return new ExecuteResult(0, "命令执行成功!"); } catch (Exception ex) {
String errorMessage = "命令:" + commands + "执行失败!";
logger.error(errorMessage, ex);
return new ExecuteResult(-1, null);
}
} }

输入输出流管理控制器,这里其实还可以做更多操作,自由控制输出某些内容,或者不输出某些内容。

/**
* 输入输出流管理
* @author Zhang
*
*/
public class StreamManger extends Thread {
private static Logger logger = LoggerFactory.getLogger(StreamManger.class);
private InputStream inputStream; /**
* 构造方法
* 实例化输入流
* @param in 输入流
*/
public StreamManger(final InputStream in) {
this.inputStream = in;
} /**
* 打印输出
*/
@Override
public void run() {
try {
// 设置默认编码为UTF-8
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String line = null;
while ((line = bufferedReader.readLine()) != null) {
logger.debug(line); }
} catch (Exception ex) {
logger.trace("打印输出流失败:", ex);
} finally {
synchronized (this) {
notify();
}
}
} }

日志输出

贴个图吧。不然说解决了Jenkins的appium日志中文乱码问题,肯定会有人不信。
安卓:

 

IOS:

 

附录appium命令参数地址

社区真伟大,由本论坛翻译Appium官网中文参数介绍。中文参数介绍传送门

后记

感谢社区,给予很多精神食粮,感谢大师们的无私奉献。解决问题的方法,就像平X的妹子的R沟,挤一挤总归还是有点的,多来论坛逛逛,多多学习,多动手实践,总会有解决的方向。
分享一下自己解决这个问题的方法,反哺一下和我一样low的兄弟们。方法比较挫,也许不能解决您的问题,轻喷谢谢!

Appium日志乱码终结指北的更多相关文章

  1. log4j输出日志乱码(转)

    log4j日志文件乱码问题的解决方法 log4j日志文件中文乱码处理方法 log4j 控制台和文件输出乱码问题解决 写在前面,第三篇文章中将原因解释的最清楚,为什么设置为UTF-8或者GBK就生效了, ...

  2. 解决CentOS7中文乱码(包括Tomcat日志乱码)问题

    Linux系统中文语言乱码,是很多小伙伴在开始接触Linux时经常遇到的问题,而且当我们将已在Wndows部署好的项目搬到Linux上运行,Tomcat的输出日志中文全为乱码(在Windows上正常) ...

  3. git宝典—应付日常工作使用足够的指北手册

    最近公司gitlab又迁移,一堆git的命令骚操作,然鹅git命令,感觉还是得复习下——其实,git现在界面操作工具蛮多,比如intellij 自带的git操作插件就不错,gitlab github ...

  4. 【app】Appium日志文件分析

    Appium在和客户端及手机端进行通讯的时候会输出很多日志,可以通过点击主面板的Get Raw Logs得到其原始日志: 现在我们另存到其他路径,并且以notepad工具打开进行查看 Appium日志 ...

  5. Python 简单入门指北(二)

    Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...

  6. Python 简单入门指北(一)

    Python 简单入门指北(一) Python 是一门非常容易上手的语言,通过查阅资料和教程,也许一晚上就能写出一个简单的爬虫.但 Python 也是一门很难精通的语言,因为简洁的语法背后隐藏了许多黑 ...

  7. 可能比文档还详细--VueRouter完全指北

    可能比文档还详细--VueRouter完全指北 前言 关于标题,应该算不上是标题党,因为内容真的很多很长很全面.主要是在官网的基础上又详细总结,举例了很多东西.确保所有新人都能理解!所以实际上很多东西 ...

  8. 关于supervisor的入门指北

    关于supervisor的入门指北 在目前这个时间点(2017/07/25),supervisor还是仅支持python2,所以我们要用版本管理pyenv来隔离环境. pyenv 根据官方文档的讲解, ...

  9. 关于Gevent的使用指北

    关于Gevent的使用指北 只是看了入门指南,和一个翻译文档.写一下个人读书心得. 其实看完之后,第一个反映就是asyncio这个系统库,感觉gevent现在所做的一些事情是与asyncio很像的,但 ...

随机推荐

  1. Appium 学习三:Appium-Desktop 填坑

    之前使用appium执行自动化脚本,现使用appium-desktop  遇到了一些问题 1.使用name定位的报错   Locator Strategy 'name' is not supporte ...

  2. jsp2

    jsp:实现了静态html中,插入了动态的代码 servlet:动态代码中,插入静态html (jsp代码) <%@ page language="java" content ...

  3. L2-018 多项式A除以B(模拟)

    这仍然是一道关于A/B的题,只不过A和B都换成了多项式.你需要计算两个多项式相除的商Q和余R,其中R的阶数必须小于B的阶数. 输入格式: 输入分两行,每行给出一个非零多项式,先给出A,再给出B.每行的 ...

  4. AUDIOqueue 为什么会播放一段时间就听不到声音

    转自简书:非常有用 AudioQueue缓冲区为空时,那么AudioQueueOutputCallback回调不会再调用 这个其实很好理解,AudioQueue的回调本事就是数据播完了才回调的 Aud ...

  5. node重新加载模块

    delete require.cache[require.resolve('module name')]; var my_module = require('module name');

  6. rancher的微服务运维

    1.安装rancher: rancher官网:https://rancher.com rancher中文官网:https://www.cnrancher.com rancher 2.0 文档:http ...

  7. 转:Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-j8m0mf5q/mysqlclient

    错误场景 第一次部署服务器时mysqlclient安装失败 思考 初步考虑是pip没有升级,最后发现不是这个原因. 解决办法 来源:https://blog.csdn.net/mr_tia/artic ...

  8. 监控服务器配置(五)-----Redis_exporter安装配置

    1.下载redis_exporter安装包(linux版)到 /opt/minitor/redis_exporter . 下载地址:https://download.csdn.net/download ...

  9. 机器学习入门:Linear Regression与Normal Equation -2017年8月23日22:11:50

    本文会讲到: (1)另一种线性回归方法:Normal Equation: (2)Gradient Descent与Normal Equation的优缺点:   前面我们通过Gradient Desce ...

  10. 5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例

    ES5中,一共有9个Array方法 Array.prototype.indexOf Array.prototype.lastIndexOf Array.prototype.every Array.pr ...