Rumah >Java >javaTutorial >Bagaimana untuk menyimpan log balik ke mongoDB dalam SpringBoot

Bagaimana untuk menyimpan log balik ke mongoDB dalam SpringBoot

PHPz
PHPzke hadapan
2023-05-18 19:01:04979semak imbas

Menyesuaikan Appender adalah sangat mudah, hanya mewarisi kelas AppenderBase.

Anda boleh melihat bahawa terdapat AppenderBase, UnsynchronizedAppenderBase dan AsyncAppenderBase yang mewarisi UnsynchronizedAppenderBase. Perbezaannya boleh dilihat dari nama, tak segerak, biasa, dan tidak berkunci.

Kami mentakrifkan MongoDBAppender yang mewarisi 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"); 
    } 
  } 
 
}

Mesti melaksanakan kaedah tambahkan ini ialah log keluaran log disimpan dalam objek eventObject dapatkan Hanya ambil nilai dalam objek dan lakukan pemprosesan anda sendiri.

Kita boleh bayangkan bahawa ConsoleAppender sistem sentiasa System.out.print (eventObject.getXXX), dan FileAppender menggunakan OutpuptStream untuk mengeluarkan ke fail.

Apa yang perlu kita lakukan ialah menyimpan log ke mongo Springboot telah menyediakan templat MongoTemplate Perlu diingat bahawa output log bermula apabila sistem bermula, dan MongoTemplate belum dimulakan. pada mulanya, anda perlu menunggu Spring untuk menetapkan nilai kepada MongoTemplate. Jadi ia adalah batal pada permulaan, dan anda perlu menunggu sehingga musim bunga dimulakan sebelum MongoTemplate mempunyai nilai.

Memandangkan Appender ini tidak diuruskan oleh musim bunga, saya menggunakan kaedah mendapatkan kacang secara berasingan. ApplicationContextProvider adalah seperti berikut:

@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); 
  } 
}

Log operasi mongo di atas agak mudah untuk disimpan, dan medan tidak digunakan Anda boleh mereka bentuk struktur mongo mengikut atribut yang anda ingin simpan, dan kemudian simpan di perpustakaan.

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>

Ia juga sangat mudah digunakan dalam 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>

Anda hanya perlu menentukan kelas appender .

Atas ialah kandungan terperinci Bagaimana untuk menyimpan log balik ke mongoDB dalam SpringBoot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam