Azkaban源码分析1----日志保存和获取


Azkaban是一个JavaWeb项目,源码阅读难度相对不大本篇主要介绍Azkaban的日志保存和获取。

闲话不说直接正文!!!!!

 

阅读源码第一步,找到入口类:

Azkaban是一个gradlew项目,从github下载好源码导入idea中,目录为:

azkaban-web-server:里面主要是一些servlet 和web资源,azkaban-exec-server:主要是一些job和flow运行的方法,azkaban-common:主要是操作数据库的类和方法。

 

日志保存的入口类:

日志分为:flow日志 和  job的日志

azkaban-3.62.0\azkaban-exec-server\src\main\java\azkaban\execapp\FlowRunner.java

 

azkaban-3.62.0\azkaban-exec-server\src\main\java\azkaban\execapp\JobRunner.java

当任务运行完毕会分别调用 flowRunner中的closeLogger()方法和finalizeLogFile()方法来完成日志的保存。

这两个方法都调用了同一个方法。

我们进入到这个方法:

azkaban-common/executor/ExecutorLoader.java

 executorLoader是一个接口类:

由azkaban-3.62.0\azkaban-common\src\main\java\azkaban\executor\JdbcExecutorLoader.java实现了接口类中的方法。

我们可以看到uploadLogFile方法调用了executionLogsDao中更新数据库的操作,将日志数据保存到数据库中(会将日志数据进行压缩后进行保存)

 

2.web端日志获取流程

日志获取的入口类:

 

\azkaban-3.62.0\azkaban-web-server\src\main\java\azkaban\webapp\servlet\ExecutorServlet.java

通过servlet获取前台页面发送过来的ajax请求,

ajaxFetchExecFlowLogs()来接收 flow日志的请求。

 

 

ajaxFetchJobLogs来接收获取job日志的请求

ajax

 

 他们都调用了exectorManagerAdapter(azkaban-common\src\main\java\azkaban\executor\ExecutorManagerAdapter.java)接口中的方法来获取日志,

真正实现方法的其实是\azkaban-common\src\main\java\azkaban\executor\ExecutorManager.java 这个类

两个方法都调用了executorLoader接口中的方法,最后调用azkaban-common\src\main\java\azkaban\executor\ExecutionLogsDao.java  中的

fetchLogs()方法来获取日志。
注意:再获取日志是会对获取到的日志进行解压缩,在根据对应的编码格式打印

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM