1. 说明

作为一个程序猿我们常常要做一件事情:获取某个Log文件,从当中找出自己想要的信息。

本文总结了我在工作中使用了哪些工具来分析Log文件获取我想要的信息,我近期几年的工作环境都是server在Linux上,工作机是Windows, 所以我用的工具主要是Linux上的一些命令行工具,当然他们在Windows上也能够用,详细看以下的工具篇。

先声明,我仅仅是很普通的Linux用户,所以假设有些Linux命令或者工具用的不高效,请大家教育我。

题外话:我的观点是作为一个Java程序猿,仅仅须要在自己工作所须要的范围内了解所使用的操作系统就能够了。成为专家固然好,可是不是必要的。譬如:我天天用Windows,可是始终不知道怎样通过编辑组策略或者是注冊表的方式调网络连接数的最大值,反正差点儿全部的优化工具都有这个功能。

2. 工具

  • 连接远程Linuxserver的工具:mRemoteNG官方站点好像被墙了。能够在华军天极之类的下载
  • Windows上运行Linux命令行的工具:Cygwin或者是Git Bash假设你俩个都没有装的话,我的建议是装一个Git Bash。基本够用了,并且安装简单方便。

  • 文本编辑器: vi。 偶尔在Windows下用Notepad++由于普通情况下的Log文件都会有个几十甚至几百M,用vi直接查看比較直接。并且打开比較快。
  • 文本分析: Excel, 只是这次在家里写东西。所以我后面会尝试一下使用金山WPS 中的WPS表格

3. 分析Log

3.1 搜索文本

分析Log首先就是找到你所须要的Log,普通情况下我们所须要的Log是这么定位的

  1. 依据异常信息或者请求信息找到相应的那一行
  2. 依据该行的时间、线程名称、keyword等信息找到上下文中相关的Log

以下我们分别说一下上面这两步应该怎样做

3.1.1 找到相应的那一行,那一些文件

普通情况下我们在開始分析Log的时候会有这些信息辅助我们进行搜索

  • 出错时候的參数
  • 出错时候的异常信息
  • 时间
  • 假设什么信息都没有,就仅仅知道出错了,那么我们能够尝试一下搜索"Error"、"Warn"、"Exception"之类的

3.1.1.1 假设知道Log是在某一个详细的文件的话

我通常是使用vi 仅仅读模式打开该文件(如果该文件名称为access.log)

vi -R access.log

进去后让它显示一下行号:

:set nu

跳到第一行:

gg

或者是

1G

跳到最后一行:

0G

或者是

G

跳到第11行:

11G

从文件头往后面搜索字符串Hello World:

:/Hello World

从文件尾往前搜索字符串Hello World:

:?Hello World

跳到下一个符合搜索条件的地方:

n

跳到上一个符合搜索条件的地方:

N

vi里面用Go的缩写字母g跳来跳去, 字母n是Next的缩写退出vi的命令是:

:q!

3.1.1.2 假设不知道是哪个文件的话

我通常是使用grep命令样例例如以下:把搜索结果打印到屏幕上,用空格键翻页

