TIESのブログ

MoodleのユーザIDをApacheログに出力してみる

on 2015年12月11日

Moodleの通常ログ機能だと、例えば、誰がどのリソースを開いたかの情報は取れているのですが、
その登録したリソースの中にhtmlファイルを複数置いて、html間を移動した時などの細かい動向は取れていませんでいた。(Moodle2.9確認時点)

ただ、動かしていたApache側のログでは、リソースの中に置いたhtml間を移動した情報まで取れていたので、
とりあえずApacheのログにMoodleのユーザIDを記録すれば、ユーザ毎の動向がより詳細に分かるだろうと試してみました。

(テスト環境)
・Moodle 2.9.1+ (Build: 20150820)
・Apache/2.2.15
・PHP 5.4.16

・MoodleのユーザID取得
$USER->id で取れるらしい
https://docs.moodle.org/dev/Developer_FAQ#How_do_I_find_out_the_currently-logged-on_user.3F

・Apacheログに出力
MoodleはPHP使用しているので、apache_note 関数でいけるらしい
http://php.net/manual/ja/function.apache-note.php

上記を踏まえ、とりあえずMoodleユーザなら誰もがアクセスするであろう moodle/config.php に以下追加。

apache_note('ApacheMoodleUserID',$USER->id);

次に、httpd.confに指定した"ApacheMoodleUserID"が入るようにLogFormatを更新

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{ApacheMoodleUserID}n" combined

実際に動かしてログを見ると、きちんと取れていました。(最後の数字がMoodleのユーザID)

xxx.xxx.xxx.xxx - - [11/Dec/2015:17:15:57 +0900] "GET /moodle/pluginfile.php/351/mod_resource/content/6//OEBPS/vol-1/text/vol-001-021.xhtml HTTP/1.1" 200 1920 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36" 2
xxx.xxx.xxx.xxx - - [11/Dec/2015:17:15:58 +0900] "GET /moodle/pluginfile.php/351/mod_resource/content/6//OEBPS/vol-1/text/vol-001-022.xhtml HTTP/1.1" 200 1465 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36" 2
xxx.xxx.xxx.xxx - - [11/Dec/2015:17:15:58 +0900] "GET /moodle/pluginfile.php/351/mod_resource/content/6//OEBPS/vol-1/text/vol-001-023.xhtml HTTP/1.1" 200 3318 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36" 2

とりあえず実現はできましたが、もっとスマートな方法があるかもですね。
(そもそも、Moodleだけで完結できるプラグインや設定がちゃんとあるかもですね。。)

--
2016.04.25 追記)
apache_noteだとエラーが出る場合の対応