Maison > Java > javaDidacticiel > le corps du texte

Comment enregistrer les journaux de connexion sur mongoDB dans SpringBoot

PHPz
Libérer: 2023-05-18 19:01:04
avant
929 Les gens l'ont consulté

La personnalisation d'Appender est très simple, il suffit d'hériter de la classe AppenderBase.

Vous pouvez voir qu'il existe un AppenderBase, un UnsynchronizedAppenderBase et un AsyncAppenderBase qui hérite d'UnsynchronizedAppenderBase. La différence peut être vue à partir du nom, asynchrone, ordinaire et déverrouillé.

Nous définissons un MongoDBAppender qui hérite d'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"); 
    } 
  } 
 
}
Copier après la connexion

et devons implémenter une méthode append. Cette méthode est l'endroit où la journalisation génère les journaux dans l'objet eventObject. propre traitement.

Nous pouvons imaginer que le ConsoleAppender du système est constamment System.out.print (eventObject.getXXX) et que le FileAppender utilise OutpuptStream pour sortir dans le fichier.

Ce que nous devons faire est de sauvegarder le journal sur mongo. Springboot a fourni le modèle MongoTemplate. Il convient de noter que la sortie du journal démarre au démarrage du système. il faut attendre que Spring donne la valeur attribuée à MongoTemplate. Il est donc nul au début et vous devez attendre que spring soit initialisé avant que MongoTemplate ait une valeur.

Comme cet Appender n'est pas géré au printemps, j'utilise la méthode d'obtention du haricot séparément. L'ApplicationContextProvider est le suivant :

@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); 
  } 
}
Copier après la connexion

Le stockage du journal des opérations mongo ci-dessus est relativement simple et les champs ne sont pas utilisés. Vous pouvez concevoir la structure mongo en fonction des attributs que vous souhaitez enregistrer, puis la stocker dans la base de données. .

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>
Copier après la connexion

Il est également très simple à utiliser dans 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>
Copier après la connexion

Il vous suffit de spécifier la classe appender.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal