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