MovableType のデータをログ ファイルっぽく表示する

Posted by
ぴろり
Posted at
2015/08/09 16:02
Trackbacks
関連記事 (0)
Post Comment
コメントできます
Category
MovableType カテゴリ
カバーイメージ

通常MTのログを確認する場合、管理画面にログインし「ツール」→「ログ」で確認を行いますが、このログをファイルとしてサーバ上に出力することは可能でしょうか。
普段管理しているWebサーバのapacheのログを確認する様な感覚でsshでターミナルログインを行い、findコマンドなどでMTのログの閲覧ができればと考えております。

 なるほど、なるほど。コマンドラインから cat mt_log | grep '検索' | wc -l みたいなイメージで、データベースから直接、データを取得できると便利かもしれませんね~ということで、ちょっと試してみました。

この記事を Delicious に追加する   このエントリーをはてなブックマークに追加  

スクリプト

 環境が MySQL のみ、他のデータベース エンジンは試せていません。SQL 文で、SELECT の結果をファイルに書き出す INTO OUTFILE なるものがあって、ここに色々オプションを追加してやると CSV 形式でファイルに書き出せるようです。ただ、私が実験に使ったさくらインターネットのレンタル サーバの場合、データベース サーバがまた別にあって、ここにはファイルの書き出しができませんでした。結果、可搬性を求めて mysqldump でデータを取得した上で、ログ ファイルっぽくなるよう perl でストリーム編集してから出力しています。mtdump mt_log と叩けば、データを標準出力にだらだらと垂れ流しますので、後は grep したり cut したり less したり…とお好きにどうぞ、なスクリプトになっています。

#!/bin/sh
# $Id: mtdump 148 2015-08-09 01:35:51Z pirolix $

DB_HOSTNAME=db.exmple.com
DB_USERNAME=username
DB_PASSWORD=p@ssw0rd
DB_DATABASE=mt5_test

DB_TABLE_NAME_PREFIX=mt_

# Show usage and exits
if [ -z $1 ]; then
    echo "Usage: ${0##*/} <table name>"
    echo "       ${0##*/} --list"
    exit

# Show tables list and exits
elif [ $1 = '--list' ]; then
    mysql \
        --host=$DB_HOSTNAME \
        --user=$DB_USERNAME --password=$DB_PASSWORD \
        --database=$DB_DATABASE \
        --execute='show tables;'
    exit
fi

# Dump the specified table's data
mysqldump \
    --host=$DB_HOSTNAME \
    --user=$DB_USERNAME --password=$DB_PASSWORD \
    --no-create-info --skip-comments --skip-add-locks \
    --skip-extended-insert \
    $DB_DATABASE $DB_TABLE_NAME_PREFIX${1#$DB_TABLE_NAME_PREFIX} \
    | perl -ne 's{^.*?\(|\);$|^/.*/;$}{}g; print if /./'
exit

使い方

  • 先頭付近にある DB_* 変数 4 つは、お使いの環境に合わせて変更してください。
  • mtdump mt_log または mtdump log とすると、mt_log テーブルの内容を標準出力に吐き出します。
  • mtdump --list とすると、テーブル名の一覧を出力して終了します。

その他

  • ライセンスは GPL です。
  • mysqldump の出力から、見やすくするために SQL ステートメントやコメントを除去しているだけです。
  • フィールドは原則コンマ区切りですが、文字列データに含まれるコンマが悪さをして、素直にフィールド分割できないあたりが面倒くさそうです。
  • 文字コード回りはノータッチなので、環境によっては文字化けするかもしれません。
  • ブロック デバイスとして、cp /dev/mt_log a.txt なんてできるとカッコイイかも。読み出しはいけそうだけど、書き込みはダメだなぁ。

参考リンク

この記事を Delicious に追加する   このエントリーをはてなブックマークに追加  


この記事を読んだ人はこんな記事も読んでいます記事リコメンデーションについて

カバー画像:不要なログを削除してくれるMovableTypeプラグイン:LogCleaner

関連記事/トラックバック

関連記事/トラックバックはまだありません

この記事にトラックバックを送るには?

コメントを投稿する

 
 (必須, 匿名可, 公開, トリップが使えます)
 (必須, 匿名可, 非公開, Gravatar に対応しています)
 (必須)
スパム コメント防止のため「投稿確認」欄に ランダムな数字 CAPTCHAについて を入力してから送信してください。お手数ですがご協力のほど宜しくお願いいたします。