grep -nR "Hello World" ./*.log | more

把搜索结果打印到文件helloWorld.log中

grep -nR "Hello World" ./*.log > helloWorld.log

3.1.2 找上下文

依照上面的步骤,找到线索了。假设干扰信息不多的话,你上下浏览能够了。那么假设干扰信息较多,我一般通过综合使用下面几种方式来获取自己所须要的不带干扰信息的日志。

  • 依据该请求的线程名称、keyword来过滤出自己所须要的Log我一般使用使用上面的grep命令来做
  • 依据一个分析出来的起始和结束时间(如一个web请求的进入和结果信息的写回时间)来得到该时间段内全部的日志。我一般先使用vi打开,然后找到所须要的内容的第一行的行号和最后一行的行号,然后使用sed命令获取当中的几行。以下的这个命令的结果是把source.log中的第200行到266行的内容保存到result.log文件里。

    sed -n 200,266p source.log > result.log

3.2 日志分析

除了在Log中发现线索之外,有的时候还须要对日志进行批量的分析,我碰到过的比方分析某种错误出现的时间、出现该错误的相关的id等等。须要用到一些统计之类的东西。

3.2.1 简单情况

简单的我一般把每一个场景萃取一行到一个文件里,然后使用wc(别笑,它是word count的缩写)命令来计算行数,例如以下所看到的

wc -l result.log

复杂的我通常是使用Excel或者是金山WPS来进行文件分析。

3.2.2 使用Excel或者金山WPS进行文件分析

  1. 首先是先新建一个工作表
  2. 然后把要分析的文本拷贝进去
  3. 然后重复的使用 *分列* (菜单:数据->分列)功能把日志文件拆分成一个表格
  4. 然后再使用过滤排序数据透视图等功能来进行分析

3.3 其它一些实用的命令

  • 打开一个日志文件。看着它随着系统的执行而不断的更新
tail -f abc.log
  • 同一时候监视多个文件的变化
tail -f ./*.log
  • 看一个文件开头的20行
head -20 abc.log
  • 看一个文件结尾的50行
tail -50 abc.log

Java程序猿修炼之道 之 Logging(3/3) - 怎么分析Log的更多相关文章

  1. Java程序员修炼之道 之 Logging(1/3) - Logback 配置(转)

    转自紫风乱写:http://www.blogjava.net/justfly/archive/2014/08/10/416768.html,建议大家去原处学习 写在前面的话: 作为<Java程序 ...

  2. java程序员修炼之道

    今天在论坛里看到了一位工作10年的java大牛总结的java程序员修炼之道,看完后给出的评价是:字字玑珠,深入人心,猛回头,自己一无是处··· 大牛告诉我们应该好好学习与修炼以下知识与技能 Java语 ...

  3. 《Java程序员修炼之道》

    原子类:java.util.concurrent.atomic 线程锁:java.util.concurrent.locks 对付死锁:boolean acquired = lock.tryLock( ...

  4. java程序员修炼之道——大牛告诉我们应该好好学习与修炼以下知识与技能

    —————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— 一:Java语言学习(对线程(thread),串行化,反射,网络编程,JNI技术, ...

  5. 给Java程序猿们推荐一些值得一看的好书

    学习的最好途径就是看书 "学习的最好途径就是看书",这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处: 1.能出版出来的书一定是经过反复的思考.雕琢和审核的 ...

  6. [转] java书籍(给Java程序猿们推荐一些值得一看的好书 + 7本免费的Java电子书和教程 )

    7本免费的Java电子书和教程 1. Thinking in Java (Third Edition) 本书的作者是Bruce Eckel,它一直都是Java最畅销的免费电子书.这本书可以帮助你系统的 ...

  7. 回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议

    引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...

  8. zx一篇让Java程序猿随时可以翻看的Oracle总结

    一篇让Java程序猿随时可以翻看的Oracle总结 前言:Oracle学习也有十几天了,但是呢,接下来还要学习许多其他的东西,并不能提步不前,所以在此总结了以下Oracle中常用的命令和语句,没有语法 ...

  9. JAVA程序猿怎么才干高速查找到学习资料?

    JAVA程序猿怎么才干高速查找到学习资料? JAVA学习资料在互联网上较为零散,并且大多是英文的.以下介绍3种方式,让程序猿能够高速地找到自己想要的资料. 一.导航站点: 有非常多类似hao123的站 ...

随机推荐

  1. Codeforces 835 F Roads in the Kingdom(树形dp)

    F. Roads in the Kingdom(树形dp) 题意: 给一张n个点n条边的无向带权图 定义不便利度为所有点对最短距离中的最大值 求出删一条边之后,保证图还连通时不便利度的最小值 $n & ...

  2. vue虚拟dom原理

    Virual DOM是用JS对象记录一个dom节点的副本,当dom发生更改时候,先用虚拟dom进行diff,算出最小差异,然后再修改真实dom. vue的virtual dom的diff算法是基于sn ...

  3. OpenNI2安装

    1.Openni2:从官网下载linux用zip压缩包,解压再解压2.终端转到解压目录下,找到install.sh文件,执行$sudo ./install.sh 3.执行后,生成OpenNIDevEn ...

  4. [USACO06NOV]玉米田Corn Fields (状压$dp$)

    题目链接 Solution 状压 \(dp\) . \(f[i][j][k]\) 代表前 \(i\) 列中 , 已经安置 \(j\) 块草皮,且最后一位状态为 \(k\) . 同时多记录一个每一列中的 ...

  5. 搭建自己的YUM源HTTP服务器

    createrepo是linux下的创建仓库的软件包.create是创建的意思,repo是repository的缩写,是仓库的意思.yum(Yellowdog Updater,Modified)主要的 ...

  6. python任意编码转utf8或者unicode

    # encoding: utf-8 ''' Created on 2015年2月8日 @author: 张鹏程 aprial@163.com @copyright: 版权所有, 尊重劳动成功, 转载与 ...

  7. FreeRTOS系列第2篇---FreeRTOS入门指南【转】

    转自:http://blog.csdn.net/zhzht19861011/article/details/49819309 版权声明:本文为博主原创文章,未经博主允许不得转载.联系邮箱:zhzhch ...

  8. 关闭 C4996 警告(_CRT_SECURE_NO_DEPRECATE)

    在使用VC 2005 的开发者会遇到这样的问题,在使用std命名空间库函数的时候,往往会出现类似于下面的警告: warning C4996: strcpy was declared deprecate ...

  9. AJAX中的同步加载与异步加载

    AJAX是四个单词的简写,其中Asynchronous即异步的意思,异步的链接可以同时发起多个,并且不会阻止JS代码执行.与之对应的概念是同步,同步的链接在同一时刻只会有一个,并且会阻止后续JS代码的 ...

  10. 【计算机网络】简单网络管理协议 SNMP

    计算机网络  6.7节学习笔记 SNMP: 管理网络上的对象时,必然会给该对象添加一些软件或硬件,但这种添加必须对原有对象的影响尽量小. SNMP中的管理程序和代理程序按客户-服务器方式工作.管理程序 ...