engineer diary

エンジニアの日々の感想です

便利ツール①「アプリケーションログの監視」

業務で使用している自作ツールのご紹介です。
ツールと言えるほどのものではありませんが...

1企業様に幾つか業務システムを導入しています。
(APサーバーは弊社サーバーで管理)
システム操作でエラーが発生した際、ログを出力するようにしているのですが、
こまめにログを確認するのも手間だったので、
ログファイルを監視し、エラーが発生した際、自動で通知するような仕組みを実装しました。
今どきのやり方ではありませんが、ご参考にどうぞ。

setlocal enabledelayedexpansion

net use Z: \\{サーバー名}\{対象ドライブ} {パスワード} /user:{ユーザ名}

cd Z:\{サーバー側ログフォルダ}\

IF EXIST Z:\{サーバー側ログフォルダ}\{サーバー側ログファイル名} (
    for %%i in (Z:\{サーバー側ログフォルダ}\{サーバー側ログファイル名}) do set FILENEW=%%~zi
    IF EXIST "{ローカル側ログフォルダ}\{ローカル側ログファイル名}" (
        for %%i in ({ローカル側ログフォルダ}\{ローカル側ログファイル名}) do set FILEOLD=%%~zi
    ) ELSE (
        set FILEOLD=0
    )

    if not !FILENEW!==!FILEOLD! ( 
        call :FILESIZE "Z:\{サーバー側ログフォルダ}\{サーバー側ログファイル名}"
    ) 
)

net use Z: /delete

exit

:FILESIZE
    if not %~z1==0 (
        copy /y %1 {ローカル側ログフォルダ}\{ローカル側ログファイル名}
        mshta vbscript:execute("MsgBox(""ログを確認せよ""):close")
        EXPLORER {ローカル側ログフォルダ}\
    )
    exit /b


ローカル側に、監視用のフォルダを作ります。
ここでは、『D:\エラー監視』とします。
サーバー側は、『apserver』というサーバー名で、『D:\log』に『AP.log』というログファイルが出力されているものとします。
サーバーのユーザー/パスワードは以下とします。
ユーザー名:administrator
パスワード:password

上記を例とすると、以下のようなプログラムになります。

setlocal enabledelayedexpansion

net use Z: \\apserver\d$ password /user:administrator

cd Z:\d$\log\

IF EXIST Z:\d$\log\AP.log (
    for %%i in (Z:\d$\log\AP.log) do set FILENEW=%%~zi
    IF EXIST "D:エラー監視\AP.log" (
        for %%i in (D:エラー監視\AP.log) do set FILEOLD=%%~zi
    ) ELSE (
        set FILEOLD=0
    )

    if not !FILENEW!==!FILEOLD! ( 
        call :FILESIZE "Z:\d$\log\AP.log" %1 
    ) 
)

net use Z: /delete

exit

:FILESIZE
    if not %~z1==0 (
        copy /y %1 D:エラー監視\AP.log 
        mshta vbscript:execute("MsgBox(""ログを確認せよ""):close")
        EXPLORER D:エラー監視\
    )
    exit /b

ローカル側のログファイルと、サーバー側のログファイルを比較し、
差分があれば、メッセージボックスが起動します。
起動後は、ローカル側のログファイルを置き換えます。

このbatファイルを、タスクスケジューラーで定期実行するようにすればOK。

以上になります。
使い道は限られますが、是非使用していただけると嬉しいです。

Windows PowerShellクックブック

Windows PowerShellクックブック