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

Bagaimana untuk menyimpan log balik ke mongoDB dalam SpringBoot

PHPz
Lepaskan: 2023-05-18 19:01:04
ke hadapan
977 orang telah melayarinya

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"); 
    } 
  } 
 
}
Salin selepas log masuk

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); 
  } 
}
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan