2011-08-09 5 views
4

log4jロガーを動的に構成する方法はありますか。私は、クラスの各インスタンスが異なるファイルに書き込むようにしたい(インスタンス間で一意のいくつかのプロパティを言う)。私はXML設定からファイルを除いてすべてを設定し、各インスタンスに対してファイルを設定したいと思います。Log4J動的構成

log4jを使用してこれを行う方法はありますか?

+0

わかりませんが、あなたが持っているクラスごとにアペンダーを作成したいと思います。各クラスのロガーをクラス名でインスタンス化する必要があります。私はあなたのプロジェクトにあまりにも多くのクラスを持っていないことを願っています。多くの.logで終わるので、 – Cygnusx1

+0

私はちょうどクラスのために、これはいくつかのインスタンス(10まで言うことができます)が必要です。各インスタンスには一意のIDが割り当てられます。私はそれぞれのインスタンスがファイルID.log – user182945

答えて

7

あなたのコメントから、私は何をしようとしています。

あなたのアプリの最初に10個のインスタンスを作成すると想像してください。とにかくあなたのlog4j.xmlで

、名前= yourUniqueIdで10アペンダを定義する(この一意のIDは、一種のハードコードされます)

yourUniqueid.log

<logger name="yourUniqueId" additivity="false"> 
    <level value="INFO" /> 
    <appender-ref ref="fileAppender" /> 
</logger> 

<appender name="fileAppender" class="org.apache.log4j.FileAppender"> 
<param name="File" value="/path/yourfile.log"/> 

    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{dd MM yyyy HH:mm:ss,SSS} %m%n"/> 
    </layout> 
</appender> 

にこれらのアペンダの書き込みを行いその後、あなたの中にオブジェクト固有のIDを持つ適切なLoggerをインスタンス化します。そのような

何か:

public MyClassContructor(){ 
    String uniqueId = getMyUniqueIdFromSomewhere(); 
    logger = Logger.getLogger(uniqueId); 
} 

私はあなたの周りのlog4j.xmlを台無しにしたくないと思いますが、あなたはあなたのユニークなID

に基づいてのlog4j APIを使用して、独自のアペンダを作成する必要があります

このような何か:YOURCLASSの各インスタンスは異なるログファイルに書くでしょう

public class YourClass{ 
Logger logger = Logger.getLogger(YourClass.class); 
SimpleLayout layout = new SimpleLayout(); 
FileAppender appender = null; 

public YourClass() { 
    try { 
     appender = new FileAppender(layout, "/path/tolog/yourUniqueId.log", false); 
     logger.addAppender(appender); 

     logger.setLevel((Level) Level.DEBUG); 

    } 
    catch(IOException e) { 
     e.printStackTrace(); 
     logger.error("Printing ERROR Statements",e); 
    } 
} 

この方法です。あなたがしなければならないことは、コンストラクタを呼び出すときにこのuniqueIdを取得する方法を考えることです。

希望します。

関連する問題