質問: javaの複数のプロセスからログ出力する際に排他制御を行うため、 Logback + SLF4Jの組み合わせでログ出力させることにしています。 C言語からもこのログファイルにログ出力する必要があり、 Logback + SLF4Jで排他制御している仕組みを使って C言語とjavaで排他制御して、ログ出力を行いたいと 思っています。 Logback + SLF4Jがどのような仕組みを使って排他制御を行っているか 教えていただけないでしょうか。 FileChannelというクラスを使っていますが、これらをC言語で排他することが出来ないでしょうか。 C言語で排他ロックするのは、以下のような感じでしょうか。 FILE * fp; fp=fopen("out.log","a")); flock(fileno(fp),LOCK_EX); lseek(fileno(fp),0,SEEK_SET); flock(fileno(fp),LOCK_UN);//ロックの解除 fclose(fp); FileChannelが同じような排他方法で排他ロックしていれば、C言語とJavaで排他ロックができるのですが。。
回答: 結局Logback+slf4j相当のものをCで書く手間がかかるし、logbackは設定によってどのようにログを出すかが変わるようですね。お勧めしません。 javaで標準入力等から受け取ったログメッセージをLogback + SLF4Jに出す小さなラッパーを書いて、それにCプログラムからログメッセージを渡すようにするのはどうでしょうか。 なお、LinuxなどUNIX系のOSであれば、複数のファイルが一つのファイルを書き込みオープンするのは出来ます。ファイルをオープンするときにO_APPENDフラグをつけておけばシステムコールレベルで交通整理してくれます。