簡易なログライブラリを作った話
どうも、@armorik83です。担当していた案件が一段落したので、そこで使ってたライブラリを切り出してOSS化させた時の話です。
cw-log
まずは宣伝させてください。
モチベーション
console.log()
がソースに残り続けるのは良くない、かと言ってログを追いたい時に書いて、終わったら消す…の繰り返しは面倒だし、消し忘れがあるとコミットも汚れる。
console.log()
の有効無効を制御するラップやフックは割と誰でも通る道かと思いますが、ラップだとコンソールに常にラップメソッドの行番号が表示されて全く嬉しくないので、この点も考慮しました。
先頭2文字が名前空間なのObjective-C引きずっててアレですが、まあlog
は取れるはず無いよなーという事情です。
使い方
$npm install cw-log --save
var log = require('cw-log').logger(6);
まず、logger
インスタンスを作成します。<script>
ローディングの場合は、/lib/log.js
を使って、
<script src="/path/to/log.js"></script>
var log = cwlog.logger(6);
こうなります。
API
trace(...args)
debug(...args)
info(...args)
warn(...args)
error(...args)
fatal(...args)
log
が持つメソッド群です。console.log()
系と同じく可変引数です。
t(): string
タイムスタンプもあります。単なるnew Date().toISOString()
のエイリアスですが、使ってて欲しくなったので用意しました。trace(log.t(), __filename, bar)
のように第一引数に与える想定なので初期状態でセパレータが入っていますが、そこは適宜いい感じにしてください。
ログレベル
- 0: OFF
- 1: FATAL
- 2: ERROR
- 3: WARN
- 4: INFO
- 5: DEBUG
- 6: TRACE
cw-log
にはApache Log4jの影響を受けたレベルを採用しています。.logger(6)
の数字を下げると、そのレベル以下の内容しか出力されません。logger(0)
だとcw-log
は一切のログを吐きません。console.log()
は変更してないので、そのまま使えます。
出力時は常に「呼んだところの」行番号が表示されて、常にラッパーの行番号を返すような萎えるログではありません。
気軽にOn/Offできて行番号も正しく表示される簡易ロガー、ぜひお試しあれ。
OSS化とnpm publish
何かしらを公開することにはずっと関心があって、でも一度公開すると破壊的変更への考慮とか、維持が大変だよなーとかちょっと思っていました。ただ最近、界隈のOSS職人の活躍っぷりに少なからず感化されているのと、正味自分が便利に使えればそれでいいの延長だと開き直ったので、方針を変えて積極的に載せていくことにしました。(頻繁に破壊的変更を入れるだとか、品質を保証しないと言ってるわけではないです)
いきなりヘヴィーなものも大変なので、今回ログのみのライブラリは軽量で題材に最適でした。
参考にしたもの
- 3分でできるnpmモジュール
- 3時間でできるnpmモジュール
- 細かすぎて伝わらない package.json 小ネタ三選
- 身近なOSS作者諸氏におけるリポジトリ構成の傾向(一番参考にさせてもらったのはt_wada先生)
有名どころ(Angularとか)は逆にデカすぎて今回の参考にはなりませんでした。
得たもの
- npm publishチョーカンタン
- Travis CIチョーカンタン(ほんとすぐ動き出してびっくりした)
- npm publishしたのにgit pushしてなくて「あっ」てなるやつを経験
- 別プロジェクトで
npm i 自分のやつ --save
できる楽しさ:v:
楽しくやってるので今後も続けます。
反省点
次に活かしたいのは/src
と/lib
の扱い。GitHubにはTypeScriptだけ載せて、npmにはbuildだけ載せたいという悩みがこの時点では解決できず、両方載ってます。
なんかドンピシャな記事がきたので、次はこれ試そうと思ってます。
以上です。
Discussion