拉取帆軟的錯誤日志

????日志解析愈魏,強推ELK!
????日志解析想际,強推ELK培漏!
????日志解析,強推ELK胡本!
(有時間我要搭一套 flag+1)
接上文牌柄,我這邊接了個BI項目,就是帆軟的BI項目侧甫,但是發(fā)現報表的錯誤日志里面實在是太多了珊佣,發(fā)現帆軟的決策報表里有個查詢的口子,于是寫了個接口調用工具拉取帆軟的報錯信息

搭建restTemplate連接池

        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.10</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.6</version>
        </dependency>
        <dependency>

我用的boot版本是2.1.5
創(chuàng)建連接池

@Configuration
public class RestTemplateConfiguration {

    /**
     * 返回RestTemplate
     * @param factory
     * @return
     */
    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory factory) {

        RestTemplate restTemplate = new RestTemplate(factory);
        return restTemplate;
    }

    /**
     * ClientHttpRequestFactory接口的另一種實現方式(推薦使用)披粟,即:
     * HttpComponentsClientHttpRequestFactory:底層使用Httpclient連接池的方式創(chuàng)建Http連接請求
     * @return
     */
    @Bean
    public HttpComponentsClientHttpRequestFactory httpComponentsClientHttpRequestFactory() {
        //Httpclient連接池咒锻,長連接保持30秒
        PoolingHttpClientConnectionManager connectionManager =
                new PoolingHttpClientConnectionManager(30, TimeUnit.SECONDS);

        //設置總連接數
        connectionManager.setMaxTotal(1000);
        //設置同路由的并發(fā)數
        connectionManager.setDefaultMaxPerRoute(1000);

        //設置header
        List<Header> headers = new ArrayList<Header>();
        headers.add(new BasicHeader("User-Agent",
                "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"));
        headers.add(new BasicHeader("Accept-Encoding", "gzip, deflate"));
        headers.add(new BasicHeader("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3"));
        headers.add(new BasicHeader("Connection", "keep-alive"));
        headers.add(new BasicHeader("RequestType", "queue"));

        //創(chuàng)建HttpClient
        HttpClient httpClient = HttpClientBuilder.create()
                .setConnectionManager(connectionManager)
                .setDefaultHeaders(headers)
                .setRetryHandler(new DefaultHttpRequestRetryHandler(3, true)) //設置重試次數
                .setKeepAliveStrategy(new DefaultConnectionKeepAliveStrategy()) //設置保持長連接
                .build();

        //創(chuàng)建HttpComponentsClientHttpRequestFactory實例
        HttpComponentsClientHttpRequestFactory requestFactory =
                new HttpComponentsClientHttpRequestFactory(httpClient);

        //設置客戶端和服務端建立連接的超時時間
        requestFactory.setConnectTimeout(20000);
        //設置客戶端從服務端讀取數據的超時時間
        requestFactory.setReadTimeout(20000);
        //設置從連接池獲取連接的超時時間,不宜過長
        requestFactory.setConnectionRequestTimeout(200);
        //緩沖請求數據守屉,默認為true惑艇。通過POST或者PUT大量發(fā)送數據時,建議將此更改為false拇泛,以免耗盡內存
        requestFactory.setBufferRequestBody(false);

        return requestFactory;
    }
}

不用連接池更快敦捧,反正也是個小工具

模擬登錄须板,抓起錯誤信息

    public List<String> getCookie(){
        HttpHeaders headers = new HttpHeaders();
        MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();      //map里面是請求體的內容
        map.add("fr_username", PASSWORD);
        map.add("fr_password",PASSWORD);
        headers.setContentType(MediaType.parseMediaType("application/x-www-form-urlencoded; charset=UTF-8"));
        HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers);
        ResponseEntity<String> response = restTemplate.postForEntity(LOGIN_URL, request, String.class);       //地址替換為自己的
        return response.getHeaders().get("Set-Cookie");
    }

