Azkaban作为LinkedIn开源的任务流式管理工具,在工作中很大程度上被用到。但是,由于非国人开发,对中文的支持性很不好。大多数情况下,会出现几种乱码现象: – 执行内置脚本生成log乱码 – 直接command执行中文乱码 – 中文包名乱码等,其中对日常使用影响最大的就是日志乱码问题。不管是调度Hive、DataX还是Java程序,只要日志抛出来中文,中文都是乱码显示,摸索许久,决定从源码入手开始层层解惑。

  根据页面获取日志的接口可以知道方法在 azkaban-web-server项目下package azkaban.webapp.servlet 下的方法handleAJAXAction,如下图 请求参数是fetchExecJobLogs

   对应的处理方法为  ajaxFetchJobLogs(req, resp, ret, session.getUser(), exFlow)

  进入该方法后可以发现返回的data为经过 StringEscapeUtils.escapeHtml格式化过的,这就是引发乱码的原因之一。

  改用commons-lang3下的方法可以解决这个问题,pom.xml增加如下依赖后更新maven项目,将此处StringEscapeUtils.escapeHtml(data.getData())更改为 org.apache.commons.lang3.StringEscapeUtils.escapeHtml3(data.getData())

  <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.7</version>
  </dependency>

  修改后为 

  这样还不够,

 

版权声明:本文为createweb原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/createweb/p/9370503.html