# Logger declaration

**URL:** <https://discuss.kotlinlang.org/t/logger-declaration/568>\
**Category:** Uncategorized\
**Created:** [June 11, 2014, 10:09pm UTC](https://discuss.kotlinlang.org/t/logger-declaration/568 "2014-06-11T22:09:56Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![kocka](https://avatars.discourse-cdn.com/v4/letter/k/e95f7d/32.png) [@kocka](https://discuss.kotlinlang.org/u/kocka)\
**Post date:** [June 11, 2014, 10:09pm UTC](https://discuss.kotlinlang.org/t/logger-declaration/568/1 "2014-06-11T22:09:56Z")

</div>

Hi!

What is the recommended way in kotlin to declare a logger? I use this

class Foo {

&nbsp;&nbsp;object constants {

&nbsp;&nbsp;val logger = LoggerFactory.getLogger(javaClass\<Foo\>())

&nbsp;&nbsp;}

&nbsp;&nbsp;fun doSomething(name: String) {

&nbsp;&nbsp;constants.logger.info("something: {}", name)

&nbsp;&nbsp;}

}

The downside is of course to use the constants everywhere, very unusual…

---

<div class="post-metadata">

**Author:** ![msgile](https://sea1.discourse-cdn.com/flex019/user_avatar/discuss.kotlinlang.org/msgile/32/1484_2.png) [@msgile](https://discuss.kotlinlang.org/u/msgile)\
**Post date:** [June 12, 2014, 1:48am UTC](https://discuss.kotlinlang.org/t/logger-declaration/568/2 "2014-06-12T01:48:40Z")

</div>

use special "class object" inplace of your inner object "constants"

```kotlin
class Foo {
  class object {
    val logger = LoggerFactory.getLogger(javaClass<Foo>())

  }
  fun doSomething(name: String) {
    logger.info("something: {}", name)

  }

}
```

see [http://confluence.jetbrains.com/display/Kotlin/Classes](http://confluence.jetbrains.com/display/Kotlin/Classes)+and+Inheritance

---

<div class="post-metadata">

**Author:** ![kocka](https://avatars.discourse-cdn.com/v4/letter/k/e95f7d/32.png) [@kocka](https://discuss.kotlinlang.org/u/kocka)\
**Post date:** [June 12, 2014, 8:20am UTC](https://discuss.kotlinlang.org/t/logger-declaration/568/3 "2014-06-12T08:20:31Z")

</div>

looks great, thank you!

---

<div class="post-metadata">

**Author:** ![ndongoyaya](https://sea1.discourse-cdn.com/flex019/user_avatar/discuss.kotlinlang.org/ndongoyaya/32/2255_2.png) [@ndongoyaya](https://discuss.kotlinlang.org/u/ndongoyaya)\
**Post date:** [January 2, 2017, 9:32am UTC](https://discuss.kotlinlang.org/t/logger-declaration/568/4 "2017-01-02T09:32:58Z")

</div>

Just a quick update for the future reader, As with version 1.0.4,

```
class Foo {
  val logger = LoggerFactory.getLogger(Foo::class.java)

 fun doSomething(name: String) {
    logger.info("something: {}", name)

  }
}

```

---

<div class="post-metadata">

**Author:** ![yole](https://sea1.discourse-cdn.com/flex019/user_avatar/discuss.kotlinlang.org/yole/32/1425_2.png) [@yole](https://discuss.kotlinlang.org/u/yole)\
**Post date:** [January 2, 2017, 9:52am UTC](https://discuss.kotlinlang.org/t/logger-declaration/568/5 "2017-01-02T09:52:46Z")

</div>

This creates one logger instance per class instance. If you want to use one logger instance per class, which is normally what you want and which the posts above do, you need to use a `companion object`.

---

<div class="post-metadata">

**Author:** ![ndongoyaya](https://sea1.discourse-cdn.com/flex019/user_avatar/discuss.kotlinlang.org/ndongoyaya/32/2255_2.png) [@ndongoyaya](https://discuss.kotlinlang.org/u/ndongoyaya)\
**Post date:** [January 2, 2017, 10:02am UTC](https://discuss.kotlinlang.org/t/logger-declaration/568/6 "2017-01-02T10:02:37Z")

</div>

Yes, You’re right. Thanks.

```
companion object {
  val logger = LoggerFactory.getLogger(Foo::class.java)
}

```
