1
+ import io.github.oshai.kotlinlogging.KotlinLogging
2
+
3
+
4
+ /*
5
+ Logs
6
+ Los logs son mensajes que sirven como historial de eventos sucedidos en la aplicacion
7
+ estos sirven para informar a los desarrolladores sobre diferentes eventos que ocurren en la aplicacion
8
+
9
+ los logs se clasifican en
10
+ - Debug
11
+ - Trace
12
+ - Info
13
+ - Warning
14
+ - Error
15
+
16
+ como sus nombres los indican estos son eventos que ocurren en la aplicacion al clasficarlos
17
+ tambien se les puede dar prioridad esto ayuda a configurar parametros para dar a conocer a los
18
+ desarrolladores eventos que ocurren en la aplicacion. por lo general los Error tienen mayor prioridad
19
+
20
+ depedencias
21
+ https://github.com/oshai/kotlin-logging logger
22
+ https://mvnrepository.com/artifact/org.slf4j/slf4j-api depedencia padre
23
+ https://mvnrepository.com/artifact/ch.qos.logback/logback-classic/1.5.6 formateo y prioridada de los logs
24
+ https://github.com/Tuxdude/logback-colorizer dar color a los logs opcional pero quedan bonitos con colores
25
+
26
+ archivo basico de formatos de logs src/main/resources/logback.xml
27
+ <property scope="context" name="COLORIZER_COLORS" value="red@,yellow@,green@,blue@,cyan@" />
28
+ <conversionRule conversionWord="colorize" converterClass="org.tuxdude.logback.extensions.LogColorizer" />
29
+ <appender name="STDOUT" class="ConsoleAppender">
30
+ <encoder class="PatternLayoutEncoder">
31
+ <pattern>%colorize(%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -- %msg%n) </pattern>
32
+ </encoder>
33
+ </appender>
34
+
35
+ <root level="trace">
36
+ <appender-ref ref="STDOUT" />
37
+ </root>
38
+ </configuration>
39
+
40
+ tutorial basico
41
+ https://saltnlight5.blogspot.com/2013/08/how-to-configure-slf4j-with-different.html
42
+
43
+ */
44
+
45
+ val logger= KotlinLogging .logger { }
46
+
47
+ fun exampleWithLogs () {
48
+ // probando alguna funcion
49
+ logger.debug { " debug message" }
50
+ // seguimientos de eventos en la aplicacion conexion de base de datos etc
51
+ logger.trace { " trace message" }
52
+ // informamos sobre cosas que ocurren en la aplicacion
53
+ logger.info { " info message" }
54
+ // informamos sobre eventos que podrian generar error en caso de no atederse
55
+ logger.warn { " warn message" }
56
+ // informamos sobre eventos de error en la aplicacion
57
+ logger.error { " error message" }
58
+ }
59
+
60
+ // ejercicio extra
61
+ data class Task (val name : String ,val description : String ,var done : Boolean =false )
62
+
63
+ interface TaskRepository {
64
+ fun save (task : Task )
65
+ fun delete (name : String )
66
+ fun completedTask (name : String )
67
+ fun getAll ():List <Task >
68
+ fun getTaskBy (predicate : (Task )-> Boolean ):List <Task >
69
+ }
70
+
71
+ class TaskManager :TaskRepository {
72
+ private val tasks= mutableListOf<Task >()
73
+ override fun save (task : Task ) {
74
+ logger.trace { " new task recived for add list" }
75
+ val registred= tasks.add(task)
76
+ if (registred) logger.info { " task ${task.name} was added to the list" }
77
+ }
78
+
79
+ override fun delete (name : String ) {
80
+ logger.trace { " task $name recived for deleted" }
81
+ val deleted= tasks.removeIf { it.name== name }
82
+ if (deleted) logger.info { " task $name was deleted" }
83
+ else logger.error { " task $name not found" }
84
+ }
85
+
86
+ override fun completedTask (name : String ) {
87
+ logger.trace { " task $name recived for completed" }
88
+ tasks.find { it.name== name }.let {
89
+ if (it== null ) logger.warn {" task name is null value" }
90
+ it?.done= true
91
+ logger.info { " task $name was completed" }
92
+ }
93
+ }
94
+
95
+ override fun getAll (): List <Task > {
96
+ logger.trace { " get all tasks" }
97
+ return tasks
98
+ }
99
+
100
+ override fun getTaskBy (predicate : (Task ) -> Boolean ): List <Task >{
101
+ logger.trace {" find task with predicate" }
102
+ return tasks.filter { predicate(it) }
103
+ }
104
+
105
+ }
106
+
107
+
108
+
109
+ fun main () {
110
+ exampleWithLogs()
111
+ val task1= Task (" Clean my room" ," clean my room" )
112
+ val task3= Task (" migration" ," migrate maven to kotlin dsl" )
113
+ val task4= Task (" solution for programming roadmap" ," create a solution for programming roadmap" )
114
+ val manager= TaskManager ()
115
+ manager.save(task1)
116
+ manager.save(task3)
117
+ manager.save(task4)
118
+ manager.delete(" migration" )
119
+ manager.completedTask(" Clean my room" )
120
+ manager.getAll().forEach { println (it) }
121
+ manager.getTaskBy { it.done== true }.forEach { println (it) }
122
+
123
+ }
0 commit comments