Log 4 j使用の効率2
4988 ワード
1、効率
log 4 jはdebugレベルの出力を閉じるが、コードにはlog.Debug(Object msg)の書き方が異なり、3~5倍の時間がかかります.したがって、logを最適化する.debug()このメソッドの呼び出し、log.info()も同じです.
2、log 4 jの最適化の概要
log 4 jは、ログ4 jの初期化時にファイルを開き、プロセスが終了するまでファイルの書き込み制御を維持するなど、多くの最適化を行います.このようにI/Oをオンにする回数を制御します.
他にも最適化があり、大量のキャッシュが使用されています.debugメソッドのソースコードを参照してください.
出力レベルをINFOに設定すると、呼び出しdebug()が直接返されます.LOGを使用する.debug(「ビジネスis」+xxxObj)では、仮想マシンがdebugメソッドを実行する前に文字列を接続する必要があります.これが最適化する必要があります.
3、効率コード及びテスト
次は乾物、fuck goods
テストツールクラスTestUtil
コールバック関数
主クラスのテスト
log 4 j構成クラス、出力レベルをINFOレベルに調整
実行後の結果
最適化の効果は明らかで、DEBUGレベルのログを閉じた後、log.デバグの書き方によって、運転時間が異なります
4、類似の方法
を除いて
まだ
まだ
Log 4 jのHelloWorldはjavaSEの中で入門して1を使います
Log 4 j使用の効率2
Log 4 jの出力フォーマット3
Log 4 jはSystem.out log 4 j出力4を手に入れる
log 4 jはdebugレベルの出力を閉じるが、コードにはlog.Debug(Object msg)の書き方が異なり、3~5倍の時間がかかります.したがって、logを最適化する.debug()このメソッドの呼び出し、log.info()も同じです.
2、log 4 jの最適化の概要
log 4 jは、ログ4 jの初期化時にファイルを開き、プロセスが終了するまでファイルの書き込み制御を維持するなど、多くの最適化を行います.このようにI/Oをオンにする回数を制御します.
他にも最適化があり、大量のキャッシュが使用されています.debugメソッドのソースコードを参照してください.
public void debug(Object message) {
if(repository.isDisabled(Level.DEBUG_INT))
return;
if(Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel())) {
forcedLog(FQCN, Level.DEBUG, message, null);
}
}
出力レベルをINFOに設定すると、呼び出しdebug()が直接返されます.LOGを使用する.debug(「ビジネスis」+xxxObj)では、仮想マシンがdebugメソッドを実行する前に文字列を接続する必要があります.これが最適化する必要があります.
3、効率コード及びテスト
次は乾物、fuck goods
テストツールクラスTestUtil
package util;
public class TestUtil {
/**
*
* , TestCallBack execute
*
* @param testCallBack
*/
public static long testTime(TestCallBack testCallBack) {
long begin = System.currentTimeMillis(); //
testCallBack.execute(); // /
long end = System.currentTimeMillis(); //
long cost = (end - begin);
return cost;
}
}
コールバック関数
package util;
public interface TestCallBack {
public void execute();
}
主クラスのテスト
package util;
import org.apache.log4j.Logger;
import util.TestCallBack;
import util.TestUtil;
public class EfficientTest {
private final static Logger LOG = Logger.getLogger(EfficientTest.class);
private final static int MAX_LOOP = 100 * 1000 * 1000;
/**
*
*/
public long log() {
long cost = TestUtil.testTime(new TestCallBack() {
@Override
public void execute() {
for (int i = 0; i < MAX_LOOP; i++) {
/**
* "test" + "abc" + str ,
*/
String str = "tt";
LOG.debug("test" + "abc" + str);
/**
* "test" + "abc" , ,
*/
// LOG.debug("test" + "abc");
}
}
});
System.out.println(" cost:" + cost);
return cost;
}
/**
*
*/
public long logEfficient() {
long cost = TestUtil.testTime(new TestCallBack() {
@Override
public void execute() {
for (int i = 0; i < MAX_LOOP; i++) {
if (LOG.isDebugEnabled()) {
String str = "tt";
LOG.debug("test" + "abc" + str);
// LOG.debug("test" + "abc");
}
}
}
});
System.out.println("efficient cost:" + cost);
return cost;
}
public static void main(String[] args) {
EfficientTest test = new EfficientTest();
for (int i = 0; i <= 9; i++) {
System.out.println("==== ====" + i);
if (i % 2 > 0) {
long log = test.log();
long logEfficient = test.logEfficient();
System.out.println("log/logEfficient,"
+ (((double) log / logEfficient) * 100.0)
+ "% increase");
} else {
long logEfficient = test.logEfficient();
long log = test.log();
System.out.println("log/logEfficient,"
+ (((double) log / logEfficient) * 100.0)
+ "% increase");
}
// System.out.println();
}
}
}
log 4 j構成クラス、出力レベルをINFOレベルに調整
log4j.rootCategory=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%p [%t] %C.%M(%L) | %m%n
実行後の結果
==== ====0
efficient cost:434
cost:2054
log/logEfficient,473.2718894009216% increase
==== ====1
cost:1822
efficient cost:434
log/logEfficient,419.8156682027649% increase
==== ====2
efficient cost:394
cost:1823
log/logEfficient,462.69035532994917% increase
==== ====3
cost:1805
efficient cost:400
log/logEfficient,451.25% increase
==== ====4
efficient cost:400
cost:1805
log/logEfficient,451.25% increase
==== ====5
cost:1790
efficient cost:396
log/logEfficient,452.02020202020196% increase
==== ====6
efficient cost:397
cost:1798
log/logEfficient,452.89672544080605% increase
==== ====7
cost:1786
efficient cost:393
log/logEfficient,454.45292620865143% increase
==== ====8
efficient cost:401
cost:1969
log/logEfficient,491.0224438902743% increase
==== ====9
cost:1801
efficient cost:392
log/logEfficient,459.4387755102041% increase
最適化の効果は明らかで、DEBUGレベルのログを閉じた後、log.デバグの書き方によって、運転時間が異なります
4、類似の方法
を除いて
LOG.isDebugEnabled()
まだ
LOG.isInfoEnabled()
まだ
LOG.isEnabledFor(Priority.DEBUG);
Log 4 jのHelloWorldはjavaSEの中で入門して1を使います
Log 4 j使用の効率2
Log 4 jの出力フォーマット3
Log 4 jはSystem.out log 4 j出力4を手に入れる