Skip to content

Commit dea9c77

Browse files
authored
Merge pull request mouredev#4452 from ASJordi/main
#25 - Java
2 parents 2241cec + 76bdb3d commit dea9c77

File tree

1 file changed

+134
-0
lines changed

1 file changed

+134
-0
lines changed

Roadmap/25 - LOGS/java/ASJordi.java

+134
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
/*
2+
El Api de Java Logging proporciona una serie de métodos para registrar mensajes de aplicación (logs).
3+
Esto permite registrar mensajes que se pueden usar para monitorear y diagnosticar una aplicación.
4+
java.util.logging.Level define 7 niveles de registro de mensajes:
5+
- SEVERE (el más alto)
6+
- WARNING
7+
- INFO
8+
- CONFIG
9+
- FINE
10+
- FINER
11+
- FINEST (el más bajo)
12+
Existen otros 2 niveles: ALL y OFF. El primero se utiliza para habilitar todos los niveles de registro y el segundo para deshabilitar todos los niveles de registro.
13+
El Api de Java Logging proporciona una serie de clases para registrar mensajes de aplicación:
14+
- Logger: es la clase principal para registrar mensajes de aplicación.
15+
- Handler: es una clase que maneja los mensajes de registro.
16+
- Formatter: es una clase que formatea los mensajes de registro.
17+
- Filter: es una clase que filtra los mensajes de registro.
18+
*/
19+
20+
import java.util.LinkedList;
21+
import java.util.List;
22+
import java.util.Scanner;
23+
import java.util.logging.FileHandler;
24+
import java.util.logging.Level;
25+
import java.util.logging.Logger;
26+
import java.util.logging.XMLFormatter;
27+
28+
public class Main {
29+
30+
public static void main(String[] args) {
31+
// useLogger();
32+
tasksManager();
33+
}
34+
35+
/**
36+
* EJERCICIO:
37+
* Explora el concepto de "logging" en tu lenguaje. Configúralo y muestra
38+
* un ejemplo con cada nivel de "severidad" disponible.
39+
*/
40+
static void useLogger() {
41+
// Crear un Logger
42+
Logger logger = Logger.getLogger(Main.class.getName());
43+
// Habilitar todos los niveles de registro
44+
logger.setLevel(Level.ALL);
45+
46+
try {
47+
// Crear un FileHandler para registrar mensajes en un archivo
48+
FileHandler fileHandler = new FileHandler("logs.log");
49+
// Asignar el formateador XML al FileHandler
50+
fileHandler.setFormatter(new XMLFormatter());
51+
// Agregar el FileHandler al Logger
52+
logger.addHandler(fileHandler);
53+
54+
// Registrar mensajes
55+
logger.severe("Mensaje de nivel SEVERE");
56+
logger.warning("Mensaje de nivel WARNING");
57+
logger.info("Mensaje de nivel INFO");
58+
logger.config("Mensaje de nivel CONFIG");
59+
logger.fine("Mensaje de nivel FINE");
60+
logger.finer("Mensaje de nivel FINER");
61+
logger.finest("Mensaje de nivel FINEST");
62+
} catch (Exception e) {
63+
logger.log(Level.SEVERE, "Mensaje de nivel SEVERE", e);
64+
}
65+
}
66+
67+
/**
68+
* DIFICULTAD EXTRA (opcional):
69+
* Crea un programa ficticio de gestión de tareas que permita añadir, eliminar y listar dichas tareas.
70+
* - Añadir: recibe nombre y descripción.
71+
* - Eliminar: por nombre de la tarea.
72+
* Implementa diferentes mensajes de log que muestren información según la
73+
* tarea ejecutada (a tu elección).
74+
* Utiliza el log para visualizar el tiempo de ejecución de cada tarea.
75+
*/
76+
static void tasksManager() {
77+
Logger logger = Logger.getLogger(Main.class.getName());
78+
logger.setLevel(Level.ALL);
79+
Scanner sc = new Scanner(System.in);
80+
sc.useDelimiter("\n");
81+
List<Task> tasks = new LinkedList<>();
82+
String option = "";
83+
84+
while (!option.equals("4")) {
85+
showMenu();
86+
option = sc.nextLine();
87+
switch (option) {
88+
case "1" -> {
89+
long s = System.currentTimeMillis();
90+
System.out.println("Introduce el título de la tarea:");
91+
String title = sc.nextLine();
92+
System.out.println("Introduce la descripción de la tarea:");
93+
String description = sc.nextLine();
94+
Task task = new Task(title, description);
95+
tasks.add(task);
96+
long e = System.currentTimeMillis();
97+
logger.log(Level.INFO, "Tarea creada: " + task);
98+
logger.log(Level.INFO, "Tiempo de ejecución: " + (e - s) + "ms");
99+
}
100+
case "2" -> {
101+
long s = System.currentTimeMillis();
102+
System.out.println("Introduce el título de la tarea a eliminar:");
103+
String title = sc.nextLine();
104+
Task task = tasks.stream().filter(t -> t.title().equalsIgnoreCase(title)).findFirst().orElse(null);
105+
if (task != null) {
106+
tasks.remove(task);
107+
logger.log(Level.INFO, "Tarea eliminada: " + task);
108+
} else logger.log(Level.WARNING, "Tarea no encontrada");
109+
long e = System.currentTimeMillis();
110+
logger.log(Level.INFO, "Tiempo de ejecución: " + (e - s) + "ms");
111+
}
112+
case "3" -> {
113+
long s = System.currentTimeMillis();
114+
if (tasks.isEmpty()) logger.log(Level.WARNING, "No hay tareas");
115+
else tasks.forEach(task -> logger.log(Level.INFO, task.toString()));
116+
long e = System.currentTimeMillis();
117+
logger.log(Level.INFO, "Tiempo de ejecución: " + (e - s) + "ms");
118+
}
119+
case "4" -> logger.log(Level.INFO, "Saliendo...");
120+
default -> logger.log(Level.WARNING, "Opción no válida");
121+
}
122+
}
123+
}
124+
125+
public record Task(String title, String description) {}
126+
127+
static void showMenu() {
128+
System.out.println("Selecciona una opción:");
129+
System.out.println("1. Crear tarea");
130+
System.out.println("2. Eliminar tarea");
131+
System.out.println("3. Mostar tareas");
132+
System.out.println("4. Salir");
133+
}
134+
}

0 commit comments

Comments
 (0)