聆听风声 点点滴滴都很珍贵!

logparser日志分析与bat操作


在开始之前先说一下自己的需求,方便自己使用 logparser是一个iis日志分析工具,在使用的工程中用的是命令行,希望通过bat批处理文件来解决一些重复的工作 我们设定一天一个日志文件,在查询的时候按照每天的日志文件进行查询,查询指定的日期的日志文件,我们需要设定查询条件,

  • 查询当天的日志文件
  • 查询指定那一天的日志文件

设置完查询条件,我们再来设置下查询的方式,

  • 设置预设查询条件
  • 设置自定义查询条件

还有查看结果的方式

  • 在控制台查看
  • 把结果保存到文件中

这些是我们要准备做的功能,在开始之前我们先来介绍一下这些应用,首先是bat文件的用处, 批处理(Batch),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。批处理文件的扩展名为bat 或cmd。想要了解更多请自行搜索查看 logparser应用,下载软件移步到官网 安装完后在安装目录有使用手册,全英文手册。虽然我的英文也不怎么样吧

设置查询条件

直接上代码

:setQueryTime
cls
echo ====================
echo *    查询时间      
echo ====================
echo * 编号 ** 介绍     
echo ====================
echo *  01  ** 今天日志 
echo *  02  ** 一天日志 
echo *  03  ** 多天日志 
echo *  0   ** 退出     
echo ====================

set /p queryTime=请输入编号,按Enter确定:
IF %queryTime% LSS 4 (
    IF %queryTime% GEQ 0 (
        goto getQueryTime)
)
echo 您输入有误,请再次输入
pause>nul
goto setQueryTime

目的显示出查询时间有哪些设置

:getQueryTime

if "%queryTime%"=="01" goto today
if "%queryTime%"=="02" goto oneDay
if "%queryTime%"=="03" goto manyDays
if "%queryTime%"=="0" exit
goto :eo

我们设定日志文件名称为u_ex180322.log这种格式 以下是设置今天日志文件的变量

:today
set fileName=u_ex%date:~0,4%%date:~5,2%%date:~8,2%.log
call:setFileName %fileName%
goto :eof

以下是设置用户输入指定日期的日志文件

:oneDay
echo 请输入日期,格式如:20180324
set /p fileName=data=
call:setFileName u_ex%fileName%.log
goto :eof

获取文件的路径

:setFileName
set log=%LogFilePATH%\%~1
call:setQueryMode "%log%"
goto :eof

查询方式

::查询方式
:setQueryMode
cls
echo ====================
echo *    查询方式      
echo ====================
echo * 编号 ** 介绍     
echo ====================
echo *  01  ** 预设查询 
echo *  02  ** 手写查询 
echo *  0   ** 退出     
echo ====================
echo 文件为:"%~1"
echo ====================
set /p queryMode=请输入编号,按Enter确定:
IF %queryMode% LSS 4 (
    IF %queryMode% GEQ 0 (
        goto getQueryMode "%~1")
)
echo 您输入有误,请再次输入
pause>nul
goto setQueryMode

根据条件跳转方法

:getQueryMode
if "%queryMode%"=="01" goto preset "%~1"
if "%queryMode%"=="02" goto handwritten "%~1"
if "%queryMode%"=="0" exit
goto :eof

预设方法,以下预设方法只列出了几种,大家可以根据自己的情况进行修改

:preset
echo  %~1
cls
echo -----------------------------
echo 编号 **  介绍
echo -----------------------------
echo   01 ** 统计各个路径的访问次数
echo   02 ** 统计各个资源类型的访问次数,倒序排列
echo   03 ** 统计客户端比例
echo   04 ** 统计访问路径响应时间,倒序排列
echo -----------------------------
set /p setPreset=请输入预设查询编号:
if "%setPreset%"=="01" (
    set sql="select cs-uri-stem,count(*) from %~1 group by cs-uri-stem"    
)
 if "%setPreset%"=="02" (
    set sql="select EXTRACT_EXTENSION(cs-uri-stem) AS PageType,count(*) from %~1 group by PageType order by PageType desc"    
)
 if "%setPreset%"=="03" (
    set sql="select DISTINCT cs(User-Agent) as IETYPE,count(*) as total,mul(propcount(*),100) as [percent(%)] from %~1 group by IETYPE"    
)
 if "%setPreset%"=="04" (
    set sql="select cs-uri-stem,time-taken from %~1 order by time-taken desc"    
)
call:replace %sql%
call:setBrowsMode "%replaceSql%"
goto :eof

除了预设的查询添加外还可以手动查询,以下只列出部分字段提示

::手写查询
:handwritten
echo 可用字段:
echo 【date】【time】【s-ip】【cs-method】【cs-uri-stem】【cs-uri-query】【s-port】【cs-username】【c-ip】
echo ============================================================================================================
set /p setHandwritten=请输入查询语句:
if "%setHandwritten%"=="" exit
set tableName=%~1
set handwrittenSql="%setHandwritten%"
set handwrittenSql=!handwrittenSql:tableName=%~1!
call:replace %handwrittenSql%
call:setBrowsMode "%replaceSql%"
goto :eof

这是一个字段替换的函数

:replace
set replaceSql=%~1
set replaceSql=%replaceSql:select=SELECT%
set replaceSql=%replaceSql:from=FROM%
set replaceSql=%replaceSql:where=WHERE%
set replaceSql=%replaceSql:group by=GROUP BY%
set replaceSql=%replaceSql:order by=ORDER BY%
set replaceSql=%replaceSql:desc=DESC%
set replaceSql=%replaceSql:asc=ASC%
set replaceSql=%replaceSql:count=COUNT%
goto :eof

设置浏览方式与方法跳转

:setBrowsMode
cls
echo ====================
echo *   浏览方式       
echo ====================
echo * 编号 ** 介绍     
echo ====================
echo *  01  ** 立即查看 
echo *  02  ** 输出到文档
echo *  0  ** 退出
echo ====================
set /p browsMode=请输入编号,按Enter确定:
IF %browsMode% LSS 4 (
    IF %browsMode% GEQ 0 (
        goto getBrowsMode "%~1")
)
echo 您输入有误,请再次输入
pause>nul
goto setBrowsMode

:getBrowsMode
if "%browsMode%"=="01" goto execSee "%~1"
if "%browsMode%"=="02" goto execFile "%~1"
if "%browsMode%"=="0" exit
goto :eof

立即查看

:execSee
%LogParserPATH% "%~1"
pause>nul
goto :eof

保存结果到文件,以下只列出了两种

::输出到文档
:execFile
echo ======================================
echo 查询语句为:"%~1"
echo ======================================
set /p fileType=请输入文件格式,如xml、csv:

if "%fileType%"=="xml" call:outputFileType "%~1" "INTO %date:~0,4%%date:~5,2%%date:~8,2%.xml FROM"
if "%fileType%"=="csv" call:outputFileType "%~1" "INTO %date:~0,4%%date:~5,2%%date:~8,2%.csv FROM"
goto :eof

:outputFileType
set querySql=%~1
set fileName=%~2
set querySql=!querySql:FROM=%fileName%!

set execCommand=%LogParserPATH% -oCodepage:65001 "%querySql%"
%execCommand%
pause>nul
goto :eof

设置的变量,建议放在文件头部

set LogParserPATH="C:\Program Files (x86)\Log Parser 2.2\LogParser"
set LogFilePATH=F:\log\3g.gubing0311.com
  • LogParserPATH为软件的安装目录
  • LogFilePATH为日志的存放目录

文章写的不是很好,观看时若发现有哪里不合理或者错误的地方请留言指出!谢谢


Comments

Content