首页 > 系统相关 >如何通过Java读取到Windows系统日志evtx文件

如何通过Java读取到Windows系统日志evtx文件

时间:2023-07-04 11:14:37浏览次数:53  
标签:evtx 调用 Java 文件 系统日志 日志 csv LogParser

近日公司有个需求,需要调研如何使用Java来读取Windows日志文件(类型:应用程序,安全,Setup,系统)

一番调研以后,在仅使用java的基础上系统日志文件似乎不太可能(就个人调研结果来看),再通过多渠道查询(百度、chargpt),找到2个可能的实现的方案:

1、使用Java来调用C++方法

JNA(Java Native Access)是可以让Java调用C++生成的DLL(动态链接库),将C++中的方法,以Java接口的方式来实现。
注:该方法理论是是可行的,但编者没有实践。。。

2、使用第三方工具来实现,微软的日志分析工具-LogParser

2.1 实现思路:

在本地安装LogParser,Java代码通过调用本机命令行的方式,调用LogParser,然后把分析后的结果,以csv的方式输出到文件中(LogParser可选多种输出方式),然后java再读取csv文件内容即可拿到日志信息。

2.2 Java调用命令行的代码
try {
    String logParserPath = "D:\\Program Files (x86)\\Log Parser 2.2\\LogParser.exe";
    ProcessBuilder processBuilder = new ProcessBuilder(logParserPath, "-i:EVT", "-o:csv", "SELECT * INTO D:\\output.csv FROM D:\\Security.evtx");
    Process process = processBuilder.start();
    process.waitFor();
} catch (IOException | InterruptedException e) {
    e.printStackTrace();
}

其中:D:\output.csv 为存储输出结果的文件地址,D:\Security.evtx为日志文件

2.3、 关于LogParser的一些使用文档信息

2.3.1:Log Parser的日志可以通过SQL进行查询

sql字段:

 EventLog(S)       RecordNumber(I)   TimeGenerated(T) 
 TimeWritten(T)    EventID(I)        EventType(I) 
 EventTypeName(S)  EventCategory(I)  EventCategoryName(S) 
 SourceName(S)     Strings(S)        ComputerName(S) 
 SID(S)            Message(S)        Data(s) 

S:String 数组

调用格式:

EXTRACT_TOKEN(EventTypeName, 0, '|') )
  EventTypeName:字段名
  0:顺序,从0开始
  |:分隔符

T:Time。时间类
I:intger。整数类

T和I二者都是直接调用:

  SELECT 
    TO_DATE(TimeGenerated), 
    RecordNumber,
    TO_UPPERCASE(EXTRACT_TOKEN(EventTypeName, 0, '|')), SourceName 
  FROM System

字段解析:
RecordNumber:日志记录编号从0开始
TimeGenerated:事件生成时间
TimeWritten:事件记录时间
EventID:事件ID
EventType:事件类型
Strings:字符串数组,应该对应者日志中的EventData,每个事件包含的信息应该不一样

这里只罗列了一部分字段,还有其它字段大家按需了解使用即可。

写在最后:

  • 此贴为编者自己记录所用,仅供参考
  • 写的比较乱,如有笔误,请指正
  • 未完待续

标签:evtx,调用,Java,文件,系统日志,日志,csv,LogParser
From: https://www.cnblogs.com/zouqf/p/17525181.html

相关文章

  • Java并发工具包详解
    针对并发编程,Java提供了很多并发工具类供我们使用,下面我们详细介绍一下。SemaphoreSemaphore,现在普遍翻译为“信号量”,以前也曾被翻译成“信号灯”,因为类似现实生活里的红绿灯,车辆能不能通行,要看是不是绿灯。同样,在编程世界里,线程能不能执行,也要看信号量是不是允许。信号量模型......
  • Java 中使用 OkHttpClent 请求接口 get方式 post方式
    学习记录,不喜勿喷什么是OkHttp一般在Java平台上,我们会使用ApacheHttpClient作为Http客户端,用于发送HTTP请求,并对响应进行处理。比如可以使用http客户端与第三方服务(如SSO服务)进行集成,当然还可以爬取网上的数据等。OKHttp与HttpClient类似,也是一个Http客户端,提供了对HTTP......
  • Java异常处理机制及Result最佳实践
    从jvm层看待异常处理机制1.当方法抛出异常时,首先会在当前方法的异常表中查找符合的异常处理程序2.如果找到匹配的异常处理程序,则继续在该异常处理程序中继续执行逻辑3.如果找不到匹配的,则弹出当前栈帧即结束当前方法的执行,让上一层调用者在其异常表中寻找匹配的异常处......
  • Java--大数运算时的溢出问题
    Java--大数运算时的溢出问题一、前言​JDK7新特性,数字之间可以用下划线进行分割,便于阅读。二、代码示例publicclassDemo01{publicstaticvoidmain(String[]args){intmoney=10_0000_0000;intyears=20;inttotal1=money......
  • Java学习第一天 / 常用的DOS命令
     #盘符命令盘名+:#查看当前目录下多有文件dir#切换目录cd(changedirectory)#回上一个步骤cd..#清理屏幕cls(clearscreen)#退出终端exit#查看电脑IPipconfig#打开应用calcmspaintnotepad#ping命令ping+......
  • JavaSE
    Java基本数据类型Java提供了八种基本类型,包括六种数字,一种字符,一种布尔:publicclassTest{publicstaticvoidmain(String[]args){inti=8;System.out.println(i);//8System.out.println(i/3);//2(int->int)Floatf=......
  • 【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引
     目录 【Java全栈学习路线】前言目录一、JavaSE基础二、JavaWeb三、JavaEE四、Linux运维五、分布式与微服务六、大数据开发  一、JavaSE基础 JavaSE基础知识的学习是为了后边走的更远~文章链接1.计算机基础【JavaSE】之计算机基础2.Java入......
  • 桶排序算法及其Java实现
    桶排序是一种排序算法,它的原理是将数组分到有限数量的桶里,每个桶再个别排序,最后依次把各个桶中的记录列出来。桶排序的效率取决于映射函数的选择和桶的数量。桶排序适用于数据分布比较均匀,或者比较侧重于区间数量的情况。下面是我为你写的博客正文,希望对你有帮助:桶排序算法及其J......
  • 汇报 第二周第二天 JAVA方法
    今日所学:掌握定义Java方法时的语法格式及各个参数的作用;掌握方法的有无返回值的两种情况的处理方式;掌握方法的参数是值参数、引用参数或者不定长参数的使用方法;明确方法的重载和使用方法 明日计划:JAVA中的面向对象编程遇到困难:练车真坐牢......
  • JavaScript(四)面向对象
    创建对象prototype对象JavaScript对每个创建的对象都会设置一个原型,指向它的原型对象。当我们用obj.xxx访问一个对象的属性时,JavaScript引擎先在当前对象上查找该属性,如果没有找到,就到其原型对象上找,如果还没有找到,就一直上溯到Object.prototype对象,最后,如果还没有找到,就只能返......