WebCFace 2.5.2
Web-based Communication Framework & Dashboard-like UI
|
webcface/log.h
)テキストのログ出力を送受信します。
trace(0), debug(1), info(2), warning(3), error(4), critical(5) の6段階のレベルに分けたログを扱うことができます。 (外部ライブラリのspdlogをそのままインタフェースに利用していたver1の仕様を引き継いでいる)
Unknown message kind 8
というwarningが表示されます。) 逆にサーバーが2.4以上でクライアントが古い場合は問題ありません。を実行し、文字列を入力すると送信されます。
他のコマンドからpipeしてWebCFaceに送信するという使い方ができます。 詳細は webcface-send のページを参照
C++ 2.0 Log::append() でログを送信することができます。 時刻(std::chrono::system_clock)を指定することもできます(省略するとnow()になります)
webcfaceに送信されるのみで、コンソールへの出力などは行いません。
コンソールにも表示しつつwebcfaceにも送信したい場合は、 std::ostream を使って
のように出力したり、
のようにcoutやcerrの出力先を置き換えることができます。 これらはWebCFaceに出力すると同時に標準エラー出力にも出力します。 (spdlogのstderr_sinkを使って 2.0fputs,fputcを使って 直接stderrに出力されます) またこの場合はログレベルが設定できず、常にinfoになります。
2.0 wostreamを使用したい場合は wcli.loggerWOStream(), wcli.loggerWStreamBuf() を使用するとWebCFaceに出力すると同時にstderrにも出力されます。 その際Windowsでは出力文字列は usingUTF8() の設定に従いUTF-8またはANSIに変換されるため、出力したいコンソールのコードページに設定を合わせてください。
2.4 Valueなど他のデータ型と同様名前をつけて複数のLogを送信することができます。 名前を省略した場合、および過去のバージョンから送信されたログデータは "default"
という名前のLogとして扱われます。
JavaScript 1.8 Log.append() でログを送信することができます。 webcfaceに送信されるのみで、コンソールへの出力などは行いません。
1.9 Valueなど他のデータ型と同様名前をつけて複数のLogを送信することができます。 名前を省略した場合、および過去のバージョンから送信されたログデータは "default"
という名前のLogとして扱われます。
Python 2.0 Log.append() でログを送信することができます。 時刻を指定することもできます(省略するとdatetime.datetime.now())になります
webcfaceに送信されるのみで、コンソールへの出力などは行いません。
コンソールにも表示しつつwebcfaceにも送信したい場合は、 Python標準のloggingモジュールを使うことができます。 Client.logging_handler をLoggerのhandlerとして追加して使います。
printを使いたい場合は、 Client.logging_io で取得できるIOオブジェクトを使って送信することもできます。 logging_io はwebcfaceに送信すると同時にsys.__stderr__
にも出力します。 py import sys sys.stdout = wcli.logging_io print("hello")
2.1 Valueなど他のデータ型と同様名前をつけて複数のLogを送信することができます。 名前を省略した場合、および過去のバージョンから送信されたログデータは "default"
という名前のLogとして扱われます。 cpp wcli.log("hoge").append(2, "this is info");
spdlog (C++) spdlog: https://github.com/gabime/spdlog
spdlog→webcfaceにログを送信するsinkの例(ver1.11までwebcfaceに含まれていた実装):
log4js (JavaScript) log4js: https://www.npmjs.com/package/log4js
log4js→webcfaceにログを送信するappenderの例(ver1.7までwebcfaceに含まれていた実装):
Client::logger() はWebCFaceと標準エラー出力に出力するloggerです。 これを使ってログを出力できます。
これと同様にtrace
, debug
, info
, warn
, error
, critical
の6段階のログレベルを使うことができます。
上の例のようにspdlogではfmtライブラリを使用しており数値などをフォーマットして出力することができます。 詳細はspdlog, fmtを参照してください
Client::loggerSink()でログをwebcfaceに送信するsinkを取得できるので、これを他のloggerにセットして使うこともできます。 または Client.logger() の出力先のsinkを変更することもできます。
C++ Member::log() でLogクラスのオブジェクトが得られ、 Log::tryGet() でデータのリクエストをするとともにログが得られます。
データは webcface::LogLine のリストとして得られ、メッセージ、ログレベル、時刻を取得できます。
webcface::Log::keepLines()
で変更できます。 負の値にすると無制限に保持するようになります(ver2.0までと同じ動作)
1.1.5 Log::tryGet(), get() はClientが保持しているログデータすべてを返しますが、 前回からの差分だけが必要な場合は、データの処理後に Log::clear() で受信したログデータをすべて削除することもできます。
1.7 Log::request() で明示的にリクエストを送信することもできます。
2.0 tryGetW(), getW() ではstringの代わりにwstringを使った webcface::LogLineW のリストで返ります。
2.4 Valueなど他のデータ型と同様、 wcli.member("foo").log("hoge")
のように受信するLogの名前を指定できます。 名前を省略した場合、および過去のバージョンから送信されたログデータは "default"
という名前のLogとして扱われます。
JavaScript Member.log() でLogクラスのオブジェクトが得られ、 Log.tryGet() でデータのリクエストをするとともにログが得られます。
データは LogLine のリストとして得られ、メッセージ、ログレベル、時刻を取得できます。
Log.keepLines = 1000
などとすると変更できます。 負の値にすると無制限に保持するようになります(ver2.0までと同じ動作)
1.0.4 Log.tryGet(), get() はClientが保持しているログデータすべてを返しますが、 前回からの差分だけが必要な場合は、データの処理後に Log.clear() で受信したログデータをすべて削除することもできます。
1.1 Log::request() で明示的にリクエストを送信することもできます。
1.9 Valueなど他のデータ型と同様、 wcli.member("foo").log("hoge")
のように受信するLogの名前を指定できます。 名前を省略した場合、および過去のバージョンから送信されたログデータは "default"
という名前のLogとして扱われます。
Python Member.log() でLogクラスのオブジェクトが得られ、 Log.try_get() でデータのリクエストをするとともにログが得られます。
データは webcface.LogLine のリストとして得られ、メッセージ、ログレベル、時刻を取得できます。
Log.tryGet(), get() はそれまでに受信したログデータすべてを返しますが、 前回からの差分だけが必要な場合は、データの処理後に Log.clear() で受信したログデータをすべて削除することもできます。
Log::request() で明示的にリクエストを送信することもできます。
2.1 Valueなど他のデータ型と同様、 wcli.member("foo").log("hoge")
のように受信するLogの名前を指定できます。 名前を省略した場合、および過去のバージョンから送信されたログデータは "default"
という名前のLogとして扱われます。
(サーバーが2.1以降の場合のみ)
ログをすべて受信しなくても、ログが少なくとも1行存在するかどうか(他memberが送信しているかどうか)は取得することができます。
Log.exists() はログが少なくとも1行存在する場合、trueを返します。 tryGet() と違い、ログデータそのものを受信するリクエストは送られません。
2.4 1.9 2.1 Valueなどの他の型と同様、 Memberが送信しているLogのリストを取得したり、 LogEntry イベントも使えるようになりました。
受信したデータが変化したときにコールバックを呼び出すことができます。 コールバックを設定することでもその値はリクエストされます。
また、データが変化したどうかに関わらずそのMemberがsync()したときにコールバックを呼び出したい場合は Member::onSync() が使えます
使い方は Value と同様なのでそちらを参照してください