パスワードを忘れた? アカウント作成
495654 journal

NightWalkerの日記: log4cxxの0.9.7以降

日記 by NightWalker

log4j 1.3相当のDailyRollingFileAppdenderを使いたくて、
CVSベースでは開発が進んでいるというlog4cxxの最新アーカイブを探していたら
ここで発見。
5/1現在で、Ver0.10.0だった。
ソースだけじゃなく、win32用にビルド済みのzipも置いてあって便利。
名前はlog4cxxd.dll, log4cxxd.libに変わっていた。

さて、組み込んでみようと思いきや、コンパイルが通らない。しかも、
LOG4CXX_INFO( Logger::getLogger( "comm.CParam" ), "OnSocket(id="<<uid ) ;
といった基本的な、出力ストリーム演算子でエラーになる。
調べて見ると、Ver0.9.8からはLOG4CXX_INFOマクロ等が変更されて使えなくなっていた。
代わりに
LOG4CXX_INFO(logger, logfmt("%s %s %d", arg1, arg2, arg3));
といった構文は使えるようだが、Ver0.9.7のマクロを別名で定義しなさいというアドバイスが生々しい。

TCHAR.Hでunicode等を扱うための制約として、このリンク (日本語リンク)が示されていたが、
どうしてなのかがよく判らない。

----
追記1
マクロを定義しなおして実行して見ると、大量のメモリリークが発生。
dllを読み込んだだけで発生する模様。欝になる。
これ?

追記2
マクロは次のようになった。

#pragma warning( disable:4250 ) // 警告が出るので消す
#include <log4cxx/logger.h>
#include <log4cxx/xml/domconfigurator.h>
#include <log4cxx/helpers/exception.h>
using namespace log4cxx;
#pragma warning( default:4250 ) // 警告レベルを戻す
#include <iostream>
#include <sstream>
#include <iomanip> // ストリーム出力でstd::hexを使えるようにする

#define LOG4CXX097_INFO(logger, message) { \
        if (logger->isInfoEnabled()) {\
        std::ostringstream oss; \
        oss forcedLog(::log4cxx::Level::INFO, oss.str()); }}

追記3
0.10.0だと次のようなappenderが動く

<appender name="rollingFile" class="org.apache.log4j.rolling.RollingFileAppender">
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<param name="fileNamePattern" value="log\\app-%d{yyyy-MM-dd}.log"/>
</rollingPolicy>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %5p %c - %m%n"/>
</layout>
<param name="Append" value="true"/>
</appender>

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

コンピュータは旧約聖書の神に似ている、規則は多く、慈悲は無い -- Joseph Campbell

読み込み中...