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. HDU 1054树形DP入门

    Strategic Game Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  2. 使用jdbc连接oracle数据库时遇到的一些问题

    第一个问题:驱动名称错误 错误截图如下: 从错误提示可以看出,oracle少写了一个'a',手误对程序员来说是经常发生的事,有时能够及时发现纠错,有时就容易忽略. 建议大家将写好的测试无误的保存起来, ...

  3. 开启和关闭mysql服务

    @echo offfor /f "skip=3 tokens=4" %%i in ('sc query MySQLa') do set "zt=%%i" &am ...

  4. ubuntu xampp

      1.下载:首先通过wget下载 xampp linux 1.7.3a版本,地址为http://sourceforge.net/projects/xampp/files/XAMPP%20Linux/ ...

  5. vim编辑器快捷运用

    vim下可以使用常用的箭头键 但是 还有其它键可以让你更快的达到目标 hjkl 这是代替箭头键功能的 H M L 跳到屏幕的顶上 中间 下方 w 跳到下一个单词的开始e 跳到单词的结束b 向后跳 gg ...

  6. java IO的字节流和字符流及其区别

    1. 字节流和字符流的概念    1.1 字节流继承于InputStream    OutputStream,    1.2 字符流继承于InputStreamReader    OutputStre ...

  7. AngularJS 作用域与数据绑定机制

    AngularJS 简介 AngularJS 是由 Google 发起的一款开源的前端 MVC 脚本框架,既适合做普通 WEB 应用也可以做 SPA(单页面应用,所有的用户操作都在一个页面中完成).与 ...

  8. [ CodeVS冲杯之路 ] P1044

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/1044/ 机房连续断网,搞得现在才能上博客…… 很经典的DP题,把问题转换一下就是分别求最不降序列和最长上升序列 f[i ...

  9. DataTable 去重合并

    //合并 dt.Merge(dt2); //去重 dt = dt.AsDataView().ToTable(true);

  10. python描述符的应用

    使用描述符为python实现类型检测 class Typed: def __get__(self, instance, owner): print(instance) print(owner) def ...