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を置いていれば設定は不要です。