自己写的一段日志解析的java程序,比较乱,先记录(小文件):
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import org.json.JSONObject;
public class ParseLog {
private static String VIEWSTRING = "正在查看新闻:";
private static String APPLYSTRING = "写过的新闻";
private static String SEARCHSTRING = "正在搜索新闻:";
private static String USERTAG = "用户:";
/**
* 用戶名,用戶行為,以key-value方式存储
* 用户行为 以json方式存储
*/
public static void readFileByLines(String fileName) {
File file = new File(fileName);
BufferedReader reader = null;
try {
System.out.println("以行为单位读取文件内容,一次读一整行:");
InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "UTF-8");
reader = new BufferedReader(isr);
String tempString = null;
Map<String, Object> map = new HashMap<String, Object>();
// 一次读入一行,直到读入null为文件结束
while ((tempString = reader.readLine()) != null) {
if (tempString.contains(VIEWSTRING)) {
int userindex = tempString.indexOf(USERTAG);
String username = tempString.substring(userindex + 3, tempString.indexOf(",", userindex));
int done = tempString.indexOf(VIEWSTRING);
String ewId = tempString.substring(done + VIEWSTRING.length());
if (username != null && username != "") {
try {
if (map.containsKey(username)) {
JSONObject json = (JSONObject) map.get(username);
if (json.has("view")) {
if (!json.get("view").toString().contains(ewId)) {
json.put("view", json.get("view") + "," + ewId);
}
} else {
json.put("view", ewId);
}
map.put(username, json);
} else {
JSONObject json = new JSONObject();
json.put("view", ewId);
map.put(username, json);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
if (tempString.contains(APPLYSTRING)) {
int userindex = tempString.indexOf(USERTAG);
String username = tempString.substring(userindex + 3, tempString.indexOf(",", userindex));
int done = tempString.indexOf(APPLYSTRING);
String ewId = tempString.substring(done + APPLYSTRING.length());
if (username != null && username != "") {
try {
if (map.containsKey(username)) {
JSONObject json = (JSONObject) map.get(username);
if (json.has("apply")) {
if (!json.get("apply").toString().contains(ewId)) {
json.put("apply", json.get("apply") + "," + ewId);
}
} else {
json.put("apply", ewId);
}
map.put(username, json);
} else {
JSONObject json = new JSONObject();
json.put("apply", ewId);
map.put(username, json);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
if (tempString.contains(SEARCHSTRING)) {
int userindex = tempString.indexOf(USERTAG);
String username = tempString.substring(userindex + 3, tempString.indexOf(",", userindex));
int done = tempString.indexOf(SEARCHSTRING);
String keyword = URLDecoder.decode(tempString.substring(done + SEARCHSTRING.length()), "utf-8");
if (username != null && username != "") {
try {
if (map.containsKey(username)) {
JSONObject json = (JSONObject) map.get(username);
if (json.has("search")) {
if (!json.get("search").toString().contains(keyword.trim())) {
json.put("search", json.get("search") + "," + keyword.trim());
}
} else {
json.put("search", keyword.trim());
}
map.put(username, json);
} else {
JSONObject json = new JSONObject();
json.put("search", keyword.trim());
map.put(username, json);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
reader.close();
Iterator<Entry<String, Object>> it = map.entrySet().iterator();
while (it.hasNext()) {
Entry<String, Object> entry = it.next();
System.out.println(entry.getKey() + "-----------" + entry.getValue());
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
}
public static void main(String[] args) {
ParseLog.readFileByLines("C:\\Users\\lyh\\Desktop\\log");
}
}
分享到:
相关推荐
Java Log Viewer(日志查看器)能够自定义log表达式,具备的功能包括: 1.可以手动重载日志。这样既可以防止自动跟踪日志影响当前关注的内容,又可以在需要时方便地载入最新的日志。 2.对不同级别的日志项着色标注。...
logs中就是为我们日常记录的日志文件,你要对起进行分析记录入表。 这些日志文件名都是有一定规则每小时生成一个。拿附件中的文件来说access_log.2009-04-30.17.log 表示2009年4月30日17时的数据。 记录到数据里对应...
用java写的一个oracle日志查看器源代码,调用oracle数据库的logminer过程。包含一个不错的日历选择面板
Java Log Viewer(日志查看器)能够自定义log表达式,具备的功能包括: 1.可以手动重载日志。这样既可以防止自动跟踪日志影响当前关注的内容,又可以在需要时方便地载入最新的日志。 2.对不同级别的日志项着色标注。...
本文详细解析了Java日志体系的演变历程和关键技术点,帮助开发者和架构师掌握其精髓,优化日志管理。 最初,log4j作为早期流行的日志框架,广泛应用于Java项目中。然而,随着Java平台的发展,出现了多种日志框架,...
本项目采用,瑞民族之光幸(Java)开发硬性条件请【最高,最低,最低限度】将nginx日志格式设置为如下格式log_format main '$remote_addr #$http_x_forwarded_for #$time_local #$status ' '#$ssl_protocol #$ssl_...
这个程序可以用,但是由于调试用的lcm数据涉及到机密,故调试日志文件暂不上传,这个程序可以将lcm保存在日志中的数据抓出来 lcm(Lightweight Communications and Marshalling) 是一组类库(含多种语言如java,c等)...
Log2Graphite 应用程序是纯 Java 应用程序,使用 Java 1.7 进行测试。 多线程,高性能。特征Log2Graphite 支持: 以 1 分钟粒度上传实时指标海关访问.log 格式。 它可以使用 apache / nginx 风
Log4j组件解析3. Layout格式4. Appender输出5. 自定义Logger章节四:JCL1. 快速入门2. 原理解析章节五:Slf4j1. 快速入门2. 绑定日志实现3. 桥接旧日志实现4. 原理解析章节六:Logback1. 快速入门2. 配置文件3. ...
mysql打开bin-log日志后,mysql数据库的非查询操作会将记录保存到bin-log文件中。一般bin-log日志文件不能打开查看的,需要用到mysql的工具进行。假设/mysql/data/目录中存放着二进制文件mysql-bin.000011。需要将...
一个简单的Java库,用于将各种已知的日志文件格式解析为强类型特定于格式的Java对象。 数据进入强类型对象后,便可以更轻松地对大文件进行分析。 当前支持的格式为: Amazon AWS ELB日志 Adobe Experience ...
Apache HTTPD和NGINX访问日志解析器 这是一个Logparsing框架,旨在简化和访问日志文件的解析。 基本思想是,您应该能够拥有一个解析器,您可以通过简单地告诉该行写入了哪些配置选项来构造该解析器。 这些配置选项...
该应用程序基本上是一个日志文件解析器。 另外,它用于搜索在给定时间段内发出n个请求的IP。 如果程序参数中有日志文件,则将日志保存到MySQL。 日志文件是应用程序的可选参数。 如果未提供,则在现有日志中搜索IP...
containerd和CRI-O使用CRI Log格式,该格式略有不同,并且需要进行其他解析才能解析JSON应用程序日志。 我们找不到合适的端到端示例,因此我们从各种GitHub问题中创建了此示例。 缺少某些功能(例如多行日志),...
支持自定义对象的解析处理,将其打印成自己想要的风格。 使用方法: 它可以在任何使用Java、Kotlin开发的Android项目中使用。如果您的项目中只使用Java,也无需额外添加kotlin的配置。 1.tag使用 如果不考虑显示...
纯Java的ChangeLog解析器,用于提取每个版本的更改。 当前仅支持使用Markdown编写的ChangeLogs。 用法 使用以下命令安装节点模块: $ npm i parse-changelog 并使用以下命令解析您的变更日志: var fs = require...
该 Java 库为 Oracle JDK 1.7 和 1.8 生成的 GC 日志提供解析器。 它包括一个命令行实用程序,用于从日志生成 CSV 文件。 您可以将它们加载到您最喜欢的工具中进行分析。 请参阅以下鼓舞人心的文章作为示例 -。 要求...
HotSpot JIT编译器的日志分析器和可视化工具。 JITWatch 视频介绍 我在JITWatch 上的LJC闪电演讲中的 有关说明和屏幕截图,请参见Wiki。 JITWatch用户界面是使用JavaFX构建的。 这包含在Oracle JDK中。 如果您...
这是一个解析器插件,用于解析包含 Java 应用程序堆栈跟踪的虚构Java 应用程序日志。 这个插件只是 Embulk 解析器插件的一个示例。 请根据您的需要修改插件。 概述 插件类型:解析器 猜测支持:否 配置 charset : ...