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 形式を取得する

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

実践TypeScript【電子書籍】[ 吉井健文 ]
価格:3726円 (2019/7/23時点)

[

楽天で購入

](https://hb.afl.rakuten.co.jp/hgc/18648e8b.7d833591.18648e8c.ed1bab3c/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Frakutenkobo-ebooks%2F5456816fd8833397a6aa8b80647873ad%2F%3Fscid%3Daf_pc_bbtn&m=http%3A%2F%2Fm.rakuten.co.jp%2Frakutenkobo-ebooks%2Fi%2F18341447%2F%3Fscid%3Daf_pc_bbtn&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxfQ==)

速攻でメモできる QuickNote リリースしました!

QuickNoteは動作が超軽量でサクサクかけるノートアプリです。一瞬の閃きを逃さずにノートを開き書き始めることができます。 アカウント登録も不要です。お試しあれ!

Excel操作をコマンドで! proBoarderExcel

Excelはマウスで操作するのが基本ですが、マウス操作に疲れてはいませんか? キーボードでExcel操作ができるようになるアプリです。オープンソースで無料です。

積み上げ! Daily Stack リリースしました!

Daily Stack は日々の積み上げを管理するToDoアプリです。過去の積み上げの振り返りだけでなく、ツイート機能もあります。 アカウント登録不要ですぐに使い始めることができます。

ExecNote.app リリースしました!

ExecNoteは、コードが実行できるMarkdownアプリケーションです。Markdownドキュメント内に記載したコードをクリックすると実行ができます。わざわざターミナルを 起動させる必要がありません!無料ですのでもしよければダウンロードをお願いします。

About Me

11年目のシステムエンジニアです。アプリで生活や仕事を改善したい🐱仕事効率化、自動化のアプリ開発が得意です、ご相談ください。 🚀エンタメ系アプリの開発も模索中🐬社内SEや個人アプリ開発者、システムエンジニアになりたい人と繋がりたい🐱