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
Bizlog4jService
TestBizLog4j
Log4j.properties
T2Log4j.properties
T3Log4j.properties
これだけの内容で、詳しく書いていません.エッセイでも、性能をテストしていません.問題があれば、自分で直すことができます.
最後に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
これだけの内容で、詳しく書いていません.エッセイでも、性能をテストしていません.問題があれば、自分で直すことができます.