TypeScript でログローテーションする

TypeScript でログローテーションするプログラムを作成しましたので紹介します。

仕様

  • 引数に LogDir, LogFileName, LogRotatePrefix の3つを持ちます。
  • LogDir は、ログが保存されているディレクトリです。この中にローテーションされたログファイルも格納します。
  • LogFileName はログファイル名です。 LogDir + LogFileName でフルパスになります。
  • LogRotatePrefix はローテーションされたログファイル名の先頭に付与される文字列です。
  • ログディレクトリに保存されているログファイルを、LogRotatePrefix_YYYYMMDDHHMMSS.zip に圧縮します。
  • ログファイルの中身をクリアします。

ソースコード

import * as fs from 'fs';
import * as compressing from "compressing";

main()

function main() {
    let LogDir:string = __dirname + "/../log"
    let LogFileName:string = "app.log"
    let LogRotatePrefix:string = "app"

    LogRoate(LogDir, LogFileName, LogRotatePrefix)
}

function LogRoate(LogDir:string, LogFileName:string, LogRotatePrefix:string) {
    let RotateFileName:string = `${LogRotatePrefix}_${getNowYMD()}_${getHHMISS()}.zip`

    compressFileToZip(LogDir + "/" + LogFileName, LogDir + "/" + RotateFileName, () => {
        fs.writeFileSync(LogDir + "/" + LogFileName, "");
    })
}

function getNowYMD():string{
    let dt = new Date();
    let y:string = dt.getFullYear().toString();
    let m:string = ("00" + (dt.getMonth()+1)).slice(-2);
    let d:string = ("00" + dt.getDate()).slice(-2);
    let result:string = y + m + d;
    return result;
  }

function getHHMISS():string{

    let dt = new Date();
    let hh:string = dt.getHours().toString();
    let mi:string = dt.getMinutes().toString();
    let ss:string = dt.getSeconds().toString();

    hh = ("00" + hh).slice(-2);
    mi = ("00" + mi).slice(-2);
    ss = ("00" + ss).slice(-2);

    return hh + mi + ss;

}

export function compressFileToZip(filepath: string, zipFilePath: string, callback?: Function) {
    compressing.zip.compressFile(filepath, zipFilePath)
    .then( () => {
        if (callback) callback()
        else return 0
    })
    .catch( (e) => {
        console.log(e)
    })
}

main() 関数

main()の中で、LogDir, LogFileName, LogRotatePrefix を定義しています。

これらの引数で LogRoate() 関数を呼び出します。

LogRoate() 関数

ローテーションファイル名を定義します。ローテーションファイル名は LogRotatePrefix_YYYYMMDDHHMMSS.zip になります。

その後、compressingを用いて zip 圧縮します。

compressFileToZip() 関数

Node モジュール compressing を使用して、zip圧縮する関数です。

詳しくは、以下に記載しています。

Typescript でファイルやフォルダを圧縮する方法

圧縮が成功したら、コールバック関数で定義している fs.writeFileSync で、ログファイルの中身をクリアしています。

getNowYMD() 関数

現在日付を YYYYMMDD 形式で取得する関数です。

詳しくは、以下に記載しています。

Javascript で現在日付の YYYYMMDD 形式、現在時刻の HHMMSS 形式を取得する

getHHMISS() 関数

現在時刻を HHMMSS 形式で取得する関数です。

詳しくは、以下に記載しています。

Javascript で現在日付の YYYYMMDD 形式、現在時刻の HHMMSS 形式を取得する

返信を残す

メールアドレスが公開されることはありません。