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