有时间log太大,刷新太快,如果能定位到某段时间内,然后从服务器上拿下来就方便多了。一来减少传输,二来排查问题也会比较容易些。 测试于:Tomcat 6.0.37 | CentOS 5.7

操作步骤:

首先进入tomat的logs目录
[devnote@devnote ~]$ cd /opt/tomcat/logs/
从catalina.out中截取下午2~3点的日志到devnote用户的主目录中
[devnote@devnote logs]$ sed -n '/2014-06-04 14:00:/,/2014-06-04 15:00:/p' catalina.out > ~/catalina.out.20140604-14
里面的字符串 “2014-06-04 14:00:” 和 “2014-06-04 15:00:” 其实就是能标识你想截取区域开始和结束的字符串,这也是为什么这两个串中时间只精确到了分钟,如果精确到秒,如果日志中就没有出现过,当然就不能定位了。

转自:http://www.devnote.cn/article/207.html


需求:从日志信息中提取特定时间范围内的日志,并将其发送至远程主机上
分析:一般的需求只是以两个特定的时间点做要求,比如说12:00:00到13:00:00这两个准确时间点之间的日志信息,同时日志中肯定是存在这两个时间点的
本需求只是求个范围值,比如说12点到13点之间的日志信息,并不能确定日志中有这两个时间点,也就说有可能只是12:00:01这样的时间点

#!/bin/bash
#scp today's error.log and profler.log to the mailserver
#author:liangaoxin
#date:20101231
<!--more-->
#working directory
pwd=/u01/lgx/temp
#destination's IP
dst=192.168.33.41
#foemat the date
today=`date '+%Y-%m-%d'`

if [ -e app.log.${today} ]
then
###截取6点和8点之间的日志信息,通过来取得时间,如06:00:01,更详细的日志信息格式就不多写了,类似于apache一般的access_log,本脚本也只是个思路而已
start=`cut -c12-19 app.log.{today}|grep -n "..:..:.."|awk -F: '$2<9 && $2>05 {print $1}'|head -n1`
stop=`cut -c12-19 app.log.{today}|grep -n "..:..:.."|awk -F: '$2==9 {print $1}'|head -n1`
sed -n "${start},${stop-1}p" app.log.${today} >app.log.${today}.send
scp -p /u01/log/temp/app.log.${today}.send lgx@${dst}:/home/lgx/$(hostname)/
fi

要是指定特定时间段内日志信息的提取会简单的多,如下
sed -n '/15:32:30/,/16:12:09/p' access_log >log.txt

转自:http://www.aikaiyuan.com/4202.html

sed命令参考:
http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html
Logo

更多推荐