Java實現(xiàn)日志文件關(guān)鍵詞搜索方式
Java日志文件關(guān)鍵詞搜索
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class TryTraverseDemo03 {
public static void main(String[] args) {
// 設(shè)置要搜索的關(guān)鍵詞
String keyword = "TID:5bc8f75f1ad5450dab3127896bed429b.65.16849102400674853";
// 日志文件路徑
String logFilePath = "D:\\log\\home\\xiahui-wms-rfbiz-application\\xiahui-wms-rfbiz-2023-05-24.2.log";
File logFile = new File(logFilePath);
try (BufferedReader br = new BufferedReader(new FileReader(logFile))) {
String line;
int lineNum = 1;
while ((line = br.readLine()) != null) {
if (line.contains(keyword)) { // 如果這一行包含關(guān)鍵詞
System.out.printf("[%d]: %s%n", lineNum, line); // 輸出這一行
}
lineNum++;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}這段Java代碼實現(xiàn)了讀取指定路徑下的日志文件,并在日志文件中搜索指定的關(guān)鍵詞。
具體實現(xiàn)過程如下:
- 1.指定要搜索的關(guān)鍵詞和日志文件路徑;
- 2.創(chuàng)建File對象,表示要讀取的日志文件;
- 3.創(chuàng)建BufferedReader對象,指定字符流讀取日志文件內(nèi)容;
- 4.讀取每一行的內(nèi)容,如果該行包含關(guān)鍵詞,則將該行內(nèi)容輸出到控制臺;
- 5.繼續(xù)讀取下一行,直到讀取到文件末尾;
- 6.關(guān)閉BufferedReader對象,釋放資源。
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class LogSearcher {
public static void main(String[] args) throws ParseException {
String directoryPath = "D:\\log\\home\\xiahui-wms-rfbiz-application";
File directory = new File(directoryPath);
// 獲取目錄下所有的log文件路徑
List<String> logFilePaths = new ArrayList<>();
for (File file : directory.listFiles()) {
if (file.isFile() && file.getName().endsWith(".log")) {
logFilePaths.add(file.getAbsolutePath());
}
}
// 循環(huán)遍歷每個日志文件進行查找
List<String> targetLogs = new ArrayList<>();
for (String logFilePath : logFilePaths) {
try (BufferedReader reader = new BufferedReader(new FileReader(logFilePath))) {
String line;
while ((line = reader.readLine()) != null) {
if (line.contains("5bc8f75f1ad5450dab3127896bed429b.65.16849103054344859")) {
targetLogs.add(line);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
// 對結(jié)果按時間排序
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Collections.sort(targetLogs, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
try {
Date d1 = dateFormat.parse(o1.substring(0, 19)); // 將字符串截取到時間部分,按格式解析成Date類型
Date d2 = dateFormat.parse(o2.substring(0, 19));
return d1.compareTo(d2); // 用Date類型比較時間
} catch (ParseException e) {
e.printStackTrace();
return 0;
}
}
});
// 顯示查找的結(jié)果
System.out.println("Found " + targetLogs.size() + " logs:");
for (String log : targetLogs) {
System.out.println(log);
}
}
}
這段Java代碼實現(xiàn)了在指定目錄下查找所有以“.log”結(jié)尾的日志文件,并從這些日志文件中查找包含指定關(guān)鍵詞的日志,根據(jù)時間進行排序輸出結(jié)果。
具體實現(xiàn)過程如下:
- 1. 指定目錄路徑;
- 2. 創(chuàng)建File對象,表示要查找的目錄;
- 3. 獲取目錄下所有以“.log”為后綴的文件路徑;
- 4. 遍歷每個日志文件,打開文件,按行讀取內(nèi)容,查找包含指定關(guān)鍵詞的日志,并將其保存到targetLogs集合中;
- 5. 關(guān)閉文件讀取流,釋放資源。
- 6. 對找到的日志集合按時間進行排序,時間格式采用“yyyy-MM-dd HH:mm:ss”;
- 7. 輸出找到日志的總數(shù)以及展示日志詳情。
另外在使用該工具類的時候遇到一個問題,當根據(jù)某個關(guān)鍵字進行查詢所對應的日志,當日志數(shù)據(jù)量大的時候,查詢到的日志在控制臺輸出不完整的問題
解決方案
通過Console配置修改來修改,點擊 File ->Settings ->editor - >General->Console 選中如下圖:

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java基于ServletContextListener實現(xiàn)UDP監(jiān)聽
這篇文章主要介紹了Java基于ServletContextListener實現(xiàn)UDP監(jiān)聽,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-12-12
JAVA 16位ID生成工具類含16位不重復的隨機數(shù)數(shù)字+大小寫
這篇文章主要介紹了JAVA 16位ID生成工具類含16位不重復的隨機數(shù)數(shù)字+大小寫,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-02-02
SpringBoot項目創(chuàng)建單元測試的流程步驟
在日常開發(fā)的過程中,對自己的代碼進行單元測試是個非常重要的過程,一方面可以最小范圍的針對一個方法進行測試,提高測試的簡便性以及測試的成本,本篇文章主要是為了總結(jié)一下如何優(yōu)雅的在Springboot項目中使用單元測試去測試功能,需要的朋友可以參考下2024-11-11
如何基于SpringMVC實現(xiàn)斷點續(xù)傳(HTTP)
這篇文章主要介紹了如何基于SpringMVC實現(xiàn)斷點續(xù)傳(HTTP),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-01-01
SpringMVC KindEditor在線編輯器之文件上傳代碼實例
這篇文章主要介紹了SpringMVC KindEditor在線編輯器之文件上傳代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-09-09
SpringBoot應用的打包和發(fā)布實現(xiàn)
本文主要介紹了SpringBoot應用的打包和發(fā)布實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-04-04
SpringBoot實現(xiàn)定時任務動態(tài)管理示例
這篇文章主要為大家介紹了SpringBoot實現(xiàn)定時任務動態(tài)管理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06

