ソフトウェア開発会社で働く社員のアメブロ -8ページ目

ログ出力について<その4>

仕事上、イントラマート(v6.1)という製品を利用したシステムを開発しています。
スクリプト開発モデルです。



ログ出力レベル設定は外部(XMLやDBなど)に定義しようと考えてましたが、
スクリプト開発モデルってこともあり、
手抜きしてプログラム本体に記述でおしまいとしました。

/**
* 初期化関数
* ※サーバ初期起動時に本関数を1度だけ呼び出して下さい。
*/

function init() {
// ログ関数を汎用登録します。
Procedure.define("SystemLogger", new SystemLogger());
}

/**
* コンストラクタ
*/

function SystemLogger() {
// メソッド定義
this.debug = debug;
this.info = info;
this.warn = warn;
this.error = error;
this.fatal = fatal;

// ログ出力レベル定義
//this.systemLoggerLevel = 0; // 出力OFF
//this.systemLoggerLevel = 1; // 出力ON(FATAL以上)
//this.systemLoggerLevel = 2; // 出力ON(ERROR以上)
//this.systemLoggerLevel = 3; // 出力ON(WARN以上)
//this.systemLoggerLevel = 4; // 出力ON(INFO以上)
this.systemLoggerLevel = 5; // 出力ON(DEBUG以上)
}

/**
* システムログへログを出力します。
* @param {String} level ログレベル
* @param {Object} message メッセージ
* @private
*/

function _echo(level, message) {
// ログインユーザIDを取得します。
var uid = Module.client.get("id");
// システムログに出力します。
echo(Format.get("%s\t[%s] %s", level, uid, ImJson.toJSONString(message)));
}

/**
* システムログへデバッグログを出力します。
* ・ログレベルも合わせて出力します。
* ・ログインユーザーIDも合わせて出力します。
* ・ImJson#toJSONString(message)の変換結果を出力します。
* @param {Object} message メッセージ
*/

function debug(message) {
if (this.systemLoggerLevel >= 5) {
_echo("DEBUG", message);
}
}

/**
* システムログへ情報ログを出力します。
* ・ログレベルも合わせて出力します。
* ・ログインユーザーIDも合わせて出力します。
* ・ImJson#toJSONString(message)の変換結果を出力します。
* @param {Object} message メッセージ
*/

function info(message) {
if (this.systemLoggerLevel >= 4) {
_echo("INFO", message);
}
}

/**
* システムログへ警告ログを出力します。
* ・ログレベルも合わせて出力します。
* ・ログインユーザーIDも合わせて出力します。
* ・ImJson#toJSONString(message)の変換結果を出力します。
* @param {Object} message メッセージ
*/

function warn(message) {
if (this.systemLoggerLevel >= 3) {
_echo("WARN", message);
}
}

/**
* システムログへエラーログを出力します。
* ・ログレベルも合わせて出力します。
* ・ログインユーザーIDも合わせて出力します。
* ・ImJson#toJSONString(message)の変換結果を出力します。
* @param {Object} message メッセージ
*/

function error(message) {
if (this.systemLoggerLevel >= 2) {
_echo("ERROR", message);
}
}

/**
* システムログへ致命的エラーログを出力します。
* ・ログレベルも合わせて出力します。
* ・ログインユーザーIDも合わせて出力します。
* ・ImJson#toJSONString(message)の変換結果を出力します。
* @param {Object} message メッセージ
*/

function fatal(message) {
if (this.systemLoggerLevel >= 1) {
_echo("FATAL", message);
}
}

とりあえずログ出力はこれくらいにしときます。OK



<関連記事>
アメーバ ログ出力について
アメーバ ログ出力について<その2>
アメーバ ログ出力について<その3>



開発の現場 Vol.011
開発の現場 Vol.011
posted with amazlet at 11.02.10

翔泳社
売り上げランキング: 433691


開発の現場 vol.007
開発の現場 vol.007
posted with amazlet at 11.02.10

翔泳社
売り上げランキング: 233511





バッチ機能でテスト用セッションデータ生成

仕事上、イントラマート(v6.1)という製品を利用したシステムを開発しています。
スクリプト開発モデルです。



バッチ機能でセッション無効化」の動作確認、
テスト用セッションデータを生成するプログラムです。
管理画面からいつでも簡単に呼び出せるようバッチプログラムとしました。
/** セッション生成数 */
var _SESSION_CREATE_NUM = 100;

/** セッションを保ち続ける最大の時間間隔[秒数] */
var _EXPIRE_INTERVAL = 24 * 60 * 60;

/** ブラウザ情報 */
var _UA = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)";

/** ユーザID */
var _USER_ID = "guest";

/**
* テスト用セッションデータを指定件数分生成します。<br/>
* @param {Object} args 引数オブジェクト
* <ul>
* <li>group - バッチ設定をしたログイン・グループID</li>
* <li>name - バッチ名称</li>
* <li>establish - バッチ実行時間設定</li>
* <li>year - バッチ実行指定年</li>
* <li>month - バッチ実行指定月</li>
* <li>date - バッチ実行指定日</li>
* <li>day - バッチ実行指定曜日</li>
* <li>hour - バッチ実行指定時間</li>
* <li>minute - バッチ実行指定分</li>
* <li>second - バッチ実行指定秒</li>
* <li>program - バッチとして実行するプログラム・パス</li>
* </ul>
*/

