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"); } } }
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); } }
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>
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>
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!