Skip to content

Commit 43dbba4

Browse files
committed
#25 - java, javascript, php y typescript
1 parent 5f6cb01 commit 43dbba4

File tree

4 files changed

+799
-0
lines changed

4 files changed

+799
-0
lines changed

Roadmap/25 - LOGS/java/eulogioep.java

Lines changed: 218 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,218 @@
1+
/**
2+
* Implementación de un sistema de logging y gestión de tareas en Java.
3+
*
4+
* TEORÍA SOBRE LOGGING EN JAVA:
5+
* Java proporciona un framework de logging nativo (java.util.logging) que ofrece:
6+
* - Diferentes niveles de severidad (SEVERE, WARNING, INFO, etc.)
7+
* - Capacidad de escribir en múltiples destinos (consola, archivo)
8+
* - Formato personalizable de mensajes
9+
* - Filtros y handlers configurables
10+
*
11+
* Niveles de logging en java.util.logging:
12+
* - SEVERE: Para errores críticos
13+
* - WARNING: Para advertencias
14+
* - INFO: Para información general
15+
* - CONFIG: Para mensajes de configuración
16+
* - FINE, FINER, FINEST: Para depuración con diferentes niveles de detalle
17+
*/
18+
19+
import java.io.IOException;
20+
import java.time.LocalDateTime;
21+
import java.time.format.DateTimeFormatter;
22+
import java.util.ArrayList;
23+
import java.util.List;
24+
import java.util.logging.*;
25+
import java.util.stream.Collectors;
26+
27+
public class eulogioep {
28+
/**
29+
* Clase para manejar el logging personalizado
30+
*/
31+
static class CustomLogger {
32+
private static final Logger LOGGER = Logger.getLogger(CustomLogger.class.getName());
33+
34+
static {
35+
try {
36+
// Configurar el logger para escribir en un archivo
37+
FileHandler fileHandler = new FileHandler("tareas.log", true);
38+
fileHandler.setFormatter(new SimpleFormatter());
39+
LOGGER.addHandler(fileHandler);
40+
41+
// Configurar el logger para escribir en consola
42+
ConsoleHandler consoleHandler = new ConsoleHandler();
43+
consoleHandler.setFormatter(new SimpleFormatter());
44+
LOGGER.addHandler(consoleHandler);
45+
46+
// Establecer el nivel de logging
47+
LOGGER.setLevel(Level.ALL);
48+
} catch (IOException e) {
49+
e.printStackTrace();
50+
}
51+
}
52+
53+
public static void severe(String message) {
54+
LOGGER.severe(formatMessage(message));
55+
}
56+
57+
public static void warning(String message) {
58+
LOGGER.warning(formatMessage(message));
59+
}
60+
61+
public static void info(String message) {
62+
LOGGER.info(formatMessage(message));
63+
}
64+
65+
public static void config(String message) {
66+
LOGGER.config(formatMessage(message));
67+
}
68+
69+
public static void fine(String message) {
70+
LOGGER.fine(formatMessage(message));
71+
}
72+
73+
private static String formatMessage(String message) {
74+
return String.format("[%s] %s",
75+
LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME),
76+
message);
77+
}
78+
}
79+
80+
/**
81+
* Clase que representa una tarea
82+
*/
83+
static class Task {
84+
private final String name;
85+
private final String description;
86+
private final LocalDateTime createdAt;
87+
88+
public Task(String name, String description) {
89+
this.name = name;
90+
this.description = description;
91+
this.createdAt = LocalDateTime.now();
92+
}
93+
94+
public String getName() {
95+
return name;
96+
}
97+
98+
public String getDescription() {
99+
return description;
100+
}
101+
102+
public LocalDateTime getCreatedAt() {
103+
return createdAt;
104+
}
105+
106+
@Override
107+
public String toString() {
108+
return String.format("Tarea: %s - %s (Creada: %s)",
109+
name,
110+
description,
111+
createdAt.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
112+
}
113+
}
114+
115+
/**
116+
* Clase para la gestión de tareas
117+
*/
118+
static class TaskManager {
119+
private final List<Task> tasks;
120+
121+
public TaskManager() {
122+
this.tasks = new ArrayList<>();
123+
}
124+
125+
/**
126+
* Mide el tiempo de ejecución de una operación
127+
*/
128+
private void measureExecutionTime(Runnable operation, String operationName) {
129+
long startTime = System.nanoTime();
130+
try {
131+
operation.run();
132+
long endTime = System.nanoTime();
133+
double executionTime = (endTime - startTime) / 1_000_000.0; // Convertir a millisegundos
134+
CustomLogger.fine(String.format("Tiempo de ejecución %s: %.2fms",
135+
operationName, executionTime));
136+
} catch (Exception e) {
137+
CustomLogger.severe(String.format("Error en %s: %s",
138+
operationName, e.getMessage()));
139+
}
140+
}
141+
142+
/**
143+
* Añade una nueva tarea
144+
*/
145+
public void addTask(String name, String description) {
146+
measureExecutionTime(() -> {
147+
// Verificar si ya existe una tarea con el mismo nombre
148+
if (tasks.stream().anyMatch(t -> t.getName().equals(name))) {
149+
CustomLogger.warning(String.format("La tarea '%s' ya existe", name));
150+
return;
151+
}
152+
153+
Task task = new Task(name, description);
154+
tasks.add(task);
155+
CustomLogger.info(String.format("Tarea '%s' añadida exitosamente", name));
156+
}, "addTask");
157+
}
158+
159+
/**
160+
* Elimina una tarea por su nombre
161+
*/
162+
public void removeTask(String name) {
163+
measureExecutionTime(() -> {
164+
int initialSize = tasks.size();
165+
tasks.removeIf(task -> task.getName().equals(name));
166+
167+
if (tasks.size() == initialSize) {
168+
CustomLogger.warning(String.format("No se encontró la tarea '%s'", name));
169+
} else {
170+
CustomLogger.info(String.format("Tarea '%s' eliminada exitosamente", name));
171+
}
172+
}, "removeTask");
173+
}
174+
175+
/**
176+
* Lista todas las tareas existentes
177+
*/
178+
public void listTasks() {
179+
measureExecutionTime(() -> {
180+
if (tasks.isEmpty()) {
181+
CustomLogger.info("No hay tareas registradas");
182+
return;
183+
}
184+
185+
CustomLogger.info("Lista de tareas:");
186+
tasks.forEach(task -> CustomLogger.info("- " + task.toString()));
187+
}, "listTasks");
188+
}
189+
}
190+
191+
/**
192+
* Método principal para demostrar el uso del sistema
193+
*/
194+
public static void main(String[] args) {
195+
CustomLogger.info("Iniciando sistema de gestión de tareas");
196+
197+
// Demostración de diferentes niveles de logging
198+
CustomLogger.severe("Ejemplo de mensaje SEVERE");
199+
CustomLogger.warning("Ejemplo de mensaje WARNING");
200+
CustomLogger.info("Ejemplo de mensaje INFO");
201+
CustomLogger.config("Ejemplo de mensaje CONFIG");
202+
CustomLogger.fine("Ejemplo de mensaje FINE");
203+
204+
// Crear instancia del gestor de tareas
205+
TaskManager taskManager = new TaskManager();
206+
207+
// Ejemplos de uso del sistema
208+
taskManager.addTask("Estudiar Java", "Aprender sobre logging y POO");
209+
taskManager.addTask("Hacer ejercicio", "30 minutos de cardio");
210+
taskManager.addTask("Estudiar Java", "Tarea duplicada"); // Intentar añadir duplicada
211+
taskManager.listTasks();
212+
taskManager.removeTask("Estudiar Java");
213+
taskManager.listTasks();
214+
taskManager.removeTask("Tarea inexistente");
215+
216+
CustomLogger.info("Finalizando sistema de gestión de tareas");
217+
}
218+
}

0 commit comments

Comments
 (0)