2016-05-23 15 views
1

私はLinuxのユーザー空間でCの組み込みアプリケーションを書いています。 syslog文字列にファイル名と関数名を追加する必要があります。 どうすればいいですか?syslog文字列にファイル名を追加する方法は?

注:

#define LOG(prio, ...) my_log(__FILE__, __LINE__, __func__, prio, __VA_ARGS__) 

と問題がである:より良い私の自己を説明するためには、私はファイル名とFUNC名前を記入したマクロを定義する必要があります..私がやったこと はfollwingでしたmy_logの実装:

void my_log(const char *file, int line, const char *func, int prio, const char *fmt, ...) 
{ 
//how to add the "filename:line, funcname: " string to the fmt string 
va_start(args, full_fmt); 
vsyslog(prio, full_fmt, args); 
va_end(args); 
} 
+0

名前を含む文字列をフォーマットしてsyslogに送信するのはどうですか?良い質問をしたいのであれば、何をしたのか、何が間違っているのだろうと思いますか? – harper

答えて

3

syslogは、フォーマット文字列のようなprintfを受け付けます。自動的に現在のソースファイルを含む文字列に展開さ

syslog(1, "%s:%d: something bad happened", __FILE__, __LINE__); 

__FILE__:あなたは、おそらくの線に沿って何かを参照しています。 __LINE__も同様に、現在のファイルの現在の行に展開されます。

+0

これを複数回使用する場合は、組み込みシステムのコンパイラが、バイナリ内の '__FILE__'文字列定数の別のコピーを使用するたびに残さないようにしてください。 – Alnitak

+0

@Alnitak、どのコンパイラも知っていますか? –

+0

私の頭の上から離れてはいけませんが、(AFAIK)は、彼らがしてはならないという標準を要求しています。 – Alnitak