私はglib/gobjectでCで書かれたライブラリを持っています。これは、g_debug()
呼び出しによってかなりの数のデバッグ情報を生成します。この情報はトラブルシューティングに非常に役立ちますが、実際のアプリケーションにライブラリが含まれている場合は表示したくありません。ですから、基本的には、デバッグ情報の量を制御/フィルタリングする方法が必要であり、glibでどのように動作するのか把握できませんでした。誰かが正しい方向に私を向けることができますか?glibのデバッグ情報のレベルを制御する方法は?
5
A
答えて
10
GLib
デベロッパーサイトで述べたように、環境変数をG_DEBUG
に設定してみることができます。 Running and debugging GLib Applications
のEnvironment variable
セクションのhttp://developer.gnome.org/glib/2.28/glib-running.htmlを参照してください。
EDIT:コード内のロガーを設定するために更新します。 コードでこれを行うにはg_log_set_handler
(http://developer.gnome.org/glib/2.29/glib-Message-Logging.html#g-log-set-handler)を使用できます。最初に、ログハンドラをダミー関数&を表示するダミー関数に設定すると、適切なログレベルを設定するために渡された引数に基づいてログハンドラをg_log_default_handler
に設定できます。ログレベルを設定レベル以上に設定するには、必要に応じてGLogLevelFlags
の値を操作する必要があります。
は、以下のコードサンプルは、いくつかのポインタ
#include <glib.h>
#include <stdio.h>
#include <string.h>
#define G_LOG_DOMAIN ((gchar*) 0)
static void _dummy(const gchar *log_domain,
GLogLevelFlags log_level,
const gchar *message,
gpointer user_data)
{
/* Dummy does nothing */
return ;
}
int main(int argc, char **argv)
{
/* Set dummy for all levels */
g_log_set_handler(G_LOG_DOMAIN, G_LOG_LEVEL_MASK, _dummy, NULL);
/* Set default handler based on argument for appropriate log level */
if (argc > 1)
{
/* If -vv passed set to ONLY debug */
if(!strncmp("-vv", argv[1], 3))
{
g_log_set_handler(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, g_log_default_handler, NULL);
}
/* If -v passed set to ONLY info */
else if(!strncmp("-v", argv[1], 2))
{
g_log_set_handler(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, g_log_default_handler, NULL);
}
/* For everything else, set to back to default*/
else
{
g_log_set_handler(G_LOG_DOMAIN, G_LOG_LEVEL_MASK, g_log_default_handler, NULL);
}
}
else /* If no arguments then set to ONLY warning & critical levels */
{
g_log_set_handler(G_LOG_DOMAIN, G_LOG_LEVEL_WARNING| G_LOG_LEVEL_CRITICAL, g_log_default_handler, NULL);
}
g_warning("This is warning\n");
g_message("This is message\n");
g_debug("This is debug\n");
g_critical("This is critical\n");
g_log(NULL, G_LOG_LEVEL_INFO , "This is info\n");
return 0;
}
このことができます希望を提供します願っています!
1
私は、カスタムログハンドラを実装し、ここでそれが判明した方法です:
void custom_log_handler (const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data)
{
gint debug_level = GPOINTER_TO_INT (user_data);
/* filter out messages depending on debugging level */
if ((log_level & G_LOG_LEVEL_DEBUG) && debug_level < MyLogLevel_DEBUG) {
return;
}
else if ((log_level & G_LOG_LEVEL_INFO) && debug_level < MyLogLevel_INFO) {
return;
}
g_printf ("%s\n", message);
}
int main(int argc, char *argv[])
{
...
if (verbose) {
g_log_set_handler (NULL, G_LOG_LEVEL_MASK, custom_log_handler, GINT_TO_POINTER (MyLogLevel_DEBUG));
}
else {
g_log_set_handler (NULL, G_LOG_LEVEL_MASK, custom_log_handler, GINT_TO_POINTER (MyLogLevel_NORMAL));
}
...
}
を、私はそれはそれは私が探しているまさにではありません
関連する問題
- 1. RESTful属性レベルのアクセス制御の表現方法は?
- 2. AX情報メッセージのレベルを変更する方法
- 3. メソッドからオプションのデバッグ情報を返す方法は?
- 4. ビルドログから承認のデバッグ情報を削除する方法
- 5. sbt [1.0.0,1.0.4]の情報メッセージを抑制する方法は?
- 6. DLLデバッグ情報
- 7. デバッグ情報オーバーレイ画面の表示方法は?
- 8. オブジェクトファイルは、DWARFデバッグ情報
- 9. 最低レベルがデバッグのときに情報レベルのメッセージが記録されないのはなぜですか?
- 10. Linuxモノアセンブリでfile + line infoデバッグ情報を取得する方法
- 11. PHPデバッグ:イメージリソース情報を表示する方法
- 12. TFS RM:デバッグ情報を無効にする方法
- 13. ハイブでUDFのデバッグ情報
- 14. Tomcat/Javaのデバッグ情報
- 15. SASベース内の無効なDOループ制御情報
- 16. バックトラック制御動詞についての情報
- 17. GCC:回線番号のデバッグ情報のみを生成する方法は?
- 18. C++で抽象(?)のpimplのデバッグ情報を取得する方法は?
- 19. Facebookのログイン情報:画像の有効期限を制御する方法URLがありますか?
- 20. hadoop fsコマンドの情報メッセージを抑制する方法
- 21. 電話ハードウェアのosの制御レベル
- 22. ggplot2凡例の「アルファ」レベルの制御
- 23. ASP.NET - サーバーの統計情報を表示する方法/情報?
- 24. Twitterのリスト情報を取得する方法(購読情報)
- 25. モデルバインディングを制御する方法は?
- 26. メディアボリュームを制御する方法は?
- 27. フラグメントonResumeを制御する方法は?
- 28. レディアニメーションを制御する方法は?
- 29. ラジオボタングループを制御する方法は?
- 30. cycle2を制御する方法は?
:-)誰かに役立つことを願っています。 -vに渡すことができるようにしたいのは、表示されるINFO以上のメッセージと-vvだけにデバッグを含めることだけです。パラメータが指定されていない場合は、WARNINGおよびCRITICALと表示されます。基本的に、私が探しているのは、これを内部アプリケーションから制御する方法です。私が理解する限り、G_DEBUG環境変数は異なる目的のためです。 – dtoux
ありがとう@ another.anon.coward。私は今あなたの編集に気付きました、そして、これはまさに私が探していた答えです。まあ、今回は自分でも同じことをやったことがありますが、やはりありがとうございます;-) – dtoux