function init(args) {
// ダミーセッション情報を生成します。
for (var i = 0; i < _SESSION_CREATE_NUM; i++) {
var asi = new Object();
// セッションを保ち続ける最大の時間間隔[秒数]
asi.expireInterval = _EXPIRE_INTERVAL;
// 最終応答時刻
asi.lastResponseTime = new Date().getTime();
// ログイングループID
asi.loginGroup = args.group;
// ログイン時刻
asi.loginTime = new Date().getTime();
// ログインタイプ
asi.loginType = "user";
// 処理中フラグ
asi.processing = true;
// IPアドレス
asi.remoteAddr = Web.getRemoteAddr();
// セッションID
asi.sessionId = Format.get("Test-%s", Identifier.get());
// ブラウザ情報
asi.userAgent = _UA;
// ユーザID
asi.userId = _USER_ID;
// セッションの有効性フラグ
asi.valid = true;

// ダミーセッション情報を登録します。
var asm = new ActiveSessionManager();
asm.addActiveSessionInfo(asi);
}
}


管理画面のバッチ設定はこんな感じです。

$ソフトウェア開発会社で働く社員のアメブロ-intra-mart バッチ設定

実行ボタンをポチっとすればダミーセッションが生成されます。グッド!



<関連記事>
アメーバ バッチ機能でセッション無効化



開発の現場 Vol.011
開発の現場 Vol.011
posted with amazlet at 11.02.10

翔泳社
売り上げランキング: 433691


開発の現場 vol.007
開発の現場 vol.007
posted with amazlet at 11.02.10

翔泳社
売り上げランキング: 233511





ログ出力について<その3>

仕事上、イントラマート(v6.1)という製品を利用したシステムを開発しています。



infoメソッド以外にもメソッドを追加してみました。
右矢印debug
右矢印warn
右矢印error
右矢印fatal

/**
* 初期化関数
* ※サーバ初期起動時に本関数を1度だけ呼び出して下さい。
*/

function init() {
// ログ関数を汎用登録します。
Procedure.define("SystemLogger", new SystemLogger());
}

/**
* コンストラクタ
*/

function SystemLogger() {
this.debug = debug;
this.info = info;
this.warn = warn;
this.error = error;
this.fatal = fatal;
}

/**
* システムログへログを出力します。
* @param {String} level ログレベル
* @param {Object} message メッセージ
* @private
*/

function _echo(level, message) {
// ログインユーザIDを取得します。
var uid = Module.client.get("id");
// システムログに出力します。
echo(Format.get("%s¥t[%s] %s", level, uid, ImJson.toJSONString(message)));
}

/**
* システムログへデバッグログを出力します。
* ・ログレベルも合わせて出力します。
* ・ログインユーザーIDも合わせて出力します。
* ・ImJson#toJSONString(message)の変換結果を出力します。
* @param {Object} message メッセージ
*/

function debug(message) {
_echo("DEBUG", message);
}

/**
* システムログへ情報ログを出力します。
* ・ログレベルも合わせて出力します。
* ・ログインユーザーIDも合わせて出力します。
* ・ImJson#toJSONString(message)の変換結果を出力します。
* @param {Object} message メッセージ
*/

function info(message) {
_echo("INFO", message);
}

/**
* システムログへ警告ログを出力します。
* ・ログレベルも合わせて出力します。
* ・ログインユーザーIDも合わせて出力します。
* ・ImJson#toJSONString(message)の変換結果を出力します。
* @param {Object} message メッセージ
*/

function warn(message) {
_echo("WARN", message);
}

/**
* システムログへエラーログを出力します。
* ・ログレベルも合わせて出力します。
* ・ログインユーザーIDも合わせて出力します。
* ・ImJson#toJSONString(message)の変換結果を出力します。
* @param {Object} message メッセージ
*/

function error(message) {
_echo("ERROR", message);
}

/**
* システムログへ致命的エラーログを出力します。
* ・ログレベルも合わせて出力します。
* ・ログインユーザーIDも合わせて出力します。
* ・ImJson#toJSONString(message)の変換結果を出力します。
* @param {Object} message メッセージ
*/

function fatal(message) {
_echo("FATAL", message);
}



利用する際はこんな感じで実装します。
Procedure.SystemLogger.debug("デバッグ");
Procedure.SystemLogger.info("情報");
Procedure.SystemLogger.warn("警告");
Procedure.SystemLogger.error("エラー");
Procedure.SystemLogger.fatal("致命的エラー");

ログ(system.log)はこんな感じになります。
↓ログイン後(guest)に出力した場合
[yyyy-MM-dd HH:mm:ss,SSS] 251 resin-tcp-connection-*:8080-1 DEBUG [guest] "デバッグ"
[yyyy-MM-dd HH:mm:ss,SSS] 252 resin-tcp-connection-*:8080-1 INFO [guest] "情報"
[yyyy-MM-dd HH:mm:ss,SSS] 253 resin-tcp-connection-*:8080-1 WARN [guest] "警告"
[yyyy-MM-dd HH:mm:ss,SSS] 254 resin-tcp-connection-*:8080-1 ERROR [guest] "エラー"
[yyyy-MM-dd HH:mm:ss,SSS] 255 resin-tcp-connection-*:8080-1 FATAL [guest] "致命的エラー"

今後はこれを元に出力ログレベルの設定ができるよう拡張すれば良さそうです。グッド!



<関連記事>
アメーバ ログ出力について
アメーバ ログ出力について<その2>
アメーバ ログ出力について<その4>



開発の現場 Vol.011
開発の現場 Vol.011
posted with amazlet at 11.02.10

翔泳社
売り上げランキング: 433691


開発の現場 vol.007
開発の現場 vol.007
posted with amazlet at 11.02.10

翔泳社
売り上げランキング: 233511