# Setup
## Dependency installation
[](https://maven-badges.herokuapp.com/maven-central/dev.inmo/kslog)
### Gradle (Groovy)
```groovy
implementation "dev.inmo:kslog:$kslog_version"
```
### Gradle (Kotlin Script)
```kotlin
implementation("dev.inmo:kslog:$kslog_version")
```
### Maven (pom)
```xml
dev.inmo
kslog
${kslog_version}
```
## Setup in code
The main point in setup in your code is to setup default logger:
```kotlin
KSLog.default = KSLog("defaultTag")
```
You may use custom `messageFormatter` in any of `KSLog` factory to customize output of `KSLog` logging. For example:
```kotlin
KSLog(
"loggingWithCustomFormat",
messageFormatter = { level, tag, message, throwable ->
println("[$level] $tag - $message: $throwable")
}
)
```
Additionally you may use one of several different settings:
* `minLoggingLevel` - minimal logging level for the log which will be logged. The order of log level is next:
* DEBUG
* VERBOSE
* INFO
* WARNING
* ERROR
* ASSERT
* `levels` - and iterable with the levels which should be logged
* `firstLevel`,`secondLevel`,`otherLevels` - as `levels`, but `vararg` :)
In case you are passing `minLoggingLevel`, the **level and more important levels** will be passed to logs. For example, when you are settings up your logger as in next snippet:
```kotlin
val logger = KSLog(
"exampleTag",
minLoggingLevel = LogLevel.INFO
)
```
The next levels will be logged with `logger`:
* `INFO`
* `WARNING`
* `ERROR`
* `ASSERT`
## Special loggers
### CallbackKSLog
It is logger which will call incoming `performLogCallback` on each logging. This logger can be create simply with one callback:
```kotlin
KSLog { level, tag, message, throwable ->
println("[$level] $tag - $message: $throwable")
}
```
### TagLogger
It is simple value class which can be used for zero-cost usage of some tag and calling for `KSLog.default`. For example, if you will create tag logger with next code:
```kotlin
val logger = TagLogger("tagLoggerTag")
```
The `logger` will call `KSLog.default` with the tag `tagLoggerTag` on each calling of logging.
### FilterKSLog
This pretty simple logger will call its `fallbackLogger` only in cases when incoming `messageFilter` will return true for logging:
```kotlin
val baseLogger = KSLog("base") // log everything with the tag `base` if not set other
val filtered = baseLogger.filtered { _, t, _ ->
t == "base"
}
```
In the example above `baseLogger` will perform logs in two ways: when it has been called directly or when we call log performing with the tag `"base"` or `null`. Besides, you can see there extension `filtered` which allow to create `FilterKSLog` logger with simple lambda.
### TypedKSLog
This logger accepts map of types with the target loggers. You may build this logger with the special simple DSL:
```kotlin
val baseLogger = KSLog("base") // log everything with the tag `base` if not set other
val typed = buildTypedLogger {
on(baseLogger) // log all ints to the baseLogger
on { _, _, message, _ ->// log all floats to the passed logger
println(message.toString()) // just print all floats
}
default { level, tag, message, throwable ->
KSLog.performLog(level, tag, message, throwable)
}
}
```
### Automatical loggers
There are two things which can be useful in your code: `logger` and `logTag` extensions. `logTag` is the autocalculated by your object classname tag. `logger` extension can be used with applying to any object like in the next snippet:
```kotlin
class SomeClass {
init {
logger.i("inited")
}
}
```
The code above will trigger calling of logging in `KSLog.default` with level `LogLevel.INFO` using tag `SomeClass` and message `"inited"`. As you could have guessed, `logger` is using `TagLogger` with `logTag` underhood and the most expensive operation here is automatical calculation of `logTag`.
* Extension `logger`
## JVM specific setup
For JVM you may setup additionally use java loggers as the second parameter of `KSLog` factory. For example:
```kotlin
KSLog(
"yourTag"
Logger.getLogger("YourJavaLoggerName")
)
```