Contents Up Previous Next 原文へのリンク

wxLogクラスの概要 wxLog classes overview

Classes: wxLog,
wxLogStderr,
wxLogStream,
wxLogTextCtrl,
wxLogWindow,
wxLogGui,
wxLogNull,
wxLogChain,
wxLogPassThrough,
wxStreamToTextRedirector

これはwxWidgetsに提供されるロギングクラスの全体的な概観です。「ロギング」という言葉には、ただ「インタラクティブでないメッセージ」というだけでなく、プログラムのアウトプット全てをも含む広範な意味があります。 wxWidgetsに含まれるログ機構では、ベースとなる wxLog クラス(標準的な log target へのインターフェースを定義)を、それと一緒に使うためのいくつかの標準的な関数群の実装と同様に提供します。
This is a general overview of logging classes provided by wxWidgets. The word logging here has a broad sense, including all of the program output, not only non interactive messages. The logging facilities included in wxWidgets provide the base wxLog class which defines the standard interface for a log target as well as several standard implementations of it and a family of functions to use with them.

まず第一に、wxLog クラスを使用するのにその知識は必要とされません。 このため、あなたはただ wxLogXXX() という関数について知っていればよいのです。それら全てが printf()vprintf() と同じ文法(すなわちフォーマットstringを第1引数に、そしてそれぞれ可変数の引数か可変的な引数リストのポインタを持つ)なのです。以下がその全てです。
First of all, no knowledge of wxLog classes is needed to use them. For this, you should only know about wxLogXXX() functions. All of them have the same syntax as printf() or vprintf() , i.e. they take the format string as the first argument and respectively a variable number of arguments or a variable argument list pointer. Here are all of them:

これらの関数の使用法はかなり簡単ですが、しかし「どうして C 標準の stdio や C++ の streamsのような、他のロギング機構を使わないのか」と聞かれるかもしれません。端的な答えとしては、それらは非常に汎用的なよいメカニズムだが、ログクラスが wxWidgetsに適合されるのに対して、それらはうまく適合されないからです。 wxWidgetsのログ関数を使用する利点のいくつかは以下のとおりです。
The usage of these functions should be fairly straightforward, however it may be asked why not use the other logging facilities, such as C standard stdio functions or C++ streams. The short answer is that they're all very good generic mechanisms, but are not really adapted for wxWidgets, while the log classes are. Some of advantages in using wxWidgets log functions are:

メッセージをログ出力する際に通常使用される全ての関数と、あなたがこれらを使用する理由について列挙しましたので、ここでこれらがどのように動作するかを記述します。
After having enumerated all the functions which are normally used to log the messages, and why would you want to use them we now describe how all this works.

wxWidgets は、ログ ターゲット の概念を持っています。それは wxLog の派生クラスです。そういうものとして、それはメッセージをログ出力する際に呼び出される基本クラスで仮想関数として実装しています。いかなるタイミングでも、アクティブ状態のログターゲットは1つだけで、これは wxLogXXX() 関数によって使用されます。ログ出力オブジェクト(すなわち wxLog から派生したクラスオブジェクト)の標準的な用法ですが、それは SetActiveTarget() 関数を呼び出すことでアクティブターゲットとしてインストールしておけば、それ以降は wxLogXXX() 関数を呼び出すと自動的に使用されます。
wxWidgets has the notion of a log target: it is just a class deriving from wxLog. As such, it implements the virtual functions of the base class which are called when a message is logged. Only one log target is active at any moment, this is the one used by wxLogXXX() functions. The normal usage of a log object (i.e. object of a class derived from wxLog) is to install it as the active target with a call to SetActiveTarget() and it will be used automatically by all subsequent calls to wxLogXXX() functions.

新しいログターゲットクラスを生成するためには、あなたはただ wxLog から派生させて、 DoLog()DoLogString() のいずれか(あるいは両方)を実装する必要があるだけです。もしあなたが標準的な wxLog のメッセージフォーマット(先頭に "Error:" か "Warning:" とタイムスタンプ)で満足していて、ただメッセージを他のどこかに送りたいだけなら、2番目ので十分です。 1番目のはあなたが望むものは何でもオーバーライドできるでしょうが、異なるメッセージの種類を自分で区別しなければなりません。
To create a new log target class you only need to derive it from wxLog and implement one (or both) of DoLog() and DoLogString() in it. The second one is enough if you're happy with the standard wxLog message formatting (prepending "Error:" or "Warning:", timestamping &c) but just want to send the messages somewhere else. The first one may be overridden to do whatever you want but you have to distinguish between the different message types yourself.

ここにいくつかの事前定義された wxLog から派生したクラスがあります。これらはあなたが新しいログターゲットクラスの作り方をみるのに役立つでしょうし、もちろん何の変更も加えずに使用することもできます。それは:

There are some predefined classes deriving from wxLog and which might be helpful to see how you can create a new log target class and, of course, may also be used without any change. There are:

ログターゲットは結合することも可能です。例えばあなたは通常通りの処理はしたうえで、さらにメッセージをどこか他のところ(ログファイル等)にリダイレクトしたいと思うかもしれません。このために「 wxLogChain 」と「 wxLogPassThrough 」は使用することができます。
The log targets can also be combined: for example you may wish to redirect the messages somewhere else (for example, to a log file) but also process them as normally. For this the wxLogChain and wxLogPassThrough can be used.