Java Academy · Oppitunti

Logbackin määrittäminen

Appenderit, kuviot ja tasot.

Oppitunti 4/413 vaihetta

Logbackin määrittäminen on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Java Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Java Academy-kurssilla on yhteensä 4 oppituntia.

Mikä Logback on?

Logback on suosittu SLF4J-backend, jonka on kirjoittanut sama tekijä kuin Log4j:n. Se suorittaa varsinaisen lokituksen, jota SLF4J-kutsut kuvaavat.

Se määritetään classpathissa olevalla tiedostolla nimeltä logback.xml, yleensä hakemistossa src/main/resources.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
    private static final Logger log = LoggerFactory.getLogger(Main.class);
    public static void main(String[] args) {
        log.info("Logback reads logback.xml at startup");
    }
}

Kolme rakennuspalikkaa

Logback-määrityksen kolme keskeistä käsitettä ovat:

  • Logger: nimetty lokitapahtumien lähde, jolla on taso.
  • Appender: kohde, kuten konsoli tai tiedosto.
  • Encoder/Layout: muotoilee tapahtuman tekstiksi.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
    private static final Logger log = LoggerFactory.getLogger(Main.class);
    public static void main(String[] args) {
        log.info("logger -> appender -> encoder -> output");
    }
}

Console Appender

Yksinkertaisin määritys lähettää kaiken konsoliin. Encoderin pattern määrittää rivin muodon.

Tämä XML sijaitsee tiedostossa logback.xml, ei Java-koodissa.

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>
  <root level="info">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

Patternin ymmärtäminen

Pattern-muunnossanat alkavat merkillä %:

  • %d on aikaleima ja %level taso.
  • %logger on loggerin nimi ja %thread säie.
  • %msg on viestinne ja %n rivinvaihto.

%-5level täyttää tason vasemmalta välilyönneillä leveyteen 5 asti.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
    private static final Logger log = LoggerFactory.getLogger(Main.class);
    public static void main(String[] args) {
        // Output rendered by pattern: time LEVEL logger - message
        log.info("hello");
    }
}

Root Logger ja tasot

<root>-elementti määrittää koko sovelluksen oletustason ja appenderit, joihin se kirjoittaa.

Asetus level="info" tarkoittaa, että INFO, WARN ja ERROR tulostetaan, kun taas DEBUG ja TRACE suodatetaan pois.

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder><pattern>%-5level %logger - %msg%n</pattern></encoder>
  </appender>
  <root level="warn">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

Pakettikohtaiset tasot

Lisätkää <logger>-elementti paketin tason korvaamista varten. Näin voitte ottaa DEBUG-tason käyttöön omassa koodissanne ja pitää kirjastot hiljaisina.

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder><pattern>%-5level %logger - %msg%n</pattern></encoder>
  </appender>
  <logger name="com.example.app" level="debug" />
  <root level="info">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

Rolling File Appender

Tuotannossa lokit kirjoitetaan yleensä tiedostoihin, jotka vaihtuvat päivittäin tai koon perusteella, jotta lokit eivät kasva rajattomasti.

RollingFileAppender ja aikaperusteinen käytäntö luovat yhden tiedoston päivässä ja säilyttävät rajatun historian.

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>logs/app.log</file>
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
    <maxHistory>30</maxHistory>
  </rollingPolicy>
  <encoder>
    <pattern>%d %-5level [%thread] %logger{36} - %msg%n</pattern>
  </encoder>
</appender>

Useita appendereita samanaikaisesti

Root Logger voi viitata useisiin appendereihin, joten lokit voidaan kirjoittaa samanaikaisesti sekä konsoliin että tiedostoon.

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder><pattern>%-5level %msg%n</pattern></encoder>
  </appender>
  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>logs/app.log</file>
    <encoder><pattern>%d %-5level %msg%n</pattern></encoder>
  </appender>
  <root level="info">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
  </root>
</configuration>

MDC:n tulostaminen

Jos haluatte sisällyttää MDC-kontekstin, kuten pyynnön tunnuksen, jokaiselle riville, lisätkää patterniin %X{key}.

Tämän jälkeen kaikki MDC:hen sijoittamanne arvot näkyvät automaattisesti.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;

public class Main {
    private static final Logger log = LoggerFactory.getLogger(Main.class);
    public static void main(String[] args) {
        MDC.put("requestId", "req-1234");
        // Pattern: %X{requestId} %-5level %msg%n
        log.info("handled");
        MDC.clear();
    }
}

Additivity

Oletusarvoisesti loggerin tapahtumat päätyvät myös sen esi-isien appendereihin. Tätä kutsutaan additivityksi.

Jos pakettikohtaisella loggerilla on oma appenderi ettekä halua päällekkäistä tulostetta, asettakaa siihen additivity="false".

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder><pattern>%-5level %logger - %msg%n</pattern></encoder>
  </appender>
  <logger name="com.example.audit" level="info" additivity="false">
    <appender-ref ref="STDOUT" />
  </logger>
  <root level="warn">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

Automaattinen uudelleenlataus ja muuttujat

Logback voi ladata määrityksen uudelleen säännöllisin väliajoin käyttämällä asetusta <configuration scan="true">. Tämä on hyödyllistä, kun tasoja halutaan muuttaa ilman uudelleenkäynnistystä.

Voitte myös lukea ominaisuuksia, kuten lokihakemiston, käyttämällä ${LOG_DIR}-paikkamerkkejä.

<configuration scan="true" scanPeriod="30 seconds">
  <property name="LOG_DIR" value="logs" />
  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>${LOG_DIR}/app.log</file>
    <encoder><pattern>%d %-5level %msg%n</pattern></encoder>
  </appender>
  <root level="info"><appender-ref ref="FILE" /></root>
</configuration>

Pikatarkistus

Testatkaa Logback-määrityksen tuntemustanne.

Kertaus

Opitte määrittämään Logbackin:

  • Määritys sijaitsee tiedostossa logback.xml, ja se sisältää loggerit, appenderit ja encoderit.
  • Patternit muotoilevat rivit muunnoilla %d, %level, %msg ja %X{}.
  • RollingFileAppender vaihtaa lokitiedostoja; määrittäkää pakettikohtaiset tasot ja additivity.
  • Ottakaa scan käyttöön reaaliaikaista uudelleenmääritystä varten.

Olette suorittaneet lokituskurssin.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
    private static final Logger log = LoggerFactory.getLogger(Main.class);
    public static void main(String[] args) {
        log.info("Logback configuration course complete");
    }
}
Aloita maksutta

Opi Java tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
104
Oppitunnit
374

Usein kysytyt kysymykset

Onko oppitunti ”Logbackin määrittäminen” ilmainen?

Kyllä – oppitunnin ”Logbackin määrittäminen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Java Academy-kurssin, päivitä CoddyKit PROhon. Java Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Logbackin määrittäminen”?

Appenderit, kuviot ja tasot. Harjoittelet Java Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Java Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Java Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Logbackin määrittäminen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Java Academy-oppitunnilla?

Kyllä. Jokainen Java Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Miksi rakenteinen lokitus
  2. SLF4J-julkisivu ja lokittimet
  3. Parametrisoitu lokitus
  4. Logbackin määrittäminen
← Takaisin: Java Academy