web-dev-qa-db-fra.com

Enregistrement Dropwizard: ajouter un nouvel appender pour un enregistreur particulier

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!

11
nightcrawler

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 -

11

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.

Exigences:

Usine personnalisée Appender

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.

Appender personnalisé

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.

Pour informer Dropwizard de votre nouvelle usine personnalisée ...

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)

Utiliser l'appender personnalisé

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
11
cbradsh1

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.

0