Existe-t-il un moyen de modifier les tables que le journal écrit ses données en utilisant dbAppender? Il a trois tables par défaut qui doivent être créées avant d'utiliser dbAppender, mais je veux le personnaliser pour écrire dans une table de mon choix. Quelque chose de similaire à Log4J où je peux spécifier le SQL qui est exécuté lors de l'insertion du journal dans la base de données.Logback dbAppender SQL personnalisé
Répondre
Vous devez mettre en œuvre ch.qos.logback.classic.db.names.DBNameResolver
et de l'utiliser dans la configuration:
<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
<dbNameResolver class="com.example.MyDBNameResolver"/>
<!-- ... -->
</appender>
Salut, Merci pour votre réponse, savez-vous où il y a des exemples de cela mis en œuvre, j'ai implémenté le DBNameresolver mais je ne suis pas sûr de ce que les méthodes prennent et quoi ils reviennent. – Magezy
Par défaut, cette classe prend une instance de 'ch.qos.logback.classic.db.names.ColumnName' et renvoie le nom de chaque valeur enum. Regardez deux implémentations disponibles dans la distribution de Logback. S'il vous plaît déposer un problème pour documenter cette fonctionnalité. –
Tomasz, peut-être je manque quelque chose, mais je ne vois pas comment utiliser simplement DBNameResolver personnalisé pourrait être la réponse à ce Magezy demandé . DBNameResolver est utilisé par DBAppender via SQLBuilder pour construire 3 requêtes d'insertion SQL - via DBNameResolve on peut seulement affecter les noms des tables et des colonnes où les données seront insérées, mais ne peut pas limiter l'insertion à une seule table, sans parler de DBNameResolver ne sont aucun moyen de contrôler ce qui est réellement inséré.
Pour correspondre à JDBCAppender IMO de log4j, il faut étendre DBAppender, ou DBAppenderBase de logback, ou peut-être même implémenter entièrement nouveau Appender personnalisé.
La façon la plus simple pour moi était de créer un appender à partir de zéro. J'ajoute à une seule table, en utilisant Spring JDBC. Il fonctionne comme ceci:
public class MyAppender extends AppenderBase<ILoggingEvent>
{
private String _jndiLocation;
private JDBCTemplate _jt;
public void setJndiLocation(String jndiLocation)
{
_jndiLocation = jndiLocation;
}
@Override
public void start()
{
super.start();
if (_jndiLocation == null)
{
throw new IllegalStateException("Must have the JNDI location");
}
DataSource ds;
Context ctx;
try
{
ctx = new InitialContext();
Object obj = ctx.lookup(_jndiLocation);
ds= (DataSource) obj;
if (ds == null)
{
throw new IllegalStateException("Failed to obtain data source");
}
_jt = new JDBCTemplate(ds);
}
catch (Exception ex)
{
throw new IllegalStateException("Unable to obtain data source", ex);
}
}
@Override
protected void append(ILoggingEvent e)
{
// log to database here using my JDBCTemplate instance
}
}
j'ai rencontré des problèmes avec SLF4J - l'erreur de l'enregistreur de remplacement décrit ici: http://www.slf4j.org/codes.html#substituteLogger
This thread on multi-step configuration m'a permis de contourner ce problème.
<appender name="CUSTOM_DB_APPENDER" class="com.....MyDbAppender">
<filter class="com......MyFilter"/>
<param name="jndiLocation" value="java:/comp/env/jdbc/....MyPath"/>
</appender>
Et votre java MyDbAppender devrait avoir une chaîne jndiLocation avec setter. Maintenant faire une recherche jndi (voir la réponse à la réponse du 17 octobre 11 à 16:03)
- 1. Logback DBAppender url
- 2. logback performance dbappender
- 3. Logback-1.0.13 DBAppender/MySQL bug?
- 4. Logback DBAppender a null nom_fichier_appel
- 5. L'utilisation de Spring à partir d'un appender de logback personnalisé?
- 6. DBAppender - comment changer les noms de tables par défaut?
- 7. Comment configurer DBAppender avec log4j dans JBoss5?
- 8. Afficher les scripts SQL dans Logback
- 9. Log4J/LogBack
- 10. Logback dans l'applet Java
- 11. Journalisation Solr avec Logback
- 12. Didacticiel sur le logback
- 13. Grails and logback
- 14. logback SMTPAppender se bloque
- 15. logback gestion du niveau de journalisation personnalisée
- 16. Remplacer la sortie d'erreur Logback
- 17. passer de log4j à Logback
- 18. Logback dans Embedded Jetty 9
- 19. Bizarre "18 caractères" comportement LOGBack
- 20. Grails: REPLACE log4j avec logback
- 21. Fichier de configuration de logback
- 22. Logback: propriétés prêtes à l'emploi
- 23. Enregistrement des threads parallèles dans le logback
- 24. Logback - SiftingAppender avec embeded DB Appender
- 25. SQL Ordre personnalisé par
- 26. Rails: ActiveRecord - SQL personnalisé
- 27. déclaration Sql personnalisé
- 28. Importer propriétés externes pour logback (.xml)
- 29. logback au printemps-OSGI avec pax-runner
- 30. logback logging avec maven-jetty-plugin
duplication possible de [DBAppender - comment changer les noms de tables par défaut?] (Http://stackoverflow.com/questions/4690381/dbappender-how-to-change-default-table-noms) –