> Java > java지도 시간 > 본문

SpringBoot에서 mongoDB에 로그백 로그를 저장하는 방법

PHPz
풀어 주다: 2023-05-18 19:01:04
앞으로
932명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