log4cxx用のカスタムアペンダーを作成し、プロパティーファイル(組み込みアペンダーのようなもの)で設定することはできますか?可能であれば、log4cxxを再構築することなく(例えば、既存のappenderを派生/拡張することなく)これを行うことを好むでしょう。Log4cxxカスタムアペンダー
例に向けて教えていただけますか?
log4cxx用のカスタムアペンダーを作成し、プロパティーファイル(組み込みアペンダーのようなもの)で設定することはできますか?可能であれば、log4cxxを再構築することなく(例えば、既存のappenderを派生/拡張することなく)これを行うことを好むでしょう。Log4cxxカスタムアペンダー
例に向けて教えていただけますか?
log4cxxを再構築しなくても、AppenderSkeletonまたはWriterAppenderから継承し、同じ根本的な動作を得ることができます。
http://svn.apache.org/viewvc/incubator/log4cxx/trunk/src/test/cpp/vectorappender.h?view=markup http://svn.apache.org/viewvc/incubator/log4cxx/trunk/src/test/cpp/vectorappender.cpp?view=markup
brlcadの提案は正しいです - 私の会社では、我々は我々自身のカスタムアペンダのために、この方法を使用しました。
実際には、クラス定義内のDECLARE_LOG4CXX_OBJECT(CustomAppenderClassName)のようなマクロから、log4cxx環境を設定する構成ファイルからこれらを設定できます。 appenderの種類は、 "CustomAppenderClassName"で参照できます。 たconfigfile(古いスタイル)カスタムアペンダのための標準的なレイアウトを使用して、標準およびカスタムアペンダを示す:ほとんどの定格の答えのリンクからのように見えるよう
# Set "realtime" logger level to DEBUG and create two appenders - one to be
# a standard rolling file appender, the other custom.
log4j.logger.realtime=ERROR, StandardAppender, CustomAppender
# StandardAppenderis set to be a RollingFileAppender
log4j.appender.StandardAppender=org.apache.log4j.RollingFileAppender
log4j.appender.StandardAppender.File=example.log
log4j.appender.StandardAppender.MaxFileSize=100KB
# Keep one backup file
log4j.appender.StandardAppender.MaxBackupIndex=1
# StandardAppender uses PatternLayout.
log4j.appender.StandardAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.StandardAppender.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
# CustomAppender uses PatternLayout too
log4j.appender.CustomAppender=CustomAppenderClassName
log4j.appender.CustomAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.CustomAppender.layout.ConversionPattern=%m
私はこの答えを追加しています古いバージョン。私はversion 1.2.0を使用してカスタムアペンダーを作成しました.SysLogAppenderで行われたことに従います。高いレベルでは、次の手順を実行する必要があります。
void close()
とvoid append(const spi::InternalLoggingEvent& event)
名前空間yournamespaceとクラスのコードと例のクラスである:: ExampleCustomAppender:
#include <log4cplus/appender.h>
namespace yournamespace {
class ExampleCustomAppender : public Appender
{
public:
ExampleCustomAppender(const log4cplus::helpers::Properties & properties);
// Dtor
virtual ~ExampleCustomAppender();
// Methods
virtual void close();
/** Register the appender with the factory registry. */
static void registerAppender();
protected:
virtual void append(const spi::InternalLoggingEvent& event);
};
}
方法のその後の実装:
#include <log4cplus/spi/factory.h>
#include <sstream>
namespace yournamespace {
ExampleCustomAppender::ExampleCustomAppender(const helpers::Properties & properties)
: Appender(properties)
{
// if you want to use properties to configure your object do so here
}
ExampleCustomAppender::~ExampleCustomAppender()
{
}
void ExampleCustomAppender::registerAppender()
{
log4cplus::spi::AppenderFactoryRegistry & reg
= log4cplus::spi::getAppenderFactoryRegistry();
LOG4CPLUS_REG_PRODUCT(reg, "log4cplus::", ExampleCustomAppender,
yournamespace::, log4cplus::spi::AppenderFactory);
}
void ExampleCustomAppender::close()
{
// do anything you need to close the appender
closed = true;
}
// This method does not need to be locked since it is called by
// doAppend() which performs the locking
void LoggingCallbackAppender::append(const spi::InternalLoggingEvent& event)
{
if (!closed) {
std::stringstream logOutput;
layout->formatAndAppend(logOutput, event);
std::string outputString = logOutput.str();
}
}
}
最後に方法の例設定ファイルで使用することができます。
log4cplus.rootLogger=INFO, STDOUT, ROLLING, EXAMPLE
// other definitions for STDOUT and ROLLING here and then ...
log4cplus.appender.EXAMPLE=log4cplus::ExampleCustomAppender
log4cplus.appender.EXAMPLE.layout=log4cplus::PatternLayout
log4cplus.appender.EXAMPLE.layout.ConversionPattern=%d{%m/%d %H:%M:%S} [%t] %-5p %c{2} - %m%n
私はこのコードを他のコードを切り詰めて作成したので、それ自体がこの正確なフォーマットでコンパイルされていません。問題があれば教えてください。私はそれを修正します。
デフォルトアペンダーのように、プロパティファイルを使用して設定する方法を教えてください。 –
ここで説明されているように、オーバーライド関数 'setOption'があります:http://stackoverflow.com/a/36498559/838509 – Andrzej