log 4 j拡張マルチプロファイル共存


今日は突然、運営プラットフォームの操作ログ記録を記録するために使用され、以前もよく考えたことがなく、jbossコンテナのlog 4 jプロファイルをシステムレベルで直接修正するのが一般的です.ビジネスクラスは、自分で手書きクラスをデータベースに記録します.今回の特殊事情を総合的に考慮し、業務ログをロゴファイルでハードディスクに記録することにした.これは以前使ったことがありません.自分でクラスレコードを書きたいなら、既製のものを持ってきたほうがいいと思います.log 4 jで記録しましょう.環境を構築したり、テストをしたりして、性能も同時性も問題ではないはずです.突然発見することができて、自分がlog 4 jで業務のログを配置するならば、jbossシステムと自分で配合する衝突があって、具体的に測定していないで、あなたが私をカバーするのではありませんて、私はあなたをカバーします.後で異なるビジネスグループに対して異なるプロファイルで構成したいと考えるため,マルチプロファイルが共存する問題を解決しなければならない.インターネットで調べ始めました.ロガーファクトリーを拡張したり、ロガーを拡張したり、手動setPropertiesを拡張したりしました.全部やってみたが,本当に私の要求に合っていない.
最後にsimple logあるいはaljを使うつもりですか、それともlog 4 j 1を使いますか.2.16ソースコードdownloadを読んで、構造図を見ていません.複雑だと聞いて、細かく研究しなかった.私は主に初期化とプロファイルストレージに関心を持っています.発見は主にLogger,LogManager,LoggerRepository,Hierarchyを用いた.logMangerはRepositorySelectorを作って拡張を提供して、説明の上で言います
     For example, when tomcat starts it will be able to install its
     own repository selector. However, if and when Tomcat is embedded
     within JBoss, then JBoss will install its own repository selector
     and Tomcat will use the repository selector set by its container,
     JBoss.
tomcatは自分のrespostitory、jbossは自分のrespositoryを使います.tomcatのソースコードを読んだことがなくて、RepositorySelectorを使うのはとても複雑だと感じて、HierarchyはRepositoryの1つの実現なので、中心の思想はすべての業務のモジュールが1つのHierarchyです.
コードの最も核心的なところは
    Logger rootLogger = new RootLogger(Level.ALL);
    LoggerRepository loggerRepository = new Hierarchy(rootLogger);
    PropertyConfigurator().doConfigure(path, loggerRepository);//パスはあなたのプロファイルのパスです
getLoggerの時はreturn loggerRepository.getLogger(name);
2つのクラスBizLog 4 jManager、Bizlog 4 jService、1つのテストクラスTestBizLog 4 jを使いやすく拡張しました
BizLog4jManager

package org.targtime.log;

import java.net.URL;
import java.util.Hashtable;

import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggerRepository;


/**
 * @comment      log4j LogManager,     LogManger ,      ,    。
 *    LoggerRepositorySelect   ,     hashtable    service。
 *        ,   。
 * @author Neil
 *
 */
public class BizLog4jManager  {
	static Hashtable<String,Bizlog4jService> htStr = new Hashtable<String,Bizlog4jService>();
	static Hashtable<URL,Bizlog4jService> htURL = new Hashtable<URL,Bizlog4jService>();
	static LoggerRepository lr;

	
	private static Bizlog4jService getService(String path){
		if(!htStr.containsKey(path)){
			htStr.put(path, new Bizlog4jService(path));
		}
		return (Bizlog4jService)htStr.get(path);
		
	}
	
	private static Bizlog4jService getService(URL pathU){
		if(!htURL.containsKey(pathU)){
			htURL.put(pathU, new Bizlog4jService(pathU));
		}
		return (Bizlog4jService)htURL.get(pathU);
		
	}

	public static Logger getLogger(String path,String name){
		return getService(path).getLogger(name);
	}
	public static Logger getLogger(URL pathU,String name){
		return getService(pathU).getLogger(name);
	}

}

