㈠ java日志分析
File,socket完善支持远程文件读取,这没问题的;
日志文件如果很庞大,可以分割日志文件,按合适的规则建立新日志文件,没有必要放在单个文件吧
㈡ 如何用java分析 tomcat访问日志
java代码中可以通入如下代码调用Linux命令:
Runtime runTime = Runtime.getRuntime();
Process pro = runTime.exec( new String[]{"/bin/sh","-c", command});
InputStream fis = pro.getInputStream();
InputStreamReader isr = new InputStreamReader(fis,encode);
BufferedReader br = new BufferedReader(isr);
String line;
StringBuilder build = new StringBuilder();
while ((line = br.readLine()) != null) {
build.append(line+"\r\n");
}
通过返回值进行具体的分析。
㈢ 怎么用java读取windows系统日志
您好,很高兴为您解答。
获取相关信息的简单的方法
importjava.io.*;
importcom.sun.management.OperatingSystemMXBean;
importsun.management.ManagementFactory;
publicclassTst{
publicstaticStringpt="D:\abc.txt";
publicTst(){
}
publicstaticvoidmain(String[]args)throwsException{
//free和use和total均为KB
longfree=0;
longuse=0;
longtotal=0;
intkb=1024;
Runtimert=Runtime.getRuntime();
total=rt.totalMemory();
free=rt.freeMemory();
use=total-free;
System.out.println("系统内存已用的空间为:"+use/kb+"MB");
System.out.println("系统内存的空闲空间为:"+free/kb+"MB");
System.out.println("系统总内存空间为:"+total/kb+"MB");
OperatingSystemMXBeanosmxb=(OperatingSystemMXBean)
ManagementFactory.getOperatingSystemMXBean();
longphysicalFree=osmxb.getFreePhysicalMemorySize()/kb;
longphysicalTotal=osmxb.getTotalPhysicalMemorySize()/kb;
longphysicalUse=physicalTotal-physicalFree;
Stringos=System.getProperty("os.name");
System.out.println("操作系统的版本:"+os);
System.out.println("系统物理内存已用的空间为:"+physicalFree+"MB");
System.out.println("系统物理内存的空闲空间为:"+physicalUse+"MB");
System.out.println("总物理内存:"+physicalTotal+"MB");
//获得线程总数
ThreadGroupparentThread;
for(parentThread=Thread.currentThread().getThreadGroup();
parentThread
.getParent()!=null;parentThread=
parentThread.getParent())
;
inttotalThread=parentThread.activeCount();
System.out.println("获得线程总数:"+totalThread);
}
}
// 3.操作系统信息
//a)取到当前操作系统的名称:
publicStringgetPlatformName(){
Stringhostname="";
try
{
hostname=InetAddress.getLocalHost().getHostName();
}catch
(Exceptionexc){
Sigarsigar=newSigar();
try{
hostname=
sigar.getNetInfo().getHostName();
}catch(SigarExceptione)
{
hostname="localhost.unknown";
}finally
{
sigar.close();
}
}
returnhostname;
}
//b)取当前操作系统的信息
publicvoidtestGetOSInfo(){
OperatingSystemOS=
OperatingSystem.getInstance();
//操作系统内核类型如:
386、486、586等x86
System.out.println("OS.getArch()="+
OS.getArch());
System.out.println("OS.getCpuEndian()="
+OS.getCpuEndian());//
System.out.println("OS.getDataModel()="
+OS.getDataModel());//
//系统描述
System.out.println("OS.getDescription()
="+OS.getDescription());
System.out.println("OS.getMachine()="
+OS.getMachine());//
//操作系统类型
System.out.println("OS.getName()="+
OS.getName());
System.out.println("OS.getPatchLevel()="
+OS.getPatchLevel());//
//操作系统的卖主
System.out.println("OS.getVendor()
="+OS.getVendor());
//
卖主名称
System.out
.println("OS.getVendorCodeName()="
+OS.getVendorCodeName());
//
操作系统名称
System.out.println("OS.getVendorName()="
+OS.getVendorName());
//
操作系统卖主类型
System.out.println("OS.getVendorVersion()="
+OS.getVendorVersion());
//
操作系统的版本号
System.out.println("OS.getVersion()="
+OS.getVersion());
}
// 4.资源信息(主要是硬盘)
//
a)取硬盘已有的分区及其详细信息(通过sigar.getFileSystemList()来获得FileSystem列表对象,然后对其进行编历):
public
voidtestFileSystemInfo()throwsException{
Sigarsigar=new
Sigar();
FileSystemfslist[]=sigar.getFileSystemList();
//Stringdir
=System.getProperty("user.home");//当前用户文件夹路径
for(inti=0;i<
fslist.length;i++){
System.out.println(" ~~~~~~~~~~"+i
+"~~~~~~~~~~");
FileSystemfs=fslist[i];
//
分区的盘符名称
System.out.println("fs.getDevName()="
+fs.getDevName());
//分区的盘符名称
System.out.println("fs.getDirName()=
"+fs.getDirName());
System.out.println("fs.getFlags()="+
fs.getFlags());//
//文件系统类型,比如
FAT32、NTFS
System.out.println("fs.getSysTypeName()="
+fs.getSysTypeName());
//
文件系统类型名,比如本地硬盘、光驱、网络文件系统等
System.out.println("fs.getTypeName()="
+fs.getTypeName());
//文件系统类型
System.out.println("fs.getType()="
+fs.getType());
FileSystemUsageusage=null;
try{
usage=
sigar.getFileSystemUsage(fs.getDirName());
}catch(SigarExceptione)
{
if(fs.getType()==2)
throw
e;
continue;
}
switch(fs.getType()){
case0://
TYPE_UNKNOWN:未知
break;
case1://
TYPE_NONE
break;
case2://TYPE_LOCAL_DISK:本地硬盘
//
文件系统总大小
System.out.println("Total="+usage.getTotal()+
"KB");
//文件系统剩余大小
System.out.println("Free="+usage.getFree()
+"KB");
//文件系统可用大小
System.out.println("Avail="
+usage.getAvail()+"KB");
//文件系统已经使用量
System.out.println("Used
="+usage.getUsed()+"KB");
doubleusePercent=usage.getUsePercent()*
100D;
//文件系统资源的利用率
System.out.println("Usage="+usePercent
+"%");
break;
case3://TYPE_NETWORK:网络
break;
case
4://TYPE_RAM_DISK:闪存
break;
case5://TYPE_CDROM
:光驱
break;
case6://TYPE_SWAP
:页面交换
break;
}
System.out.println("DiskReads="
+usage.getDiskReads());
System.out.println("DiskWrites="
+usage.getDiskWrites());
}
return;
}
如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】
希望我的回答对您有所帮助,望采纳!
~ O(∩_∩)O~
㈣ java怎么解析syslog服务器的日志
设置定时任务 定时到其他机器去取 比如 ftp 登陆后 get 或者其他机器主动 put到syslog主机就可以了
㈤ java定时读取日志文件
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.io.ByteArrayInputStream;
class Reader implements Runnable {
Reader(String filename) {
this.filename = filename;
}
private String filename;
private long filelength = 0;
private int count=0;
@Override
public void run() {
while (true) {
try {
File f = new File(filename);
long nowlength = f.length();
long readlength = nowlength - filelength;
if (readlength == 0) {
Thread.sleep(1000);
continue;
}
RandomAccessFile rf = new RandomAccessFile(f, "r");
// 移动文件指针到上次读的最后
rf.seek(filelength);
filelength=nowlength;
byte[] b = new byte[(int) readlength];
rf.read(b, 0, b.length);
rf.close();
BufferedReader br=new BufferedReader(new InputStreamReader(new ByteArrayInputStream(b)));
String str=null;
count++;
System.out.println("第"+count+"次读到的内容:");
while((str=br.readLine())!=null){
System.out.println(str);
}
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class Writer implements Runnable{
Writer(String filename) {
this.filename = filename;
}
private String filename;
private int count=0;
@Override
public void run() {
while (count++<100){
try {
PrintWriter pw=new PrintWriter(new FileWriter(filename,true));
pw.append(""+count).append("\t").append(""+System.currentTimeMillis()).append("写入的内容").append("\r\n");
pw.close();
Thread.sleep(100);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class ReadFileFromTrail {
public static void main(String[] args) {
Reader reader=new Reader("d:\\test.log");
Writer writer=new Writer("d:\\test.log");
new Thread(reader).start();
new Thread(writer).start();
}
}
㈥ java正则表达式解析Mysql数据库错误日志
System.out.println( new ReadSingleLineNumber().test2());
}
MySqlLog test2(){
String log = "2018-03-21T13:46:01.185376Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).";
String[] head = log.substring(0, log.indexOf(']') + 1).split(" ");
return new MySqlLog(head[0].trim(), Integer.parseInt(head[1].trim()), head[2].trim().substring(head[2].trim().indexOf('[') + 1, head[2].trim().indexOf(']')), log.substring(log.indexOf(']') + 2).trim());
}
class MySqlLog{
String time;
int index;
String level;
String msg;
public MySqlLog(String time, int index, String level, String msg) {
this.time = time;
㈦ java来解析日志 文件有什么好的思路
你可以使用log4j,第一次用可能需要了解一下相关配置,肯定比你自己写一个功能强大很多,而且已很成熟。
比如:文本文件日志,数据库日志,邮件发送日志,http发送日志,等详细可以看下log4j的appener
㈧ JAVA解析日志文件!怎么解析啊
SAXReader reader = new SAXReader(); Document document = reader.read(file.getInputStream()); Element root document.getRootElement();
Element header = root.element("RequestData");
在根据节点名称逐步获取
㈨ 怎么用就java 做日志分析啊
日志分2种,
一种是存DB的,在db里存各种操作记录,访问记录等等,是存在许多表里的记录。
另一种是存文件的,记录的是服务器输出的log信息。
看你有统计数据的需求应该去分析DB里的日志表,而不是去分析日志文件。你把需求理解错了
㈩ 怎样分析java线程堆栈日志
itjobJava老师讲过:1) 线程堆栈概述及基础知识
2) 线程堆栈的生成原理以及相关工具
3) 不同JVM线程堆栈的格式的差异(Sun HotSpot、IBM JRE、Oracal JRockit)
4) 线程堆栈日志介绍以及解析方法
5) 线程堆栈的分析和相关的技术
6) 常见的问题模板(线程竟态、死锁、IO调用挂死、垃圾回收/OutOfMemoryError问题、死循环等)
7) 线程堆栈问题实例分析
我希望这一系列的培训能给你带来确实的帮助,所以请持续关注每周的文章更新。
但是如果我在学习过程中有疑问或者无法理解文章中的内容该怎么办?
不用担心,把我当做你的导师就好。任何关于线程堆栈的问题都可以咨询我(前提是问题不能太low)。请随意选择下面的几种方式与我取得联系:
1) 直接本文下面发表评论(不好意思的话可以匿名)
2) 将你的线程堆栈数据提交到Root Cause Analysis forum
3) 发Email给我,地址是 @[email protected]
能帮我分析我们产品上遇到的问题么?
当然可以,如果你愿意的话可以把你的堆栈现场数据通过邮件或论坛 Root Cause Analysis forum发给我。处理实际问题是才是学习提升技能的王道。
我真心期望大家能够喜欢这个培训。所以我会尽我所能去为你提供高质量的材料,并回答大家的各种问题。
在介绍线程堆栈分析技术和问题模式之前,先要给大家讲讲基础的内容。所以在这篇帖子里,我将先覆盖到最基本的内容,这样大家就能更好的去理解JVM、中间件、以及Java EE容器之间的交互。
Java VM 概述
Java虚拟机是Jave EE 平台的基础。它是中间件和应用程序被部署和运行的地方。
JVM向中间件软件和你的Java/Java EE程序提供了下面这些东西:
– (二进制形式的)Java / Java EE 程序运行环境
– 一些程序功能特性和工具 (IO 基础设施,数据结构,线程管理,安全,监控 等等.)
– 借助垃圾回收的动态内存分配与管理
你的JVM可以驻留在许多的操作系统 (Solaris, AIX, Windows 等等.)之上,并且能根据你的物理服务器配置,你可以在每台物理/虚拟服务器上安装1到多个JVM进程.
JVM与中间件之间的交互
下面这张图展示了JVM、中间件和应用程序之间的高层交互模型。
如你所见,标准Java EE应用程序的线程的分配实在中间件内核与JVM之间完成的。(当然也有例外,应用程序可以直接调用API来创建线程,这种做法并不常见,而且在使用的过程中也要特别的小心)
同时,请注意一些线程是由JVM内部来进行管理的,典型的例子就是垃圾回收线程,JVM内部使用这个线程来做并行的垃圾回收处理。
因为大多数的线程分配都是由Java EE容器完成的,所以能够理解和认识线程堆栈跟踪,并能从线程堆栈数据中识别出它来,对你而言很重要. 这可以让你能够快速的知道Java EE容器正要执行的是什么类型的请求.
从一个线程转储堆栈的分析角度来看,你将能了解从JVM发现的线程池之间的不同,并识别出请求的类型.
最后一节会向你提供对于HotSop VM而言什么是JVM线程堆栈的一个概述,还有你将会遇到的各种不同的线程. 而对 IBM VM 线程堆栈形式详细内容将会在第四节向你提供.
请注意你可以从根本原因分析论坛获得针对本文的线程堆栈示例.
JVM 线程堆栈——它是什么?
JVM线程堆栈是一个给定时间的快照,它能向你提供所有被创建出来的Java线程的完整清单.