2017-12-04 11 views
2

암호화 키 (AES)로 Log4j 2.x 로깅을 구성해야합니다. 나는 log4j2.xml에서이 부분이 있습니다 테스트 목적으로앞에서 'sd :'라는 접두사가 log4j2.xml의 일부 속성에 주목했습니다.

<Encryption keyId="${sd:encryptionKeyId}" key="${sd:encryptionKey}"> 
    .... 
</Encryption> 

가, 내가 AES 키를 생성하는 온라인 생성 도구를 사용하고 난 ${sd:encryptionKey} 대신 직접 거기에 넣어. 그것은 효과가있었습니다. 예외는 없었어. 그것은 작동하지 않았다

<Property name="sd:encryptionKey">---my key here---</Property> 

:

은 그럼과 같이, 속성에 키를 이동하고 싶었다. 나는 sd: 접두사를 제거하고 다시 작동했습니다.

내 질문은 :이 접두어는 무엇을 의미하며이 파일에서이 파일에 직접 속성으로 올바른 키를 설정하고 있습니까?

답변

1

접두사 ${sd:...은 Log4j2가 내장 된 것입니다. Structured Data lookup입니다. 수동에서

: 그것은 StructuredDataMessages에서 값을 검색합니다 점에서

StructuredDataLookup은 MapLookup 매우 유사하다. 이 시스템 특성, 환경 변수의 Log4j2 쓰레드 컨텍스트지도 등

그것은 당신의 응용 프로그램에서 데이터를 가져옵니다 custom lookup를 구축하는 것이 쉽다에서 항목을 얻을 수 있도록

는 Log4j2 다른 검색을 제공합니다.

중요 : 조회에는 달러 및 중괄호가 필요합니다.

달성하고자하는 목적에 대해 질문 할 때처럼 간단한 속성을 정의하지만 환경 변수에 키를 넣어서 다른 사용자가 로그를 읽음으로써 키를 발견하지 못하게 할 수 있습니다 구성.

환경 변수 정의는 OS에 따라 다르지만 Linux에서는 ~/profile에서 할 수 있습니다. Windows에서는 제어판> 시스템> 고급> 환경 변수로 이동합니다.

그런 다음 environment variable lookup을 사용하여 Log4j2가 값을 가져올 수있게하십시오.

<Property name="encryptionKey">${env:MY_AES_KEY}</Property> 
+0

감사합니다. 하지만 어떻게 내 예제가 접두사로 작동하지 않습니다? 나는 다른 곳에서 그 가치를 지켜야한다고 생각한다. 접두어로 작업해야하는 위치를 제안 해 주시겠습니까? – developer10

+0

실제로 StructuredDataMessage 객체를 로깅 했습니까? –

+0

'$ {sd : key}'조회는'StructuredDataMessage'를 사용하여 로그 이벤트에 대한 값만 렌더링 할 수 있습니다. 이것은 기본 메시지가 아닙니다. 단순히 logger.log ("Hello {}", "world")를 실행하면'ParameterizedMessage'가 생깁니다. sd 조회는 그걸로 작동하지 않습니다. 명시 적으로'StructuredDataMessage' 오브젝트를 생성하고이를 로그 할 필요가 있습니다. –