2017-10-04 7 views
1

Java 프로그램에서 여러 로그 파일을 사용하고 싶습니다.log4J2 변수/조회 값 저장 및 사용

따라서 log4j 문서에 따르면 조회 값은이를 사용하는 것으로 가정합니다.

Lookups 페이지에는 구성 파일을 작성하는 방법이 설명되어 있습니다. 그러나 구성 파일이 값을 검색 할 수 있도록 값을 저장하는 방법에 대한 정보는 거의 없습니다.

그래서 logfilename을 동적으로 채우고 싶습니다. envrimonment 작품과

테스트 :

<File name="MyFile" fileName="${env:USERERNAME}" immediateFlush="false" append="false"> 
     <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
</File> 

나는 System.getProperty("USER")는 자바 조회 ${java:USER} 일치한다고 가정 것이다 그러나 그것은 작동하지 않습니다.

System.out.println("USER: " + System.getProperty("USER")); 
System.out.println("USERNAME: " + System.getenv("USERNAME")); 

그래서 차이가

  • 상황에 맞는지도 조회
  • 자바 조회

의 변수를 채우는 방법 :

나는 사용하여 두 변수를 테스트 ?

+0

오타가 아닌가요? (당신은'$ {env : USERERNAME}'이라고 썼습니다.) –

+0

아니요 - –

+0

에 대한 질문을 편집했습니다. 당신의 설정에서 :

답변

1

log4j2에는 다양한 검색 방법이 있습니다. 내가 그들에게 몇 가지 세부 사항을 추가하자 -

상황에 맞는지도 조회 -을 상황에 맞는지도를 사용하여 값을 넣어 들어, 이하의 코드 사용 -

org.apache.logging.log4j.ThreadContext.put("logFileName", "app.log"); 

변수는 구성 파일에 액세스 할 수 있습니다 ${ctx:logFileName} 또는 %X{logFileName}를 사용하여.

컨텍스트 맵 조회는 일반적으로 각 사용자 요청에 대한 값, 즉 각각 thread에 대한 값을 원할 때 웹 응용 프로그램에서 사용됩니다.

환경 조회 - 환경 조회는 USERNAME, PLATFORM과 같은 시스템 환경 변수를 조회하는 데 사용됩니다. 아래 사용하여 Java의 모든 환경 변수를 인쇄 할 수 있습니다 -

System.out.println(System.getenv()); 

또는 특정 환경 변수 -

System.out.println(System.getenv("NUMBER_OF_PROCESSORS")); 

그러나, 자바 프로그램에서, 당신은 설정할 수 없습니다 환경 변수를.

코드에서 언급했듯이 ${env:NUMBER_OF_PROCESSORS} 구문을 사용하여 환경 변수에 액세스 할 수 있습니다.

조회는 자바 - 자바 조회 변수가 고정되어 있으며 자바 프로그램에서 설정 될 수 java version, hardware 등과 같은 자바 환경 정보이다.

이러한 변수는 ${java:vm} 구문을 사용하여 액세스 할 수 있습니다. 여기서 vm은 Java 환경 관련 변수 이름입니다.

시스템 등록 정보 조회 - 쉽게 얻을 코드 아래 사용하여 이러한 속성을 설정입니다 -

System.setProperty("logFileName", "app.log"); 
System.getProperty("logFileName"); 

변수가 ${sys:logFileName} 구문을 사용하여 log4j2 구성 파일에 액세스 할 수 있습니다.

이러한 시스템 속성에 대한 좋은 점은 -DlogFileName=app3.log과 같은 프로그램에 VM Arguments이라는 속성을 전달할 수 있다는 것입니다.

또한 주로 사용되는 날짜 조회, 지도 조회 등 같은 다른 검색 메커니즘이 있습니다. 응용 프로그램에서 동적으로 파일 이름을 설정할 때문에 나머지 세부 사항은


here을 확인할 수 있습니다 당신은 한 번만 파일 이름을 설정하려면, 당신 System property에 건의 할 것입니다. 하지만 초기화하기 전에 System Property을 설정하십시오. log4j

+0

아주 좋고 간단하고 상세한 설명 - muchas gracias –