2013-12-17 3 views
3

각 프로세스 런타임에 로그를 만들었습니다. 현재 가지고있는 문제는 현재 실행중인 프로세스의 자식이 아닌 모든 패키지가 로그를 내 파일에 쓰지 않는다는 것입니다. 예를 들어, running-.log라는 새 로그 파일을 만듭니다. 실행중인 프로세스는이 클래스의 com.me.foo입니다. com.you에 메소드를 호출하고 com.zee에 메소드를 호출합니다. com.you 및 com.zee 로그를 콘솔 로그가 아닌 실행중인 .log에 기록하고 싶습니다. getLogger() 메소드를 com.me.foo의 자식으로 변경하는 것만 큼 간단하지 않습니다. 일부 로그는 제 3 자 병에서 기록됩니다. 나는 실종됐다. 더 많은 코드 또는 추가 정보가 필요하면 알려주십시오. 이것을 처리 할 다른 방법이 있어야합니다. 로그 파일을 만들 수Log4J가 동적으로 로그 파일을 만듭니다.

감사

코드를 동적으로

public void createLogInstance(String packaging,String appenderName, String logFileName){ 
    Logger logger = Logger.getLogger(packaging); 

    Appender fileAppender = logger.getAppender(appenderName); 

    if(fileAppender != null){ 
    logger.removeAppender(fileAppender); 
    } 

    //Create the root appender 
    ConsoleAppender console = new ConsoleAppender(); 

    String pattern = ....; 
    console.setLayout(new PatternLayout(pattern)); 
    console.setThreshold(Level.FATAL); 
    console.activateOptions(); 

    logger.addAppender(console); 

    FileAppender fa = new FileAppender(); 
    fa.setName(appenderName); 
    fa.setFile(logFileName); 
    fa.setLayout(new PatternLayout(..)); 
    fa.setThreshold(Level.DEBUG); 
    fa.setAppend(true); 
    fa.activateOptions(); 
    logger.setAdditivity(false); 

    logger.addAppender(fa); 


} 

나는 rootLogger 누락 된

private static Logger logger = LoggerFactory.getLogger(You.class); 

답변

0

를 기록 com.you

private static Logger logger = LoggerFactory.getLogger(Zee.class); 

를 기록 com.zee .

Logger logger = Logger.getRootLogger(); 

이 줄

Logger logger = Logger.getLogger(packaging); 

을 변경 사람이 더 좋은 방법이 있다면 알려 주시기 바랍니다.

관련 문제