2012-02-28 27 views
6

Al revisar javadoc para PatternLayout, noté que recomienda utilizar EnhancedPatternLayout en su lugar. Sin embargo, parece hacer más o menos lo mismo.¿Cuáles son las principales diferencias entre EnhancedPatternLayout y PatternLayout?

¿Cuáles son las principales diferencias, especialmente las que debo tener en cuenta?

También me pregunto por qué hicieron una clase separada en lugar de mejorar la clase original. Cualquier diferencia de sintaxis?

+1

Al menos una diferencia importante es el soporte para las zonas horarias - ver http://stackoverflow.com/questions/1785725/specify-time-zone-of-log4js-date. – B5A7

Respuesta

3

Compruebe el documentation, todo está explicado. EnhancedPatternLayout es una versión mejorada de PatternLayout. Se debe usar con preferencia a PatternLayout (excepto por razones de compatibilidad con PatternLayout).

PatternLayout contiene algunos problemas que no están presentes en EnhancedPatternLayout especialmente con la sincronización.

+5

Hice esta pregunta exactamente porque ya había revisado la documentación y no se explica nada. Sí, está mejorado, puedo verlo también por su nombre, pero ¿cómo **? – aditsu

+0

¿Eso significa que EnhancedPatternLayout solo tiene cambios internos, pero se usa ** exactamente ** de la misma manera? – aditsu

+1

Casi, hay algunos caracteres de conversión adicionales en 'EnhancedPatternLayout' que no están disponibles en PatternLayout. De lo contrario, parece ser lo mismo. No soy un experto en Java, por lo que puede verificarlo usted mismo comparando las dos páginas y/o fuentes de documentación. – cago

0

EnhancedPatternLayout formatea el resultado como un StringBuffer mientras que PatternLayout formatea el resultado como un String.

0

La principal diferencia entre PatternLayout y EnhancedPatternLayout es en el método de formato(). PatternLayout se basa en un campo de miembro denominado sbuf que modifica, mientras que EnhancedPatternLayout utiliza una instancia privada de StringBuffer. Esto significa que las llamadas PatternLayout.format() son susceptibles a carreras de datos durante llamadas concurrentes, mientras que las llamadas simultáneas EnhancedPatternLayout.format() no lo son.

Cuestiones relacionadas