Bagaimana cara mengaktifkan pencatatan log Mosquitto pada Windows 7?


8

Saya punya pertanyaan sebelumnya dan untuk lebih dekat ke solusi saya ingin mengaktifkan broker Mosquitto login pada Windows 7.

Awalnya saya sudah memulai broker secara manual sebagai berikut:

mosquitto -p 1883 -v

-vberarti logging konsol verbose. Tetapi ini tidak memberikan informasi yang cukup, hanya baris berikut jika ada masalah saya:

1486293976: Socket error on client <unknown>, disconnecting.

Saya telah mencoba melakukan apa yang dijelaskan dalam jawaban ini . Berikut adalah bagian logging file config:

# Note that if the broker is running as a Windows service it will default to
# "log_dest none" and neither stdout nor stderr logging is available.
# Use "log_dest none" if you wish to disable logging.
log_dest stdout

# If using syslog logging (not on Windows), messages will be logged to the
# "daemon" facility by default. Use the log_facility option to choose which of
# local0 to local7 to log to instead. The option value should be an integer
# value, e.g. "log_facility 5" to use local5.
#log_facility

# Types of messages to log. Use multiple log_type lines for logging
# multiple types of messages.
# Possible types are: debug, error, warning, notice, information, 
# none, subscribe, unsubscribe, websockets, all.
# Note that debug type messages are for decoding the incoming/outgoing
# network packets. They are not logged in "topics".
log_type error
log_type warning
log_type notice
log_type information

# Change the websockets logging level. This is a global option, it is not
# possible to set per listener. This is an integer that is interpreted by
# libwebsockets as a bit mask for its lws_log_levels enum. See the
# libwebsockets documentation for more details. "log_type websockets" must also
# be enabled.
#websockets_log_level 0

# If set to true, client connection and disconnection messages will be included
# in the log.
connection_messages true

# If set to true, add a timestamp value to each log message.
log_timestamp true

Dalam hal ini saya telah memulai broker sebagai berikut:

mosquitto -p 1883

-vOpsi akan menimpa file konfigurasi dengan konfigurasi default jadi saya telah meninggalkan itu. Tapi saya tidak melihat logging di konsol.


Alih-alih stdoutsaya mencoba masuk ke file, dan mengubah konfigurasi sebagai berikut:

log_dest file d:\mosquitto.txt

Saya telah membuat file secara manual dan memulai broker dengan cara yang sama tetapi tidak berhasil.


Saya tidak mendapatkan pesan log apa pun jika saya tidak menggunakan -vopsi. Bagaimana seharusnya itu dilakukan dengan benar?


Apakah log_type debugatau log_type allmemberi Anda informasi lebih lanjut?
Aurora0001

1
@ Aurora0001 Tidak peduli apa yang saya atur di file konfigurasi, saya tidak mendapatkan hasil logging. Hanya -vopsi yang memberikan beberapa entri log pada konsol (cmd) tetapi yang menggunakan konfigurasi default.
Bence Kaulics

@JimmyWestberg Sementara jawaban Anda memberikan mekanisme pencatatan yang nyaman, hanya mencatat informasi terkait topik sementara saya awalnya tertarik pada log kesalahan / peringatan broker mosquitto yang saya lelah konfigurasikan dalam file config mosquitto.
Bence Kaulics

Jawaban:


8

Inilah yang saya lakukan. Script berikut disimpan sebagai timestampLog.vbs:

Dim str
Do While Not WScript.StdIn.AtEndOfStream
  str = WScript.StdIn.ReadLine
  WScript.StdErr.WriteLine "[" & now & "]" & str
Loop

Lalu saya menjalankan ini dari baris perintah:

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

Di mana Anda mungkin ingin mengubah jalur ke folder mosquitto Anda dan mengubah jalur "logfile.txt" ke apa pun yang Anda inginkan.

Jika ini yang Anda cari, saya tidak tahu, tetapi orang lain mungkin menyukai solusi yang disediakan di sini. Untuk memecah baris perintah:

C:\Program Files\mosquitto> adalah folder lokal untuk Mosquitto

mosquitto_sub adalah file .exe yang digunakan untuk mendengarkan broker

-t +/#"-t" adalah untuk memberikan .exe file informasi untuk mendengarkan t OPIC dari + / # yang semua topik dari klien. "#" berarti semua topik, bahkan topik yang dibuat broker. \ $ SYS / # hanya akan mendengarkan topik broker. Dimungkinkan untuk memiliki multiple -t (saya pikir).

-v adalah untuk memberikan file .exe informasi untuk menampilkan topik yang bertele-tele, yaitu juga menampilkan topik itu sendiri (tidak hanya nilainya).

| adalah untuk menyalurkan perintah pertama ini ke perintah skrip.

cscript //nologo timestampLog.vbsadalah untuk mengeksekusi cscript.exe dengan skrip vbs yang sebelumnya kita tulis. //nologomemberitahu prompt baris perintah untuk menampilkan informasi output cscript.exe menjadi file eksternal, bukan prompt itu sendiri.