拿到cookie信息后,獲取總量信息

    /**
     * 保存組Group
     */
    @Test
    public void getTotal(){
        HttpHeaders headers = new HttpHeaders();
        List<String> cookies = getCookie();
        headers.put(HttpHeaders.COOKIE,cookies);        //將cookie存入頭部
        MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();      //請求體給予內容
        map.add("pn", "1");        //應用名稱
        map.add("pageCount", "10");      //執(zhí)行器名稱
        map.add("startTime", START_DATE);          //排序方式
        map.add("endTime", END_DATE);        //注冊方式 :  0為
        HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers);
        ResponseEntity<String> response = restTemplate.postForEntity(ERROR_INFO_URL, request, String.class);
        if(!StringUtils.isEmpty(response.getBody())){
            JSONObject jsonObject = JSONObject.parseObject(response.getBody());
            int totalPage = Integer.parseInt(jsonObject.get("totalpages").toString());
            List<ErrorEntity>  errorEntityList = new ArrayList<>();
            if(totalPage>1){
                for(int i =1;i< totalPage;i++){
                    getErrorInfo(i,errorEntityList);
                }
            }else{
                errorEntityList = JSONArray.parseArray(jsonObject.get("items").toString(),ErrorEntity.class);
            }
            EasyExcel.write(result +"180_FR_ERROR_" + START_DATE + ".xlsx", ErrorEntity.class).sheet(START_DATE).doWrite(errorEntityList);
        }
    }

獲取分頁信息后這里就是循環(huán)調用的過程了

    /**
     * 保存組Group
     */
    public void getErrorInfo(Integer page,List<ErrorEntity> errorEntities){
        HttpHeaders headers = new HttpHeaders();
        List<String> cookies = getCookie();
        headers.put(HttpHeaders.COOKIE,cookies);        //將cookie存入頭部
        MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();      //請求體給予內容
        map.add("pn", page.toString());        //應用名稱
        map.add("pageCount", "10");      //執(zhí)行器名稱
        map.add("startTime", START_DATE);          //排序方式
        map.add("endTime", END_DATE);        //注冊方式 :  0為
        HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers);
        ResponseEntity<String> response = restTemplate.postForEntity(ERROR_INFO_URL, request, String.class);
        if(!StringUtils.isEmpty(response.getBody())){
            JSONObject jsonObject = JSONObject.parseObject(response.getBody());
            errorEntities.addAll(JSONArray.parseArray(jsonObject.get("items").toString(),ErrorEntity.class));
        }
    }

進行文件封裝

1576674727210.jpg
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末兢卵,一起剝皮案震驚了整個濱河市习瑰,隨后出現的幾起案子,更是在濱河造成了極大的恐慌秽荤,老刑警劉巖甜奄,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異窃款,居然都是意外死亡课兄,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門晨继,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烟阐,“玉大人,你說我怎么就攤上這事紊扬⊙亚眩” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵餐屎,是天一觀的道長檀葛。 經常有香客問我,道長腹缩,這世上最難降的妖魔是什么屿聋? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮藏鹊,結果婚禮上润讥,老公的妹妹穿的比我還像新娘。我一直安慰自己盘寡,他們只是感情好楚殿,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宴抚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪甫煞。 梳的紋絲不亂的頭發(fā)上菇曲,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機與錄音抚吠,去河邊找鬼常潮。 笑死,一個胖子當著我的面吹牛楷力,可吹牛的內容都是我干的喊式。 我是一名探鬼主播孵户,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼岔留!你這毒婦竟也來了夏哭?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤献联,失蹤者是張志新(化名)和其女友劉穎竖配,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體里逆,經...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡进胯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了原押。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胁镐。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖诸衔,靈堂內的尸體忽然破棺而出盯漂,到底是詐尸還是另有隱情,我是刑警寧澤署隘,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布宠能,位于F島的核電站,受9級特大地震影響磁餐,放射性物質發(fā)生泄漏违崇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一诊霹、第九天 我趴在偏房一處隱蔽的房頂上張望羞延。 院中可真熱鬧,春花似錦脾还、人聲如沸伴箩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嗤谚。三九已至,卻和暖如春怔蚌,著一層夾襖步出監(jiān)牢的瞬間巩步,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工桦踊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留椅野,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像竟闪,于是被迫代替她去往敵國和親离福。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內容