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

So speichern Sie Logback-Protokolle in MongoDB in SpringBoot

PHPz
Freigeben: 2023-05-18 19:01:04
nach vorne
977 Leute haben es durchsucht

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"); 
    } 
  } 
 
}
Nach dem Login kopieren
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); 
  } 
}
Nach dem Login kopieren
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>
Nach dem Login kopieren
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>
Nach dem Login kopieren
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!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage