異邦人になってみた~上海の人 

読者です 読者をやめる 読者になる 読者になる

異邦人になってみた~上海の人 

上海在住です。中国時代劇をよく見ています、中国旅行の事、weiboやQQの設定、一眼レフカメラの写真掲載、上海での日々の生活情報を書いています

 記事一覧表示
スポンサーリンク

log4j2のコンフィグレーションファイルの読ませ方。備忘録

JAVA

log4j2は高速らしい。APACHEのページには早いと書いてある。

http://logging.apache.org/log4j/2.x/manual/async.html#AllAsync

log4j2を使うには
log4j-api-2.0.1.jar
log4j-core-2.0.1.jar
とlog4j2.xmlがあればいいみたい
log4jの記述のままでlog4j2を使う方法とかいろいろあるみたいですが、
面倒なのでそのまま直接log4j2を使う方法を探っていました。
直接使用するのは割と簡単なんですが、
パスを指定したかったので、
前まで使ってたDOMConfigurator.configure見たいなメソッドを探しています。
いろいろ探していましたが、どうもなさげなので
クラスパス上に置くしかないのか。。これだとなんか嫌だな。。
仕方ないのでVMの引数に-Dlog4j.configurationFileを設定することにしました。
ただ-Dlog4j.configurationFile="D:/XXX\workspace/XXXXXXXXXX/log4j2.xml"
と設定すると。。

ERROR StatusLogger Invalid URL D:/VLS/workspace1/testlog/logs/log4j2.xml java.net.MalformedURLException: unknown protocol: d

例外になっちゃいます。

  • Dlog4j.configurationFile="file:///D:/XXX\workspace/XXXXXXXX/log4j2.xml"

って設定しないといけないんですね。
これで読み込めます。


log4j2.xml
http://logging.apache.org/log4j/2.x/manual/async.html#AllAsync より)

<?xml version="1.0" encoding="UTF-8"?>
<!-- Don't forget to set system property4.-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector to make all loggers asynchronous. -->

<Configuration status="WARN">
 <Appenders>
  <!-- Async Loggers will auto-flush in batches, so switch off immediateFlush. -->
  <RandomAccessFile name="RandomAccessFile" fileName="async.log"
  immediateFlush="false" append="false">
   <PatternLayout>
    <Pattern>%d %p %c{1.} [%t] %m %ex%n</Pattern>
   </PatternLayout>
  </RandomAccessFile>
 </Appenders>
 <Loggers>
  <Root level="info" includeLocation="false">
   <AppenderRef ref="RandomAccessFile"/>
  </Root>
 </Loggers>
</Configuration>


java

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;


public class testlog {
  private static Logger logger = LogManager.getLogger(testlog.class);
  public static void main(String[] args){
    logger.info("info");
    logger.error("There is a error here");

先に-Dlog4j.configurationFile="file:///D:/XXX\workspace/XXXXXXXXXX/log4j2.xml"をしておいた後であれば、
後からJAVAソース上でパスを変更することができるみたいです。
System.setProperty("log4j.configurationFile", "file:///"+log4jPath);
※クラスパス上にlog4j2.xmlを置いていれば設定は不要です。