programing

형식화된 메시지, 개체 배열, 예외를 기록하는 방법

prostudy 2022. 4. 21. 21:54
반응형

형식화된 메시지, 개체 배열, 예외를 기록하는 방법

입력된 메시지와 예외 스택 추적을 모두 기록하는 올바른 방법은 무엇인가?

logger.error(
    "\ncontext info one two three: {} {} {}\n",
    new Object[] {"1", "2", "3"},
    new Exception("something went wrong"));

다음과 유사한 출력을 생성하고자 함:

context info one two three: 1 2 3
java.lang.Exception: something went wrong
stacktrace 0
stacktrace 1
stacktrace ...

나의 SLF4J 버전은 1.6.1이다.

SLF4J 1.6.0을 기준으로 다중 파라미터가 있고 로깅 문장의 마지막 인수가 예외인 경우, SLF4J는 사용자가 마지막 인수를 단순한 파라미터가 아닌 예외로 취급하기를 원한다고 가정할 것이다.관련 FAQ 항목도 참조하십시오.

따라서 쓰기(SLF4J 버전 1.7.x 이상)

 logger.error("one two three: {} {} {}", "a", "b", 
              "c", new Exception("something went wrong"));

또는 쓰기(SLF4J 버전 1.6.x)

 logger.error("one two three: {} {} {}", new Object[] {"a", "b", 
              "c", new Exception("something went wrong")});

굴복할 것이다

one two three: a b c
java.lang.Exception: something went wrong
    at Example.main(Example.java:13)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at ...

정확한 출력은 기본 프레임워크(예: logback, log4j 등)뿐만 아니라 기본 프레임워크를 구성하는 방법에 따라 달라질 것이다.그러나 마지막 파라미터가 예외인 경우에는 기본 프레임워크와 무관하게 해석된다.

@Ceki의 대답 외에도 logback을 사용하고 프로젝트에서 구성 파일(일반적으로 logback.xml)을 설정하는 경우 로그를 정의하여 스택 추적도 표시할 수 있다.

<encoder>
    <pattern>%date |%-5level| [%thread] [%file:%line] - %msg%n%ex{full}</pattern> 
</encoder>

%ex 패턴이 차이를 만드는 것이다.

받아들여진 답은 대단하다.나는 단지 여기에 지금 작동하고 있는 나의 사례를 덧붙이고 있는데, 그것은 답변에 감사한다.이것은 다른 누군가에게 도움이 될지도 모른다.

사용하고 있다.SLF4J그리고logbackJSON 인코더와 함께.게다가, 나는 사용한다.marker그리고arguments내 생산량을 늘리기 위해

    logger.error(getMarker("errorEvent"),
                 "An error occurred",
                 entries(mapOf("someKey" to "someValue")),
                 new Exception())

출력:

{"레벨": "에러","이벤트": "오류이벤트""이벤트 데이터": {"썸키": "썸밸류"},"스택트레이스": "...스택스...","메시지": "오류 발생"}

물론 의 구성이 많다.logstash막후에서, 그러나 나는 단지 그 사실을 보여주고 싶었다.arguments로서 전래된.entries구성된 대로 표시됨eventData꼬리표를 달다

참조URL: https://stackoverflow.com/questions/6371638/how-to-log-formatted-message-object-array-exception

반응형