2

JMS アペンダーに関する私の調査では、turorial1tutorial2が見つかりました。私はそれらに従おうとしましたが、サンプルプログラムを実行できませんでした。

最初に、ファイルlog4j.propertiesを作成しました

log4j.rootLogger=INFO, stdout, jms

#
log4j.logger.org.apache.activemq=INFO, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %-5p %c - %m%n

#
log4j.appender.jms=org.apache.log4j.net.JMSAppender
log4j.appender.jms.InitialContextFactoryName=org.apache.activemq.jndi.ActiveMQInitialContextFactory
log4j.appender.jms.ProviderURL=tcp://localhost:61616
log4j.appender.jms.TopicBindingName=logTopic
log4j.appender.jms.TopicConnectionFactoryBindingName=ConnectionFactory

および jndi.properties

topic.logTopic=logTopic

次に、Receiver.java をプロジェクトに追加しました

public class Receiver implements MessageListener {

    public Receiver() throws Exception {
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        Connection conn = factory.createConnection();
        Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
        conn.start();
        MessageConsumer consumer = sess.createConsumer(sess.createTopic("logTopic"));
        consumer.setMessageListener(this);
        Logger log = Logger.getLogger(Receiver.class);

        log.info("Test log");

        Thread.sleep(1000);
        consumer.close();
        sess.close();
        conn.close();
        System.exit(1);
    }

    public static void main(String[] args) throws Exception {
        new Receiver();
    }

    @Override
    public void onMessage(Message message) {
        try {
            // receive log event in your consumer
            LoggingEvent event = (LoggingEvent)((ActiveMQObjectMessage)message).getObject();
            System.out.println("Received log [" + event.getLevel() + "]: "+ event.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

プロジェクトからすべてのログを収集するには、Receiver を作成する必要がありますが、この単純な例を実行することさえできません。おそらく、次の出力が得られるため、正しく構成する方法がわかりません。

log4j:WARN No appenders could be found for logger (org.apache.activemq.transport.WireFormatNegotiator).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

コードにいくつかの行を追加したり、クラスパスにいくつかのファイルを追加したりしませんでしたか? 私はlog4jが初めてです。

編集:AspectJクラスでロガーを設定しました。しかし、ReceiverLoggerでも作成されてログが送信されると思うので、おそらくReceiver私のプロジェクトの他のクラスではなく、で行う必要があります。

static final Logger logger = Logger.getLogger(ReportingAspect.class);

@Before("setLoggingFile()")
public void setProperties() {
    PropertyConfigurator.configure("log4j.properties");
}

ProjectJMS
|
\_ src
|   \_ packages...
\_jndi.propeties
\_log4j.properties
4

3 に答える 3

1

log4j を設定するには: -Dlog4j.configuration= 設定ファイルへのパス

conf ファイルへのパスは次のようになります: À classpath 以外のパスにあるファイル。

  • -Dlog4j.configuration=file:/c:/foobar.lcf

その場合のクラスパスのElse:

  • -Dlog4j.configuration=foobar.lcf foobar.lcf がソース フォルダーのルートにある場合

見る:

jms の場合:

- 少なくとも jms.jar をクラスパスに追加します

  • JMS ブローカーが実行されていることを確認します (たとえば、activemq)。

よろしく

フィリップ

于 2012-08-06T14:48:31.463 に答える
0

setProperties()ロガーを使用する前にメソッドが呼び出されることを確認しましたか?

PropertyConfigurator通常、この種のエラーは、log4j による初期化中に構成ファイル (log4j.properties) が見つからなかった場合、または log4j を で初期化する前に何かをログに記録しようとした場合にのみポップアップしますPropertyConfigurator

最初に、それsetProperties()が期待どおりに呼び出されることを確認する必要があります。これが機能する場合は、構成をロードできるかどうかを検証してみてください。私が見たところ、構成ファイルが見つかるはずです。これを検証するには、いくつかの手順で構成をロードして、見つかったことを確認します。

  Properties props = new Properties();
  props.load( new FileInputStream( "log4j.properties" ) );
  PropertyConfigurator.configure( props );

構成が見つからない場合は、FileNotFoundException.

于 2012-08-06T15:57:47.403 に答える