2> memberitahu command line prompt untuk menampilkan "StdErr" (yang kami beri tahu skrip untuk menyalurkan semua pesan ke dalam file .vbs).

C:\*USER*\Desktop\logfile.txtadalah path dan nama file dari output. Alih-alih .txt Anda mungkin mempertimbangkan untuk menggunakan .log atau sesuatu yang lain.


4

The jawaban dari pertanyaan ini: Bagaimana mengaktifkan WebSockets di mosquitto berjalan pada Windows? sebenarnya menjawab pertanyaan ini juga.

Ternyata file konfigurasi Mosquitto harus ditambahkan secara eksplisit di baris perintah.

Ketika Anda menjalankan mosquitto dari baris perintah, Anda harus secara eksplisit menunjuk ke file konfigurasi dengan opsi -c

mosquitto -v -c /path/to/mosquitto.conf

Setelah ini saya bisa mendapatkan informasi tambahan tentang peristiwa kesalahan soket atau semacamnya.

1489438223: mosquitto versi 1.4.10 (tanggal pembuatan 24/08/2016 21: 03: 24.73) dimulai

1489438223: Konfigurasi dimuat dari mosquitto.conf.

1489438223: Membuka soket ipv6 listen pada port 1883.

1489438223: Kesalahan: Hanya satu penggunaan setiap alamat soket (protokol / alamat jaringan / port) biasanya diizinkan.

1489438341: mosquitto versi 1.4.10 (tanggal pembuatan 24/08/2016 21: 03: 24.73) dimulai

1489438341: Konfigurasi dimuat dari mosquitto.conf.

1489438341: Membuka soket ipv6 listen pada port 1883.

1489438341: Membuka soket ipv4 listen pada port 1883.

1489438363: Koneksi baru dari 192.168.1.4 pada port 1883.

1489438363: Klien baru terhubung dari 192.168.1.4 sebagai root.1489438369381 (c1, k60, u'phone ').

1489438363: Mengirim CONNACK ke root.1489438369381 (0, 0)

1489438363: Menerima SUBSCRIBE dari root.1489438369381

1489438363: kamar / kelembaban (QoS 1)

1489438363: root.1489438369381 1 kamar / kelembaban

1489438363: Mengirim> SUBACK ke root.1489438369381

1489438453: Root klien.1489438369381 telah melebihi batas waktu, memutuskan koneksi.

1489438453: Kesalahan soket pada root klien.1489438369381, memutuskan sambungan.


3
  1. muatan log

    Jika Anda ingin mencatat payload pesan PUBLISH, di sini saya menambahkan custome log di mosquitto v1.5.3 souce:

    Sumber di Git Hub .

    // hanya tampilkan payload ASCII, data biner mungkin merusak terminal.

  2. penggunaan di mosquitto.conf:

    log_type payload

  3. hasil

    log menjadi:

    1542293777: Received PUBLISH from client_20454 (d0, q0, r0, m0, '$rpc/device1/client_20454/25MhY4xUwiMZIuytfb89Vjrh4QU=/req', ... (64 bytes))
    1542293777: > payload: '{"method":"ServerExposed.Ping","params":[{"Num":20454}],"id":0}'
    1542293777: Sending PUBLISH to device1 (d0, q0, r0, m0, '$rpc/device1/client_20454/25MhY4xUwiMZIuytfb89Vjrh4QU=/req', ... (64 bytes))
    
    1542293777: Received PUBLISH from device1 (d0, q0, r0, m0, '$rpc/device1/client_20454/25MhY4xUwiMZIuytfb89Vjrh4QU=/res', ... (57 bytes))
    1542293777: > payload: '{"id":0,"result":{"Done":true,"Num":20454},"error":null}'
    1542293777: Sending PUBLISH to client_20454 (d0, q0, r0, m0, '$rpc/device1/client_20454/25MhY4xUwiMZIuytfb89Vjrh4QU=/res', ... (57 bytes))
    

1
Apa yang terjadi ketika Anda menerbitkan muatan biner?
hardillb

oh, hanya diuji dengan payload ascii, biner mungkin memecahkan terminal, lupa mengatakan
yurenchen

2

Saya menemukan ini beberapa waktu lalu, tetapi saya tidak dapat menghubungkan ke penulis asli. Berfungsi bagus untuk log yang ada, tetapi tidak bisa 'cocok' dengan solusi ini:

sudo cat /var/log/mosquitto/mosquitto.log | grep -v datab|perl -pe 's/(\d+)/localtime($1)/e'

Menggunakan ini di linux, tetapi harus bekerja pada WSL / cygwin.


2
Mengapa Anda tidak bisa menukar catuntuk tail -f? dan jika tidak maka kucing itu mubazir dan Anda harus membiarkan grep membuka file
hardillb
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.