超高速開発ツール"Wagby"で利用者の位置情報をアプリケーションログに出力する

前回は、投稿したとき(データを新規作成したとき)に、端末の位置情報を取得して緯度・経度をDBに保存しましたが、今回は投稿のデータとして画面上に緯度・経度を表示するのではなく、ログ(system.log)に出力してみようと思います。

※前回の予告と違うのは許してください。。。

www.cycle-g.info

Wagbyのアプリケーションログについて

Wagbyでは、Java用のログ出力ユーティリティのlog4jを使って、ログが出力されています。ログファイルは、次の場所に出力されています。

wagbyapp\logs\system.log

このファイルに、例えば↓のような形式で、画面上での操作やメールの送受信などのログが記録されています。

2017-03-25 14:30:51 [INFO jp.jasminesoft.jfc.controller.DbInsertBaseController perform_db] (admin@0:0:0:0:0:0:0:1) insertPost|DoInsert 
2017-03-25 14:30:52 [WARN org.hibernate.hql.internal.ast.HqlSqlWalker generatePositionalParameter] [DEPRECATION] Encountered positional 

また、サーバー上のこのファイルに直接アクセスしなくても、管理機能を使ってこのログを確認することもできます。

f:id:cycle8b:20170329143436p:plain

作るもの

投稿した時(データを新規登録したとき)に、このログ(system.log)に緯度と経度を出力します。更新したときや、削除したときも要領は一緒です。

緯度と経度の項目を用意する

前回と同様に、緯度・経度を持つ項目(latitude, longitude)を用意します。ただし今回はログに出力するだけでDBに保存しないこととします。また、この項目は非表示にします。

設定する場所 設定値
詳細 > データベースの詳細 > 値をデータベースに保存する チェックを外す
入力制御 > 隠し・読み込み専用 > 全画面 隠し項目にチェック
出力制御 > 詳細画面 > 隠し項目にする チェックをつける
出力制御 > 一覧画面 > 隠し項目にする チェックをつける

f:id:cycle8b:20170331114548p:plain

f:id:cycle8b:20170331114621p:plain

f:id:cycle8b:20170331114649p:plain

f:id:cycle8b:20170331114721p:plain

ちなみにこの機能は、こっそり緯度と経度を取得したい という目的には向きません。初めてアクセスしたときに位置情報の取得の許可を求めるポップアップが表示されてしまいますし、隠し項目にしてもF12キー等でソースを確認すれば、位置情報を持つ項目も確認できます。

位置情報を取得する

これも前回と同様に、Javascriptで位置情報を取得するコードを"customize\webapp\Post\MyInsertPost.js"に記述します。これによって、新規作成画面が表示されたときに、画面には表示されていない隠し項目としての緯度・経度に、自動的に値がセットされます。

新規作成時のスクリプトで、位置情報をログに出力する

次のスクリプトを、新規作成時のスクリプトとして保存します。これで、隠し項目の緯度・経度にセットされた値を、アプリケーションログに出力します。

f:id:cycle8b:20170331123106p:plain

確認

ビルド&アプリケーションを起動して、投稿を新規作成してみます。通常は次のようなログが出力されます。

2017-03-25 12:14:35 [INFO jp.jasminesoft.jfc.controller.DbInsertBaseController perform_db] (admin@0:0:0:0:0:0:0:1) insertPost|DoInsert 
2017-03-25 12:17:01 [INFO jp.jasminesoft.jfc.controller.DbShowListBaseController perform_db] (admin@0:0:0:0:0:0:0:1) showListPost|Search 

今回の機能を追加したことで、以下のように、緯度・経度がログが出力されるようになりました。

2017-03-25 12:23:17 [INFO jp.jasminesoft.jfc.controller.DbInsertBaseController perform_db] (admin@0:0:0:0:0:0:0:1) insertPost|DoInsert 
2017-03-25 12:23:17 [INFO ログに出力するテスト process] latitude:35.xxxxxxxxxxxxxxx
2017-03-25 12:23:17 [INFO ログに出力するテスト process] longitude:139.xxxxxxxxxxxxxx
2017-03-25 12:23:17 [INFO jp.jasminesoft.jfc.controller.DbShowListBaseController perform_db] (admin@0:0:0:0:0:0:0:1) showListPost|Search 

最後に

緯度・経度だけはでなく、任意の情報をログに加えることができます。実際にはログインユーザーの情報など、あとで解析するときに有用な情報を付け加えると良いでしょう。すこし複雑なスクリプトを用意したときや、デフォルトで出力される情報だけでは足りない場合などに便利です。

参考: 1. Log4J の基本 | TECHSCORE(テックスコア)