Модифицированный на основе предположения, поэтому теперь, когда я пытался запустить приложение, функция 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, но так и не произошло.
Все, что у меня отсутствует здесь?
Если ваш вопрос был дан ответ, пожалуйста, закройте его. –