[JAVA] Comment générer des journaux Jetty dans n'importe quel répertoire

Aperçu

Le serveur Web léger Jetty génère les deux fichiers journaux suivants.

Par défaut, ces fichiers journaux sont envoyés dans logs directement sous le répertoire spécifié par la propriété jetty.base.

Jetty Reference Journalisation par défaut avec le StdErrLog de Jetty et [Configuration des journaux de requêtes de jetée](https: // www) J'ai fait référence à .eclipse.org / jetty / documentation / current / configuring-jetty-request-logs.html), mais il était difficile de comprendre comment changer la destination de sortie en un répertoire arbitraire, je l'ai donc résumé dans cet article.

Contenu

1. Comment changer la destination de sortie de la sortie standard / journal de sortie d'erreur standard

Les paramètres du fichier journal sont définis à partir de ʻetc / jetty-logging.xml`.

jetty-logging.xml


<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">


<!-- =============================================================== -->
<!-- Configure stderr and stdout to a Jetty rollover log file        -->
<!-- this configuration file should be used in combination with      -->
<!-- other configuration files.  e.g.                                -->
<!--    java -jar start.jar etc/jetty-logging.xml                    -->
<!-- =============================================================== -->
<Configure id="logging" class="org.eclipse.jetty.util.log.Log">

    <New id="ServerLog" class="java.io.PrintStream">
      <Arg>
        <New class="org.eclipse.jetty.util.RolloverFileOutputStream">
          <Arg><Property name="jetty.logs" default="./logs"/>/yyyy_mm_dd.stderrout.log</Arg>
          <Arg type="boolean">false</Arg>
          <Arg type="int">90</Arg>
          <Arg><Call class="java.util.TimeZone" name="getTimeZone"><Arg>GMT</Arg></Call></Arg>
          <Get id="ServerLogName" name="datedFilename"/>
        </New>
      </Arg>
    </New>

    <Get name="rootLogger">
      <Call name="info"><Arg>Redirecting stderr/stdout to <Ref refid="ServerLogName"/></Arg></Call>
    </Get>
    <Call class="java.lang.System" name="setErr"><Arg><Ref refid="ServerLog"/></Arg></Call>
    <Call class="java.lang.System" name="setOut"><Arg><Ref refid="ServerLog"/></Arg></Call>

</Configure>

changements

<Arg><Property name="jetty.logs" default="./logs"/>/yyyy_mm_dd.stderrout.log</Arg>

Il est maintenant affiché sous la forme aaaa_mm_jj.stderrout.log directement sous le répertoire spécifié par la propriété jetty.logs ($ pwd / logs s'il n'y a pas de propriété).

Pour contourner ce problème, spécifiez la valeur LOG_DIR = / test / logs dans la propriété système de la commande Jetty start et reportez-vous à LOG_DIR dans jetty-logging.xml afin que le journal puisse être sorti dans n'importe quel répertoire. Sera.

$ java -DLOG_DIR=/test/logs -jar start.jar
<Arg><Property name="LOG_DIR"/>/yyyy_mm_dd.stderrout.log</Arg>

Dans cet exemple, le journal de sortie standard / de sortie d'erreur standard est généré dans / test / logs / aaaa_mm_jj.stderrout.log.

2. Comment modifier la destination de sortie du journal d'accès

Les paramètres du fichier journal sont définis à partir de ʻetc / jetty-requestlog.xml`.

jetty-requestlog.xml


<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">

<!-- =============================================================== -->
<!-- Configure the Jetty Request Log                                 -->
<!-- =============================================================== -->
<Configure id="Server" class="org.eclipse.jetty.server.Server">

  <!-- =========================================================== -->
  <!-- Configure Request Log -->
  <!-- =========================================================== -->
  <Ref refid="Handlers">
    <Call name="addHandler">
      <Arg>
        <New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler">
          <Set name="requestLog">
            <New id="RequestLogImpl" class="org.eclipse.jetty.server.AsyncNCSARequestLog">
              <Set name="filename"><Property name="jetty.base" default="." /><Property name="requestlog.filename" default="/logs/yyyy_mm_dd.request.log"/></Set>
              <Set name="filenameDateFormat"><Property name="requestlog.filenameDateFormat" default="yyyy_MM_dd"/></Set>
              <Set name="retainDays"><Property name="requestlog.retain" default="90"/></Set>
              <Set name="append"><Property name="requestlog.append" default="false"/></Set>
              <Set name="extended"><Property name="requestlog.extended" default="false"/></Set>
              <Set name="logCookies"><Property name="requestlog.cookies" default="false"/></Set>
              <Set name="LogTimeZone"><Property name="requestlog.timezone" default="GMT"/></Set>
            </New>
          </Set>
        </New>
      </Arg>
    </Call>
  </Ref>

</Configure>

changements

<Set name="filename"><Property name="jetty.base" default="." /><Property name="requestlog.filename" default="/logs/yyyy_mm_dd.request.log"/></Set>

Il est maintenant affiché comme / logs / yyyy_mm_dd.request.log directement sous le répertoire spécifié par la propriété jetty.base ($ pwd s'il n'y a pas de propriété).

Contrairement au journal de sortie standard / sortie d'erreur standard, le répertoire de destination de la sortie et le nom du fichier de sortie sont spécifiés individuellement pour le journal d'accès. Notez que le nom du fichier de sortie inclut la spécification du répertoire logs par défaut.

Pour contourner le problème, spécifiez la valeur LOG_DIR = / test / logs dans la propriété système de la commande Jetty start et reportez-vous à LOG_DIR dans jetty-requestlog.xml comme dans le journal de sortie standard / erreur standard. Cela permet de sortir le journal dans n'importe quel répertoire.

$ java -DLOG_DIR=/test/logs -jar start.jar
<Set name="filename"><Property name="LOG_DIR"/><Property name="requestlog.filename" default="/yyyy_mm_dd.request.log"/></Set>

A partir du nom du fichier de sortie de la propriété requestlog.filename, la spécification du répertoire logs est supprimée et seul le nom de fichier est utilisé.

Dans cet exemple, le journal d'accès est généré dans / test / logs / yyyy_mm_dd.request.log.

Recommended Posts

Comment générer des journaux Jetty dans n'importe quel répertoire
Comment entourer n'importe quel caractère avec "~"
Enregistrer la sortie dans un fichier en Java
Sortie de l'en-tête HTTP de google-http-client à journaliser
[Java] Comment sortir et écrire des fichiers!
Comment sortir une chaîne Java sur l'écran de la console
[Java] Comment obtenir le répertoire actuel
Comment sortir la somme de trois nombres, à l'exclusion de la même valeur
[Apache Camel] Sortie facile du débit dans un journal
Comment sortir Excel et PDF avec Excella
Comment colorer la sortie de la console de code dans Eclipse
Comment sortir le CSV créé par Rails vers S3
Sortie de la façon d'utiliser la méthode slice
Comment utiliser LOG Java Producer d'Alibaba Cloud
[Ruby] Comment utiliser la sortie standard dans le branchement conditionnel
[Android Studio] Comment changer TextView en n'importe quelle police [Java]
Comment entrer / sortir des fichiers mainframe IBM en Java?
Journal de sortie vers un fichier externe avec slf4j + logback avec Maven
Comment sortir le standard d'un tableau avec for Each
Comment juger le clic de n'importe quelle zone de l'image
Je souhaite simplifier la sortie du journal sur Android
À propos de la sortie du journal Java
Comment développer OpenSPIFe
Comment appeler AmazonSQSAsync
Comment utiliser Map
Comment écrire des rails
Comment utiliser rbenv
Comment utiliser with_option
Comment utiliser fields_for
Comment utiliser java.util.logging
Comment utiliser la carte
Comment utiliser collection_select
Comment utiliser Twitter4J
Comment utiliser active_hash! !!
Comment installer Docker
Comment utiliser MapStruct
Comment utiliser TreeSet
Comment désinstaller Rails
Comment installer docker-machine
[Comment utiliser l'étiquette]
Comment faire un pot ombré
Comment écrire docker-compose
Comment utiliser l'identité
Comment utiliser le hachage
Comment écrire Mockito
Comment créer docker-compose
Comment installer MySQL
Comment écrire un fichier de migration
Comment construire android-midi-lib
Comment utiliser Dozer.mapper
Comment utiliser Gradle