Heim  >  Artikel  >  Java  >  So speichern Sie Logback-Protokolle in MongoDB in SpringBoot

So speichern Sie Logback-Protokolle in MongoDB in SpringBoot

PHPz
PHPznach vorne
2023-05-18 19:01:04929Durchsuche

Appender anpassen ist sehr einfach, erben Sie einfach die AppenderBase-Klasse.

Sie können sehen, dass es eine AppenderBase, eine UnsynchronizedAppenderBase und eine AsyncAppenderBase gibt, die UnsynchronizedAppenderBase erbt. Der Unterschied ist am Namen zu erkennen: asynchron, gewöhnlich und entsperrt.

Wir definieren einen MongoDBAppender, der 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"); 
    } 
  } 
 
}
erbt und eine Append-Methode implementieren muss. Bei dieser Methode werden die Protokolle im EventObject-Objekt gespeichert Eigene Bearbeitung.


Wir können uns vorstellen, dass der ConsoleAppender des Systems ständig System.out.print (eventObject.getXXX) ist und der FileAppender OutpuptStream verwendet, um in die Datei auszugeben.


Was wir tun müssen, ist, das Protokoll in MongoTemplate zu speichern. Es ist zu beachten, dass die Protokollausgabe zu Beginn nicht initialisiert wurde um auf den von Spring an MongoTemplate zugewiesenen Wert zu warten. Daher ist es am Anfang null und Sie müssen warten, bis Spring initialisiert ist, bevor MongoTemplate einen Wert hat.


Da dieser Appender bis zum Frühjahr nicht verwaltet wird, verwende ich die Methode, die Bohne separat zu erhalten. Der ApplicationContextProvider lautet wie folgt:


@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); 
  } 
}
Der obige Mongo-Vorgangsprotokollspeicher ist relativ einfach und die Felder werden nicht aufgebraucht. Sie können die Mongo-Struktur entsprechend den Attributen entwerfen, die Sie speichern möchten, und sie dann in der Datenbank speichern .


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>
Es ist auch sehr einfach in Spring-logback.xml zu verwenden


<?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>
Sie müssen nur die Appender-Klasse angeben.

Das obige ist der detaillierte Inhalt vonSo speichern Sie Logback-Protokolle in MongoDB in SpringBoot. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen