Appender 사용자 정의는 매우 간단합니다. AppenderBase 클래스를 상속하기만 하면 됩니다.
AppenderBase, UnsynchronizedAppenderBase, 그리고 UnsynchronizedAppenderBase를 상속받은 AsyncAppenderBase가 있는 것을 볼 수 있습니다. 차이점은 이름, 비동기식, 일반 및 잠금 해제에서 확인할 수 있습니다.
UnsynchronizedAppenderBase
public class MongoDBAppender extends UnsynchronizedAppenderBase<ILoggingEvent> { @Override protected void append(ILoggingEvent eventObject) { MongoTemplate mongoTemplate = ApplicationContextProvider.getBean(MongoTemplate.class); if (mongoTemplate != null) { final BasicDBObject doc = new BasicDBObject(); doc.append("level", eventObject.getLevel().toString()); doc.append("logger", eventObject.getLoggerName()); doc.append("thread", eventObject.getThreadName()); doc.append("message", eventObject.getFormattedMessage()); mongoTemplate.insert(doc, "log"); } } }
를 상속하는 MongoDBAppender를 정의하고 추가 메소드를 구현해야 합니다. 이 메소드는 로그가 eventObject 객체에 저장되는 곳입니다. 자체 처리할 수 있습니다.
시스템의 ConsoleAppender가 지속적으로 System.out.print(eventObject.getXXX)이고 FileAppender가 OutpuptStream을 사용하여 파일로 출력한다고 상상할 수 있습니다.
우리가 해야 할 일은 로그를 mongo에 저장하는 것입니다. Springboot는 MongoTemplate 템플릿을 제공합니다. 처음에는 MongoTemplate이 아직 초기화되지 않았습니다. Spring에서 MongoTemplate에 할당된 값을 기다려야 합니다. 따라서 처음에는 null이고 MongoTemplate에 값이 생기기 전에 Spring이 초기화될 때까지 기다려야 합니다.
본 Appender는 Spring으로 관리되지 않기 때문에 별도로 Bean을 구하는 방식을 사용합니다. ApplicationContextProvider는 다음과 같습니다.
@Component public class ApplicationContextProvider implements ApplicationContextAware { private static ApplicationContext context; public static ApplicationContext getApplicationContext() { return context; } @Override public void setApplicationContext(ApplicationContext ac) throws BeansException { context = ac; } public static <T> T getBean(Class<T> tClass) { return context.getBean(tClass); } public static <T> T getBean(String name, Class<T> tClass) { return context.getBean(name, tClass); } }
위의 mongo 작업 로그 저장은 비교적 간단하며 필드가 모두 사용되지 않습니다. 저장하려는 속성에 따라 mongo 구조를 설계한 다음 데이터베이스에 저장할 수 있습니다. .
pom.xml
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.11</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.11</version> </dependency>
Spring-logback.xml에서도 사용하기 매우 간단합니다.
<?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/base.xml" /> <appender name="MY_FILE" class="com.example.demo.mongo.MongoDBAppender"> </appender> <!-- 测试环境+开发环境. 多个使用逗号隔开. --> <springProfile name="test,dev"> <logger name="org.springframework.web" level="INFO"> <appender-ref ref="MY_FILE"/> </logger> <logger name="com.example" level="INFO" /> </springProfile> </configuration>
appender 클래스만 지정하면 됩니다.
위 내용은 SpringBoot에서 mongoDB에 로그백 로그를 저장하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!