Bizlog4jService

package org.targtime.log;

import java.net.URL;

import org.apache.log4j.Hierarchy;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.spi.LoggerRepository;
import org.apache.log4j.spi.RootLogger;
/**
 * @comment                           PropertyCongifurator   
 * @author Neil
 *
 */
public class Bizlog4jService {
	static Logger rootLogger;
	static LoggerRepository loggerRepository;

	public Bizlog4jService(String path) {
		initEvn();
		new PropertyConfigurator().doConfigure(path, loggerRepository);
	}

	public Bizlog4jService(URL pathU) {
		initEvn();
		new PropertyConfigurator().doConfigure(pathU, loggerRepository);
	}

	/**
	 *      service   RootLogger   Hierarchy.
	 */
	private void initEvn() {
		rootLogger = new RootLogger(Level.ALL);
		loggerRepository = new Hierarchy(rootLogger);

	}

	public Logger getLogger(String name) {
		return loggerRepository.getLogger(name);
	}

}

TestBizLog4j

import java.net.URL;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.targtime.log.BizLog4jManager;

public class TestBizLog4j {
	public static void main(String[] args) {
		
		//  3 logger 
		Logger log1; //   log4j logger1
		Logger log2; //   log4j logger2
		Logger log3; //   log4j logger2

		
		//  3 logger      
		URL pathU1 = BizLog4jManager.class.getResource("Log4j.properties");
		URL pathU2 = BizLog4jManager.class.getResource("T2Log4j.properties");
		URL pathU3 = BizLog4jManager.class.getResource("T3Log4j.properties");

		//  logger1,   log4j    
		PropertyConfigurator.configure(pathU1);
		log1 = Logger.getLogger("org.tt.neil1");
		log1.error("I'm common logger1 test ");

		//           logger2,         log4j    path|pathU,                
		//  debug  ,     , T2Log4j.properties  .
		log2 = BizLog4jManager.getLogger(pathU2, "org.tt.neil2");
		log2.debug("I'm biz logger2 test ");

		//   
		log3 = BizLog4jManager.getLogger(pathU3, "org.tt.neil3");
		log3.debug("I'm biz logger3 test ");


		//  3 logger   ,    logger1   ,    logger2,logger3           log1     
		for (int i = 0; i < 20000; i++) {
		         log1.info("common logger1 test after biz logger2,3");
			log1.error("common logger1 test after biz logger2,3");
		}

	}
}


Log4j.properties

log4j.category.org.zblog=INFO,A3
log4j.appender.A3=org.apache.log4j.RollingFileAppender
log4j.appender.A3.File=C:/my.log
log4j.appender.A3.MaxFileSize=20MB 
log4j.appender.A3.MaxBackupIndex=100
log4j.appender.A3.layout=org.apache.log4j.PatternLayout 
log4j.appender.A3.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n 
 

T2Log4j.properties

log4j.rootCategory=DEBUG,A3
log4j.appender.A3=org.apache.log4j.RollingFileAppender
log4j.appender.A3.File=C:/my2.log
log4j.appender.A3.MaxFileSize=20MB 
log4j.appender.A3.MaxBackupIndex=100
log4j.appender.A3.layout=org.apache.log4j.PatternLayout 
log4j.appender.A3.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n  
 

T3Log4j.properties

log4j.rootCategory=DEBUG,A3
log4j.appender.A3=org.apache.log4j.RollingFileAppender
log4j.appender.A3.File=C:/my3.log
log4j.appender.A3.MaxFileSize=20MB 
log4j.appender.A3.MaxBackupIndex=100
log4j.appender.A3.layout=org.apache.log4j.PatternLayout 
log4j.appender.A3.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n 
 

これだけの内容で、詳しく書いていません.エッセイでも、性能をテストしていません.問題があれば、自分で直すことができます.