Parcours
/
Java
Java
/
Exercices
/
Des logs, des logs, des logs !
Des logs, des logs, des logs !

Des logs, des logs, des logs !

Exercice d'apprentissage

Introduction

Énumérations

Un type énuméré est un type de données particulier qui permet à une variable de prendre une valeur parmi un ensemble de constantes prédéfinies. La variable doit être égale à l'une des valeurs prédéfinies pour ce type. Les exemples courants incluent les points cardinaux (les valeurs NORTH, SOUTH, EAST et WEST) et les jours de la semaine.

Comme ce sont des constantes, les noms des champs d'un type énuméré s'écrivent en majuscules.

Définis un type énuméré

Dans le langage de programmation Java, on définit un type énuméré à l'aide du mot-clé enum. Par exemple, on définit un type énuméré pour les jours de la semaine comme ceci :

public enum DayOfWeek {
    SUNDAY,
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY
}

On utilise les types énumérés dès que l'on a besoin de représenter un ensemble fixe de constantes. Cela inclut les types énumérés naturels comme les planètes de notre système solaire, et les ensembles de données dont on connaît toutes les valeurs possibles à la compilation, par exemple les choix d'un menu, les options de ligne de commande, etc.

Utilise un type énuméré

Voici du code qui montre comment utiliser le type énuméré DayOfWeek défini ci-dessus :

public class Shop {
    public String getOpeningHours(DayOfWeek dayOfWeek) {
        switch (dayOfWeek) {
            case MONDAY:
            case TUESDAY:
            case WEDNESDAY:
            case THURSDAY:
            case FRIDAY:
                return "9am - 5pm";
            case SATURDAY:
                return "10am - 4pm"
            case SUNDAY:
                return "Closed.";
        }
    }
}
var shop = new Shop();
shop.getOpeningHours(DayOfWeek.WEDNESDAY);
// => "9am - 5pm"

Ajoute des méthodes et des champs

Les types énumérés du langage Java sont bien plus puissants que leurs équivalents dans d'autres langages. La déclaration enum définit une classe (appelée type énuméré). Le corps de la classe du type énuméré peut contenir des méthodes et d'autres champs :

public enum Rating {
    GREAT(5),
    GOOD(4),
    OK(3),
    BAD(2),
    TERRIBLE(1);

    private final int numberOfStars;

    Rating(int numberOfStars) {
        this.numberOfStars = numberOfStars;
    }

    public int getNumberOfStars() {
        return this.numberOfStars;
    }
}

Appel de la méthode getNumberOfStars sur un membre du type énuméré Rating :

Rating.GOOD.getNumberOfStars();
// => 4

Instructions

Dans cet exercice, tu vas traiter des lignes de log.

Chaque ligne de log est une string au format suivant : "[<LVL>]: <MESSAGE>".

Voici les différents niveaux de log :

  • TRC (trace)
  • DBG (debug)
  • INF (info)
  • WRN (avertissement)
  • ERR (erreur)
  • FTL (fatal)

Tu as trois tâches à réaliser.

1. Analyser le niveau de log

Définis une enum LogLevel qui compte six éléments correspondant aux niveaux de log ci-dessus.

  • TRACE
  • DEBUG
  • INFO
  • WARNING
  • ERROR
  • FATAL

Ensuite, implémente la méthode LogLine.getLogLevel() qui renvoie le niveau de log extrait d'une ligne de log :

var logLine = new LogLine("[INF]: File deleted");
logLine.getLogLevel();
// => LogLevel.INFO

2. Prendre en charge les niveaux de log inconnus

Malheureusement, il arrive parfois que certaines lignes de log aient un niveau inconnu. Pour traiter correctement ces lignes de log, ajoute un élément UNKNOWN à l'enum LogLevel, qui devra être renvoyé lors de l'analyse d'un niveau de log inconnu :

var logLine = new LogLine("[XYZ]: Overly specific, out of context message");
logLine.getLogLevel();
// => LogLevel.UNKNOWN

3. Convertir une ligne de log au format court

Le niveau de log d'une ligne de log est assez verbeux. Pour réduire l'espace disque nécessaire pour stocker les lignes de log, on a mis au point un format court : "[<ENCODED_LEVEL>]:<MESSAGE>".

Le niveau de log encodé est une simple correspondance entre un niveau de log et un nombre :

  • UNKNOWN - 0
  • TRACE - 1
  • DEBUG - 2
  • INFO - 4
  • WARNING - 5
  • ERROR - 6
  • FATAL - 42

Implémente la méthode LogLine.getOutputForShortLog() qui produit la ligne de log au format raccourci :

var logLine = new LogLine("[ERR]: Stack Overflow");
logLine.getOutputForShortLog();
// => "6:Stack Overflow"
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Java Exercism

Prêt à commencer Des logs, des logs, des logs ! ?

Inscris-toi sur Exercism pour apprendre et maîtriser Java avec 26 concepts158 exercices, et un vrai mentorat humain, le tout gratuitement.