2012-04-02 5 views
5

Niedawno zmieniliśmy Log4J na Logback. Rejestrowanie wydaje się działać dobrze oprócz śledzenia stosu w SyslogAppender. Są one prefiksowane, podobnie jak pozostałe komunikaty dziennika.Logback SyslogAppender rejestracja zapisów stacktrace

Czy istnieje sposób, aby wyłączyć ten prefiks i upewnić się, że zostaną wydrukowane, podobnie jak w Log4J SyslogAppender? Z góry dziękuję.

Aktualny zachowanie:

Apr 02 12:31:08 host.name 2012-04-02T12:31:08.418+0200 ajp-bio-8009-exec-7 com.gooddata.exception.servlet.HttpExceptionTranslator ERROR: Processing client_request=/gdcwebapp/gdc/projects/FoodMartDemo/groups/everyone status=FAILED errorCode=gdc.usergroups.default_group_modification errorDescription="Attempt to modify default group (everyone)" exceptionId=abc37cf0-9c56-4e68-a4a7-2111ca823fd4 component=webapp request_id=cAWvICOaKVFF1VvI userId=1 projectId=FoodMartDemo nodeId=nodeOne nodeId=nodeOne, requestId=cAWvICOaKVFF1VvI, userId=1, projectId=FoodMartDemo 
Apr 02 12:31:08 host.name #011at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
Apr 02 12:31:08 host.name #011at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
Apr 02 12:31:08 host.name #011at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
Apr 02 12:31:08 host.name #011at java.lang.reflect.Method.invoke(Method.java:601) 
Apr 02 12:31:08 host.name #011at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:212) 
Apr 02 12:31:08 host.name #011at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126) 
Apr 02 12:31:08 host.name #011at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96) 
Apr 02 12:31:08 host.name #011at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617) 
Apr 02 12:31:08 host.name #011at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578) 
Apr 02 12:31:08 host.name #011at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) 
Apr 02 12:31:08 host.name #011at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:900) 

pożądanego zachowania:

Apr 02 12:31:08 host.name 2012-04-02T12:31:08.418+0200 ajp-bio-8009-exec-7 com.gooddata.exception.servlet.HttpExceptionTranslator ERROR: Processing client_request=/gdcwebapp/gdc/projects/FoodMartDemo/groups/everyone status=FAILED errorCode=gdc.usergroups.default_group_modification errorDescription="Attempt to modify default group (everyone)" exceptionId=abc37cf0-9c56-4e68-a4a7-2111ca823fd4 component=webapp request_id=cAWvICOaKVFF1VvI userId=1 projectId=FoodMartDemo nodeId=nodeOne nodeId=nodeOne, requestId=cAWvICOaKVFF1VvI, userId=1, projectId=FoodMartDemo 
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
          at java.lang.reflect.Method.invoke(Method.java:601) 
          at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:212) 
          at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126) 
          at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96) 
          at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617) 
          at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578) 
          at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) 
          at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:900) 

Aktualny logback.xml dla SyslogAppender:

<appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender"> 
    <facility>local2</facility> 
    <syslogHost>localhost</syslogHost> 
    <suffixPattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} %t %c %p: %m component=webapp request_id=%X{requestId} userId=%X{userId} projectId=%X{projectId} nodeId=%X{nodeId} %X%n</suffixPattern> 
    </appender> 

Odpowiedz

6

Możesz to naprawić, ustawiając parametr throwableExcluded na true i określając wyjątek we wzorcu sufiksu.

<appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender"> 
    <syslogHost>localhost</syslogHost> 
    <facility>LOCAL7</facility> 
    <throwableExcluded>true</throwableExcluded> 
    <suffixPattern>%d{ISO8601} %p %t %c{0}.%M - %m%n%xException</suffixPattern> 
</appender> 

zależności od serwera syslog używanego, może trzeba wyłączyć w celu ucieczki znak kontrolny dla tekst poprawnie renderowania. na przykład $EscapeControlCharactersOnReceive off dla rsyslog v5

0

Aplikacja logistyki Syslog firmy Logback nie obsługuje tego prawa. Musisz napisać własną. Może być oparty na oryginale. Zasadniczo problem jest tutaj:

StringBuilder sb = new StringBuilder(); 
     sb.append(stackTracePrefix).append(step); 
     sw.write(sb.toString().getBytes()); 
     sw.flush(); 

Podczas płukania, wysyła nową wiadomość do syslog. Jeśli chcesz tego uniknąć, będziesz musiał spuścić tylko po całym stosie.