Trac Lightning でログローテーションを仕込む

2017年10月20日Trac Lightning,ソフトウェア

おはようございます。

昨日に引き続き、Trac Lightning のネタです。

今回はプロジェクト毎に出力されるログを
日付毎にローテーションするバッチを作ったのでまたまたとりあえず公開します。

これまた、あまり需要はないかもしれませんが。。

スポンサーリンク

バッチファイル

次のファイルをTracのホーム配下のbatchディレクトに作成し、タスクスケジューラに登録します。

trac_logrotate.bat

    @ECHO OFF
    
    REM ==============================================
    REM ログローテーション設定
    REM 環境に合わせて変更してください
    REM ==============================================
    REM TRACホームのパスを設定
    SET TRAC_HOME=C:\TracLight
    REM TRACのサービス名
    SET TRAC_SERVICE=TracLightning
    
    REM ==============================================
    REM その他変数
    REM ==============================================
    REM バッチ名
    SET BATCHNAME=%~0
    REM SVNホームのパスを設定
    SET SVN_HOME=%TRAC_HOME%\CollabNetSVN
    REM Apacheのパスを設定
    SET HTTPD=%SVN_HOME%\httpd\bin\
    REM プロジェクトディレクトリ
    SET PRJ_DIR=%TRAC_HOME%\projects\trac
    REM 実行ディレクトリ
    SET EXECDIR=%CD%
    
    
    REM -----------------------------
    REM 1日前の日付をYMDにセット
    REM -----------------------------
    SET YMD=
    ECHO WScript.ECHO DateAdd("d", -1, Date()) > tmp.vbs
    FOR /f "tokens=1-3 delims=/-" %%A in ('cscript //nologo tmp.vbs') DO SET YMD=%%A%%B%%C
    DEL tmp.vbs
    
    REM ログファイル
    SET LOG_FILE=%EXECDIR%\log\trac_logRotation_%YMD%.log
    
    REM ==================================================================
    REM バッチ開始
    REM ==================================================================
    :LA_STARTBATCH
    ECHO %DATE% %TIME% [INFO] ログローテーションを開始します。 >> %LOG_FILE%
    
    CD %PRJ_DIR%
    
    REM サービスの停止
    ECHO %DATE% %TIME% [INFO] サービスを停止します。>> %LOG_FILE%
    CALL %HTTPD%\httpd.exe -n %TRAC_SERVICE% -k stop >> %LOG_FILE%
    IF NOT ERRORLEVEL 0 GOTO :LA_ERROR
    ECHO %DATE% %TIME% [INFO] サービスが停止されました。>> %LOG_FILE%
    
    ECHO %DATE% %TIME% [INFO] 下記ファイルをリネームします。 >> %LOG_FILE%
    FOR /R %%i IN (*) DO (
    REM トラックログかどうか
    if 'trac.log'=='%%~nxi' (
    ECHO %DATE% %TIME% [INFO] %%i >> %LOG_FILE%
    CALL :LA_FILEMOVE %%i
    IF NOT ERRORLEVEL 0 GOTO :LA_ERROR
    )
    )
    
    REM サービスの起動
    ECHO %DATE% %TIME% [INFO] サービスを開始します。>> %LOG_FILE%
    CALL %HTTPD%\httpd.exe -n %TRAC_SERVICE% -k start
    IF NOT ERRORLEVEL 0 GOTO :LA_ERROR
    ECHO %DATE% %TIME% [INFO] サービスが開始されました。>> %LOG_FILE%
    
    GOTO LA_ENDBATCH
    
    
    REM ==================================================================
    REM ファイル名変更
    REM ==================================================================
    :LA_FILEMOVE
    CD %~dp1
    SET file=%~nx1
    IF NOT EXIST %file%_%YMD% (
    REN %~nx1 %file%_%YMD%
    type nul > %~nx1
    ) ELSE (
    ECHO %DATE% %TIME% [INFO] 既に %YMD% のファイルが存在します。 >> %LOG_FILE%
    )
    EXIT /b
    
    
    REM ==================================================================
    REM エラー処理
    REM ==================================================================
    :LA_ERROR
    ECHO %DATE% %TIME% [ERROR] エラーが発生したため終了します。 >> %LOG_FILE%
    
    CD %EXECDIR%
    
    GOTO :LA_ENDBATCH
    
    REM ==================================================================
    REM 終了処理
    REM ==================================================================
    :LA_ENDBATCH
    
    ECHO %DATE% %TIME% [INFO] バッチを終了します。 >> %LOG_FILE%
    
    CD %EXECDIR%
    
    EXIT /0
    
    

 

流れとしては、
Trac Lightning のサービスを停止し、各プロジェクトのログに前日の日付を付けて退避、
その後再度サービスを起動するといった感じです。

まとめ

ログもほっておくと開けない程にサイズが大きくなってしまうことがありますよね。

まあ、あまり参照することのないログですが、
何かあった場合に開けないと困りますし。

単純なバッチなので、
他のソフトウェアなんかにも流用できるんじゃないかと思います。

ではでは。

 

スポンサーリンク


関連するコンテンツ

2017年10月20日Trac Lightning,ソフトウェアTracLightning,Windows,ソフトウェア

Posted by doradora