私はここで殺されて、log4jをCassandraデータベースにリダイレクトしようとしています。私は考えることができるすべてを試すために膨大な時間を費やしたので、私が試したことのすべてをカバーすることはできませんが、私がやろうとしていることと私が何をしているのかを説明しようとします私ができる限り簡潔に実行しています。log4jメッセージをCassandraにログするにはどうすればよいですか?
私たちのコードベースは現在log4j 1.2.17を使用していますので、私の最初の試みはcom.datastax.logging.appender.CassandraAppenderを動作させることです。
関連Mavenの依存性がこれです:のlog4j.xmlで
<dependency>
<groupId>com.datastax.logging</groupId>
<artifactId>cassandra-log4j-appender</artifactId>
<version>3.1.0</version>
</dependency>
関連アペンダエントリはこれです:
<appender name="cassandra" class="com.datastax.logging.appender.CassandraAppender"/>
アペンダの「localhost」をデフォルト、または「127.0.0.1」、Iどちらを覚えていない、私は明示的に両方を試みた。また、ポート9042にデフォルト設定されています。これは私のCassandraの設定です。実際には、ここでカサンドラからのコンソール出力があります:
Binding thrift service to localhost/127.0.0.1:9160
私はこのから抜け出すことができますすべてが例外である:
log4j:ERROR Error
com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: localhost/127.0.0.1:9042 (null))
at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:196)
at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:80)
at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1145)
at com.datastax.driver.core.Cluster.init(Cluster.java:149)
at com.datastax.driver.core.Cluster.connect(Cluster.java:225)
at com.datastax.logging.appender.CassandraAppender.initClient(CassandraAppender.java:141)
at com.datastax.logging.appender.CassandraAppender.append(CassandraAppender.java:97)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
at org.apache.log4j.Category.callAppenders(Category.java:206)
<snip>
log4j:ERROR Error setting up cassandra logging schema: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: localhost/127.0.0.1:9042 (null))
壁に頭を強打した後、私は私が取得しようとするだろうと思いましたApache Cassandra appenderが動作しています。残念ながら、それはlog4j2のためだけであり、私たちのコードベースの更新は自明ではありません。それは、私はそれでさらに運が悪いと言いました。
小さなテストプロジェクトを作成して、何かを試してみました。 log4j2では、Cassandraはhttps://logging.apache.org/log4j/2.x/manual/appenders.html#CassandraAppenderによると、組み込みのappenderタイプとされています。しかし、それを私のlog4j2.xmlファイルで指定すると、絶対に見つけられません。
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-nosql</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>3.1.0</version>
</dependency>
のlog4j-NoSQLのためのPOMはここにある:https://github.com/apache/logging-log4j2/blob/master/log4j-nosql/pom.xmlここに私のポンポンファイルから該当する依存関係がある
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/logging/log4j/LogManager
at com.ge.enconn.TestClass.<init>(TestClass.java:10)
at com.ge.enconn.App.main(App.java:11)
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 2 more
:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
<File name="MyFile" fileName="all.log" immediateFlush="false" append="false">
<PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
<Cassandra name="Cassandra" clusterName="Test Cluster" keyspace="gii" table="gii_event_log" bufferSize="10" batched="true">
<SocketAddress host="localhost" port="9042"/>
<ColumnMapping name="id" pattern="%uuid{TIME}" type="java.util.UUID"/>
<ColumnMapping name="identifier" pattern="%marker"/>
<ColumnMapping name="message" pattern="%message"/>
<ColumnMapping name="priority" pattern="%level"/>
<ColumnMapping name="scope" pattern="%level"/>
<ColumnMapping name="time_stamp" literal="now()"/>
<ColumnMapping name="type" pattern="%level"/>
</Cassandra>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console"/>
<AppenderRef ref="MyFile"/>
<AppenderRef ref="Cassandra"/>
</Root>
</Loggers>
</Configuration>
はここで何が起こるかです:ここに私のファイルです。これはクラスパスに入るはずですよね?
あなたはOSを実行していますか?どのバージョンのlog4j2? – Adonis
Windows 10(1607)、log4j2 2.8.1。 log4j 1.2.17。 – Jamie
私の最初の質問は、log4jとlog4j2を同時に実行する理由でしょうか?あなたの問題に関しては、MS DOSコンソールだけでアプリケーションを実行している間に、私はすでにいくつかの奇妙な問題に遭遇しました(同じではありませんが)。 CygwinやGit bashで実行しようとしましたか? – Adonis