Dropwizard, un nouveau venu sur le marché, cherche à améliorer la configuration de la journalisation.
J'ai enregistré un nouvel enregistreur dans un paquet comme ceci:
Logger log = LoggerFactory.getLogger("mylogger");
log.info("this is a log from mylogger");
Maintenant, j'utilise ce forfait dans un ensemble de services. Par défaut, tout journal provenant de cet enregistreur serait écrit dans le fichier journal de l'application.
Le problème que j'essaie de résoudre est le suivant: je veux que tous les journaux écrits par mylogger (uniquement) soient placés dans un nouveau fichier. Il est assez astucieux d’ajouter un nouvel ajout au fichier yml du service comme:
logging:
loggers:
appenders:
- type: file.
currentLogFilename: ./logs/example.log
archivedLogFilenamePattern: ./logs/example-%d.log.gz
archivedFileCount: 5
Mais cela signifierait que tous les journaux d'application seraient maintenant écrits dans example.log. Je ne connais pas de moyen de spécifier un enregistreur spécifiquement pour cet appender qui n'affecte pas/ne modifie pas l'enregistrement déjà existant.
Quelqu'un peut-il me dire s'il existe un moyen de faire cela dans Dropwizard? Merci!
Dans Dropwizard 0.9.0 (publié le 28 octobre 2015), ils ont ajouté la prise en charge des ajouts d'appareils de journalisation individuels et la désactivation de l'additivité de journalisation.
Pour réaliser ce que vous avez décrit, vous pouvez spécifier les éléments suivants dans votre fichier de configuration yaml -
logging:
level: INFO
loggers:
"mylogger":
level: DEBUG
additive: false
appenders:
- type: file
currentLogFilename: /var/log/mylogger.log
archivedLogFilenamePattern: /var/log/mylogger-%d.log.gz
archivedFileCount: 5
appenders:
- type: console
Définir additive sur false empêchera le consignateur (ou tout ce qui se trouve en dessous) d'écrire dans les annexes qui se trouvent au-dessus de sa hiérarchie, y compris le consignateur racine.
Références -
Si vous souhaitez que votre enregistreur personnalisé soit l'unique journal du fichier journal et que vous accédiez aux appender par défaut, vous pouvez créer votre propre appender en fonction des spécifications de journalisation Dropwizard.
qui étend io.dropwizard.logging.AbstractAppenderFactory
(appelé MyCustomFactory)
Des configurations personnalisées peuvent être injectées ici à partir de votre fichier .yml en créant JsonProperties ici, en utilisant Hibernate Annotations pour toutes les validations nécessaires sur le fichier de configuration:
@NotNull
@JsonProperty
private String url;
@JsonProperty
private int maxBufferSize = 100;
@JsonProperty
private int sendDelayInSeconds = 10;
Donnez à la classe une @JsonTypeName("YourAppenderName")
. Voici comment vous référencez l'appender dans votre configuration.
Cette classe doit avoir accès à toutes les configurations que vous souhaitez transmettre à votre appender, car sa fonction est de créer vos appenders que Dropwizard utilisera.
qui étend ch.qos.logback.core.AppenderBase
(désigné sous le nom de MyCustomAppender) . Vous pouvez écrire le vôtre, ou utiliser un existant provenant de services comme Loggly.
Dans l'appender, vérifiez d'où provient le journal et filtrez ce que vous voulez écrire dans un fichier.
Vous avez besoin d’un fichier appelé io.dropwizard.logging.AppenderFactory
placé dans votre répertoire src/main/resources/META-INF/services/
.
Le contenu de ce fichier est le nom complet (packages inclus) de votre fabrique personnalisée. (Exemple: com.myCompany.appender.MyCustomFactory)
Dans votre fichier yml, ajoutez le nouvel éditeur avec le nom que vous avez spécifié:
appenders:
# Log warnings and errors to stderr
- type: console
threshold: INFO
target: stderr
# Custom Logger
- type: YourAppenderName
threshold: INFO
url: https://sendYourLogsHere/logs
Vous pouvez vous référer au code dans la bibliothèque de journalisation dropwizard pour des exemples. Vérifiez la FileAppenderFactory
. C'est un bon point de référence.