2012-04-02 26 views
5

Recientemente hemos cambiado de Log4J a Logback. El inicio de sesión parece funcionar bien, excepto los seguimientos de pila en SyslogAppender. Están prefijados al igual que los mensajes de registro restantes.Logback SyslogAppender stacktrace logging prefix

¿Hay alguna manera de desactivar este prefijo y asegurarse de que se imprimirán como en Log4J SyslogAppender? Gracias por adelantado.

comportamiento actual: Comportamiento

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) 

deseado:

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) 

logback.xml actual de 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> 

Respuesta

6

Puede solucionarlo estableciendo el parámetro throwableExcluded en true y especificando la excepción en el patrón de sufijo.

<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> 

Dependiendo del servidor syslog utiliza, puede que tenga que apagar carácter de control de escape con el fin de que el texto se muestra correctamente. p.ej. $EscapeControlCharactersOnReceive off para rsyslog v5

0

Logback's Syslog Appender no está manejando este derecho. Tendría que escribir el suyo. Puede estar basado en el original. Básicamente el problema está aquí:

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

Cuando está descargando, envía un nuevo mensaje a syslog. Si quieres evitarlo, deberías tirar solo después de la pila entera.