File appender를 프로그래밍 방식으로 설정해야합니다.LOG4J2 - 프로그래밍 방식으로 파일 작성기를 만드는 방법은 무엇입니까?
에 내 appenders를 설정하고 싶습니다. log4j2.xml하지만 런타임에이 appenders 중 하나에만 (프로그래밍 방식으로) 작성하고 싶습니다. 그들이 런타임에 프로그램 펜더를 추가하는 방법을 설명하는 인터넷의 다양한 튜토리얼에서 찾고
if(condition.equals("A")){
//write log on File_1
}else if(condition.equals("B")){
//write log on File_2
}else {
//write log on File_3
}
;
예
<Configuration status="WARN">
<Appenders>
<File name="File_1" fileName="c:/FILE_1.log" >
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
<File name="File_2" fileName="c:/FILE_2.log" >
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
<File name="File_3" fileName="c:/FILE_3.log" >
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="File_1"/>
<AppenderRef ref="File_2"/>
<AppenderRef ref="File_3"/>
</Root>
</Loggers>
런타임에 을 선택하는 방법이 xml 구성 파일에 정의 된 appenders 중 하나만 있습니까? 첫 번째 해결 방법 :
나는 다음과 같은 방법으로 문제를 해결하기 위해 노력했습니다,하지만 log4j2.xml에 정의 된 파일 프로그래밍 및 제거되지 않습니다 때문에 나는 내 솔루션에 의해 만족하고 있지 않다 첫 번째 Appender는 절대로 제거되지 않습니다! 나는 log4j2에 버그가 있다고 생각 : https://issues.apache.org/jira/browse/LOG4J2-135 내가 log4j2 팀에 문제를보고
static org.apache.logging.log4j.core.Logger coreLogger =
(org.apache.logging.log4j.core.Logger)LogManager.getLogger(MyClass.class.getName());
static LoggerContext context = (LoggerContext)coreLogger.getContext();
static BaseConfiguration configuration = (BaseConfiguration)context.getConfiguration();
static String FILE_1 = "File_1";
static String FILE_2 = "File_2";
static String FILE_3 = "File_3";
private static Map<String, Boolean> appendersMap;
static
{
appendersMap = new HashMap<String, Boolean>();
appendersMap.put(FILE_1, true);
appendersMap.put(FILE_2, true);
appendersMap.put(FILE_3, true);
}
/**
* Configure appenders.
*
* @param appender the appender
*/
public static void configureAppenders(String appender){
if(appender.equals(FILE_1)){
addAppenders(FILE_1);
removeAppenders(FILE_2,FILE_3);
}
else if(appender.equals(FILE_3)){
addAppenders(FILE_3);
removeAppenders(FILE_1,FILE_2);
}
else if(appender.equals(FILE_2)){
addAppenders(FILE_2);
removeAppenders(FILE_1,FILE_3);
}
}
private static void addAppenders(String appender){
if (!appendersMap.get(appender)){
appendersMap.put(appender, true);
coreLogger.addAppender(configuration.getAppender(appender));
}
}
private static void removeAppenders(String... appenders){
for(String appender : appenders){
appendersMap.put(appender, false);
coreLogger.removeAppender(configuration.getAppender(appender));
}
}
시스코, 내 코드가 내게 많은 도움이되었습니다. 나는 당신의 코드를 볼 때까지 내 appenders를 연결할 수 없었다. –