コーヒー飲みながら仕事したい

仕事で使う技術的なことの備忘録とか


Wordpress に引っ越しました!

mosquitto でブローカーのログをファイル出力する方法(Windows10 にて)

移転しました。

主題の通り、Windows10 の環境にて、 mosquitto のブローカーのログをファイルに出力する方法です。

公式な手順(ただし Windows10 ではうまくいかない・・・)

まず、公式にログ出力に関する設定方法が書かれています。
大まかな手順としては

  1. mosquitto.conflog_dest 属性に出力するファイルパスを設定する
  2. ブローカーを mosquitto -c <mosquitto.confのパス> で起動する

という感じっぽいです。

しかし、肝心の log_dest に記載する内容ですが、syslog というオプションがありますが、これは調べた感じ Windows では有効にならない?のか、どこかに出力されているのかわかりませんでした。
他に file *****.txt という方法があるみたいですが、こちらもうまくいきませんでした。

実際に以下のように mosquitto.conf を設定してみました。

(mosquitto.conf の抜粋)
log_dest file C:\Users\XXXX\Documents\mosquitto.log

しかし、ブローカー起動時に以下のように起こられてしまいました。

C:\Program Files (x86)\mosquitto>mosquitto -c mosquitto.conf
1540507934: Error: Unable to open log file C:\Users\XXXX\Documents\mosquitto.log for writing.

権限系なのかといろいろ試しましたが、やっぱりうまくいきませんでした。

ググってみると、windows 以外ではそこそこ情報がみつかるのですが、 windows に関する情報は有力なものはみつけられませんでした・・・

他の手法

そこで、代替手段となりますが、 StackOverflow に Windows 環境での ログ出力手段について情報がありました。

iot.stackexchange.com

これは、ブローカーのログ出力というよりは、全メッセージを受信するクライアントを立ち上げて、そのクライアントがメッセージをファイル出力という感じっぽいです。
これはあくまでトピックのみを対象としたログになるので、ブローカーの動作ログとは程遠いものですが・・・

一応手順的には以下の感じです。(そのまま日本語にしているだけですが)

  1. 以下の内容を timestampLog.vbs に記述して保存する
Dim str
Do While Not WScript.StdIn.AtEndOfStream
  str = WScript.StdIn.ReadLine
  WScript.StdErr.WriteLine "[" & now & "]" & str
Loop
  1. ブローカーを起動する

  2. クライアントを、以下の通りにして起動する

C:\Program Files\mosquitto>mosquitto_sub -t +/# -v | cscript //nologo timestampLog.vbs 2> C:\*USER*\Desktop\logfile.txt

これで、上記であれば C:\*USER*\Desktop\logfile.txt にトピックのログが出力されるようになります。

うーん、これがしたかったわけじゃないんだけどなぁ・・・

追記

Windows でログのファイル出力ができないことは既知の問題だったみたいです。

github.com

なんか読んだ感じ、対応されないっぽい感じします。
残念です・・・