2009-09-07 13 views
13

Quiero crear programáticamente un nuevo ConsoleAppender de log4j y agregarlo como un appender a un registrador. ¿Cómo hago para crear instancias de uno correctamente? Usar lo siguiente parece hacer que log4j se queje: qué setters necesito usar para configurarlo correctamente ?¿Cómo creo un nuevo log4j ConsoleAppender en código en lugar de config?

// log4j complains of "No output stream or file set for the appender named [null]." 
logger.addAppender(new ConsoleAppender()); 

Es de suponer que es un caso de saber qué establece en el ConsoleAppender pero no puedo entenderlo. Supongo que hay alguna forma de obtener el diseño predeterminado. Solo quiero un ConsoleAppender estándar que se agregue a SysOut. Cualquier orientación apreciada, gracias.

Respuesta

28

Deberá establecer un Writer en el appender (y luego también un Layout para evitar el próximo error que pueda ver). Esto significa que no puede usar una instancia anónima ya que necesitará usa los setters para configurar el appender. p.ej.

ConsoleAppender ca = new ConsoleAppender(); 
ca.setWriter(new OutputStreamWriter(System.out)); 
ca.setLayout(new PatternLayout("%-5p [%t]: %m%n")); 
logger.addAppender(ca); 

Además, se puede establecer el nombre de la appender con:

ca.setName("My appender"); 
4

Esto parece ser un knownissue en log4j. Debería poder arreglar esto llamando al activateOptions en el appender antes de agregarlo al registrador o usando un constructor parametrizado para ConsoleAppender.

¿Qué versión estás usando? El error parece existir en una versión bastante antigua.

Cuestiones relacionadas