クライアントサイドJavaScriptでログをテキストファイルに残す方法にはどんな方法があるのか調べてみました。結果、クライアントからサーバにログをPOST(しサーバ側でテキストファイルに保存)する方法が一般的であることが判りました。
クライアント自身にログを残す方法を優先的に探したのですが、既存のロギング・フレームワークにそんな方法は見当たりませんでした。やはり、という感触です。
クライアント
ロギングはlog4javascriptを使いました。ログを保存するサーバは、localhost:3000を指定しました。今回はクライアント装置と同じ装置をサーバに見立てています。
main.html
<!DOCTYPE html>
<html>
<head>
<title>Example</title>
<script type="text/javascript" src="js/log4javascript.js"></script>
<script>
//<![CDATA[
var log = log4javascript.getLogger();
var ajaxAppender = new log4javascript.AjaxAppender("http://localhost:3000/");
ajaxAppender.setThreshold(log4javascript.Level.ERROR);
log.addAppender(ajaxAppender);
function log4jsTest() {
log.trace("トレース・メッセージです");
log.debug("デバッグ・メッセージです");
log.info("情報メッセージです");
log.warn("警告メッセージです");
log.error("エラー・メッセージです");
log.fatal("致命的故障メッセージです");
}
//]]>
</script>
</head>
<body>
<input type="button" value="log4js Test" onclick="log4jsTest()"/>
</body>
</html>
サーバ
サーバサイドはJavaScriptでなくてもいいのですが、今回はNode.jsで書いてみました。テキストファイルへの書き出し処理は省略しています。
server.js
var Hapi = require('hapi');
var server = new Hapi.Server();
server.connection({ port: 3000 });
server.route({
method: ['PUT', 'POST'],
path: '/',
handler: function (request, reply) {
console.log(request.payload.timestamp);
console.log(request.payload.logger);
console.log(request.payload.level);
console.log(request.payload.message);
console.log(request.payload.url);
reply('I did something!');
}
});
server.start(function () {
console.log('Server running at:', server.info.uri);
});
~