[JAVA] So geben Sie Jetty-Protokolle in ein beliebiges Verzeichnis aus

Überblick

Der leichtgewichtige Webserver Jetty gibt die folgenden zwei Protokolldateien aus.

Standardmäßig werden diese Protokolldateien in "Protokolle" direkt unter dem durch die Eigenschaft "jetty.base" angegebenen Verzeichnis ausgegeben.

Jetty-Referenz Standardprotokollierung mit StdErrLog von Jetty und [Konfigurieren von Jetty-Anforderungsprotokollen](https: // www) Ich habe auf .eclipse.org / jetty / documentation / current / configuring-jetty-request-logs.html verwiesen, aber es war schwierig zu verstehen, wie das Ausgabeziel in ein beliebiges Verzeichnis geändert werden kann. Deshalb habe ich es in diesem Artikel zusammengefasst.

Inhalt

1. So ändern Sie das Ausgabeziel des Standardausgabe- / Standardfehlerausgabeprotokolls

Die Einstellungen für die Protokolldatei werden aus "etc / jetty-logging.xml" vorgenommen.

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>

Änderungen

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

Es wird jetzt als yyyy_mm_dd.stderrout.log direkt unter dem durch die Eigenschaft jetty.logs angegebenen Verzeichnis ausgegeben ($ pwd / logs, wenn keine Eigenschaft vorhanden ist).

Um dieses Problem zu umgehen, geben Sie den Wert "LOG_DIR = / test / logs" in der Systemeigenschaft des Jetty-Startbefehls an und verweisen Sie auf "LOG_DIR" in "jetty-logging.xml", damit das Protokoll in ein beliebiges Verzeichnis ausgegeben werden kann. Wird sein.

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

In diesem Beispiel wird das Standardausgabe- / Standardfehlerausgabeprotokoll an / test / logs / yyyy_mm_dd.stderrout.log ausgegeben.

2. So ändern Sie das Ausgabeziel des Zugriffsprotokolls

Die Einstellungen für die Protokolldatei werden aus "etc / jetty-requestlog.xml" vorgenommen.

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>

Änderungen

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

Es wird jetzt als / logs / yyyy_mm_dd.request.log direkt unter dem durch die Eigenschaft jetty.base angegebenen Verzeichnis ausgegeben ($ pwd, wenn keine Eigenschaft vorhanden ist).

Im Gegensatz zum Standardausgabe- / Standardfehlerausgabeprotokoll gibt das Zugriffsprotokoll das Ausgabezielverzeichnis und den Namen der Ausgabedatei einzeln an. Beachten Sie, dass der Name der Ausgabedatei standardmäßig die Verzeichnisspezifikation "logs" enthält.

Um dieses Problem zu umgehen, geben Sie den Wert "LOG_DIR = / test / logs" in der Systemeigenschaft des Jetty-Startbefehls an und verweisen Sie auf "LOG_DIR" in "jetty-requestlog.xml" wie im Standardausgabe- / Standardfehlerausgabeprotokoll. Dies ermöglicht die Ausgabe des Protokolls in ein beliebiges Verzeichnis.

$ 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>

Aus dem Ausgabedateinamen der Eigenschaft "requestlog.filename" wird die Angabe des Verzeichnisses "logs" entfernt und nur der Dateiname verwendet.

In diesem Beispiel wird das Zugriffsprotokoll an "/ test / logs / yyyy_mm_dd.request.log" ausgegeben.

Recommended Posts

So geben Sie Jetty-Protokolle in ein beliebiges Verzeichnis aus
Wie man ein Zeichen mit "~" einschließt
Protokollausgabe in Datei in Java
Geben Sie den HTTP-Header des zu protokollierenden Google-http-Clients aus
[Java] Wie man Dateien ausgibt und schreibt!
So geben Sie eine Java-Zeichenfolge auf dem Konsolenbildschirm aus
[Java] So erhalten Sie das aktuelle Verzeichnis
So geben Sie die Summe von drei beliebigen Zahlen ohne denselben Wert aus
[Apache Camel] Einfacher Durchsatz in einem Protokoll ausgeben
So geben Sie Excel und PDF mit Excella aus
Farbcodierung der Konsolenausgabe in Eclipse
So geben Sie die von Rails erstellte CSV in S3 aus
Ausgabe der Verwendung der Slice-Methode
Verwendung des LOG Java Producer von Alibaba Cloud
[Ruby] Verwendung der Standardausgabe bei der bedingten Verzweigung
[Android Studio] So ändern Sie TextView in eine beliebige Schriftart [Java]
Wie kann ich IBM Mainframe-Dateien in Java eingeben / ausgeben?
Protokoll mit slf4j + Logback mit Maven in externe Datei ausgeben
So geben Sie einen Standard aus einem Array mit for Each aus
So beurteilen Sie den Klick eines beliebigen Bildbereichs
Ich möchte die Protokollausgabe unter Android vereinfachen
Informationen zur Java-Protokollausgabe
So entwickeln Sie OpenSPIFe
So rufen Sie AmazonSQSAsync auf
Verwendung von Map
Wie schreibe ich Rails
Wie benutzt man rbenv?
Verwendung mit_option
Verwendung von fields_for
Verwendung von java.util.logging
Verwendung der Karte
Verwendung von collection_select
Wie benutzt man Twitter4J
Wie benutzt man active_hash! !!
So installieren Sie Docker
Verwendung von MapStruct
Verwendung von TreeSet
So deinstallieren Sie Rails
So installieren Sie Docker-Maschine
[Verwendung des Etiketts]
Wie man ein schattiertes Glas macht
Wie schreibe ich Docker-Compose
Wie man Identität benutzt
Wie man Hash benutzt
Wie schreibe ich Mockito
So erstellen Sie Docker-Compose
So installieren Sie MySQL
So schreiben Sie eine Migrationsdatei
Wie man android-midi-lib baut
Verwendung von Dozer.mapper
Wie benutzt man Gradle?