log4j 로거를 동적으로 구성 할 수있는 방법이 있습니까? 각 클래스 인스턴스를 다른 파일에 쓰고 싶습니다. (인스턴스간에 고유 한 속성을 말합니다). XML 구성에서 파일을 제외한 모든 것을 구성한 다음 각 인스턴스에 대해 파일을 설정하려고합니다.Log4J 동적 구성
log4j를 사용하여이를 수행 할 수있는 방법이 있습니까?
log4j 로거를 동적으로 구성 할 수있는 방법이 있습니까? 각 클래스 인스턴스를 다른 파일에 쓰고 싶습니다. (인스턴스간에 고유 한 속성을 말합니다). XML 구성에서 파일을 제외한 모든 것을 구성한 다음 각 인스턴스에 대해 파일을 설정하려고합니다.Log4J 동적 구성
log4j를 사용하여이를 수행 할 수있는 방법이 있습니까?
여러분의 의견대로, 여기 내가 시도 할 것입니다.
앱의 시작 부분에 10 개의 인스턴스를 생성한다고 상상해보십시오. 어쨌든. 이름으로 당신의 log4j.xml에서
, 정의 10 펜더는 = yourUniqueId (이 고유 ID는 종류의 하드 코딩됩니다)는 yourUniqueid.log
에서 다음<logger name="yourUniqueId" additivity="false">
<level value="INFO" />
<appender-ref ref="fileAppender" />
</logger>
<appender name="fileAppender" class="org.apache.log4j.FileAppender">
<param name="File" value="/path/yourfile.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{dd MM yyyy HH:mm:ss,SSS} %m%n"/>
</layout>
</appender>
에 기록 펜더 다음을 확인하여 객체 생성자. 객체 고유 ID를 사용하여 올바른 Logger를 인스턴스화합니다. 그런
뭔가 :
public MyClassContructor(){
String uniqueId = getMyUniqueIdFromSomewhere();
logger = Logger.getLogger(uniqueId);
}
당신이 주위의 log4j.xml과 혼란에 원하지 않는 생각은, 당신은 당신의 고유 ID
을 기반으로하여 log4j API를 사용하여 자신의 펜더를 만들 것 이 같은뭔가 :
public class YourClass{
Logger logger = Logger.getLogger(YourClass.class);
SimpleLayout layout = new SimpleLayout();
FileAppender appender = null;
public YourClass() {
try {
appender = new FileAppender(layout, "/path/tolog/yourUniqueId.log", false);
logger.addAppender(appender);
logger.setLevel((Level) Level.DEBUG);
}
catch(IOException e) {
e.printStackTrace();
logger.error("Printing ERROR Statements",e);
}
}
YourClass의 각 인스턴스가 다른 로그 파일에 쓸 것입니다 이런 식으로. 당신이해야 할 일은 생성자를 호출 할 때이 uniqueId를 얻는 방법을 생각하는 것입니다.
희망이 있습니다.
잘 모르겠지만 각 클래스에 대해 Appender를 만들고 싶습니다. 각 클래스의 로거를 클래스 이름으로 인스턴스화해야합니다. 나는 당신이 많은 프로젝트를 끝내기 때문에 너무 많은 수업을 가지지 않기를 바란다. .log – Cygnusx1
나는이 수업을 원한다. 그 수업에는 몇 가지 사례가있다. 각 인스턴스에는 고유 한 ID가 있습니다. 각 인스턴스가 ID.log 파일을 말하도록 작성하고 싶습니다. – user182945