2015-04-15 5 views
1

Модифицированный на основе предположения, поэтому теперь, когда я пытался запустить приложение, функция append() внутри MyCustomAppender все еще не вызывается, хотя я запускал log.error в основное приложение. Может, что-то я пропустил? Это весенняя проблема? Я поставил точку останова в MyCustomAppender, ничего не вызвало вообще.Как создать пользовательский appender для log4j2 весной

Благодаря

Ниже оригинальный вопрос:

Я гугле много для создания пользовательских Appender для log4j2 как мне нужно обрабатывать данные журнала и отправить на наш лог-сервер, я гугле много, ничего работал, это то, что я сделал, и надеюсь, что ваше предложение о том, где ошибка.

package demo; 

import java.io.Serializable; 

import org.apache.logging.log4j.core.Filter; 
import org.apache.logging.log4j.core.Layout; 
import org.apache.logging.log4j.core.LogEvent; 
import org.apache.logging.log4j.core.appender.AbstractAppender; 
import org.apache.logging.log4j.core.config.plugins.Plugin; 
import org.apache.logging.log4j.core.config.plugins.PluginAttribute; 
import org.apache.logging.log4j.core.config.plugins.PluginFactory; 

@Plugin(category = "Core", name = "MyCustomAppender") 
public class MyCustomAppender extends AbstractAppender { 

    protected MyCustomAppender(String name, Filter filter, 
      Layout<? extends Serializable> layout) { 
     super(name, filter, layout); 
     // TODO Auto-generated constructor stub 
    } 

    @PluginFactory 
    public static MyCustomAppender createAppender(
      @PluginAttribute("name") String name) { 
     // note: in this example the class name matches the @Plugin name, 
     // but this is not required. 
     return new MyCustomAppender(name, null, null); 
    } 

    @Override 
    public void append(LogEvent arg0) { 
     // TODO Auto-generated method stub 
     System.out.print("inside here 123"); 
    } 

} 

И это log4j2.xml весной:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- status = level of INTERNAL Log4j events that should be logged to the console, used to debug log4j itself --> 
<Configuration status="TRACE" packages="demo"> 
    <Properties> 
     <Property name="PID">????</Property> 
     <Property name="LOG_PATTERN">[%d{yyyy-MM-dd HH:mm:ss.SSS}] log4j2%X{context} - ${sys:PID} %5p [%t] --- %c{1}: %m%n</Property> 
     <!-- Default logging level, can override with system property: -DlogLevel=xxx --> 
     <Property name="EXEC_SVC_LOGLEVEL">info</Property> 
    </Properties> 
    <Appenders> 
     <MyCustomAppender name="ABC"/> 
    </Appenders> 
    <Loggers> 
     <Root level="WARN"> 
      <AppenderRef ref="ABC" /> 
     </Root> 
    </Loggers> 
</Configuration> 

Теперь, когда я бегу главное приложение:

@SpringBootApplication 
public class DemoLoggerApplication { 
     //private static final Logger logger = LogManager.getLogger("HelloWorld"); 
    private static final Logger logger = LogManager.getLogger("HelloWorld"); 
     public static void main(String[] args) { 
     logger.warn("This is information!"); 
     SpringApplication.run(DemoLoggerApplication.class, args); 
    } 
} 

Я надеюсь, что предупреждение может вызвать Append() метод внутри класса myCustomAppender, но так и не произошло.

Все, что у меня отсутствует здесь?

+0

Если ваш вопрос был дан ответ, пожалуйста, закройте его. –

ответ

3

Ваша конфигурация имеет <Configuration status="WARN" packages="demo">, но является вашим MyCustomAppender в пакете "demo"? Перефразировать, это полное имя класса вашего пользовательского приложения demo.MyCustomAppender?

Если нет, укажите правильное имя пакета своего пользовательского приложения в атрибуте пакета <Configuration packages="CORRECT-PACKAGE-HERE">.

Во-вторых, вы указали название своего пользовательского плагина как «MyCustomAppender» (в @Plugin(category = "Core", name = "MyCustomAppender")). Однако ваша конфигурация относится к неизвестному <StubAppender name="ABC"/>. Замените StubAppender на <MyCustomAppender name="ABC"/>.

Чтобы помочь устранить неполадки, вы можете установить внутренний уровень журнала log4j в TRACE в своей конфигурации: <Configuration status="TRACE"... Это отобразит внутренние сообщения журнала log4j на консоли. Например, неизвестные плагины, такие как StubAppender, должны генерировать сообщение об ошибке здесь.

0

Я дважды проверил мой файл pom, и там есть ошибка. Я должен положить

<exclusions> 
       <exclusion> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-logging</artifactId> 
       </exclusion> 
      </exclusions> 

внутри пружинного ботинке, благодаря

0
@Plugin(name = "MyCustomAppender", category = Node.CATEGORY, elementType = "appender", printObject = true) 

вам нужно изменить аннотацию, как это.

Не забудьте добавить конфигурацию в log4j2.xml ниже

<Configuration packages="yourAppenderPackageName"> 
Смежные вопросы