Hi Dirk, have you read the section on Logger support in R7 Declarative
Services? See
https://osgi.org/specification/osgi.cmpn/7.0.0/service.component.html#service.component-logger.support
(or section 112.3.12 in the PDF).

This section shows the recommended approach to obtaining a Logger instance
in a component.

Regards,
Neil

On Mon, Apr 9, 2018 at 11:56 AM, Fauth Dirk (AA-AS/EIS2-EU) via osgi-dev <
osgi-dev@mail.osgi.org> wrote:

> Hi,
>
>
>
> as with R7 the LogService is deprecated and instead the LoggerFactory
> should be used, I wanted to start integrating the LoggerFactory in the
> Eclipse Platform. But there is not much information about how the usage
> should be.
>
>
>
> From what I understand so far, the idea is similar to SLF4J that a Logger
> instance is created via LoggerFactory. The Logger provides API for logging
> similar to SLF4J, even with placeholder parameters and exception logging (I
> like that pretty much).
>
>
>
> But there is one thing I am not sure if I understand everything correctly.
> With SLF4J the LoggerFactory is static and the best practice is to create
> one Logger instance per class by using the LoggerFactory on a static field.
> This is done to reduce the needed amount of memory for cases where a lot of
> instances are created of a type. With OSGi R7 the LoggerFactory is a
> service and not a static helper class. So for DS I need to specify a
> reference. But actually I don’t want the LoggerFactory, I want a Logger.
> And I don’t want to create a Logger instance per log statement. I therefore
> thought of the following pattern for getting an OSGi Logger in my component:
>
>
>
> @Component
>
> *public* *class* StringInverterImpl *implements* StringInverter {
>
>
>
>        *private* Logger logger;
>
>
>
>        @Override
>
>        *public* String invert(String input) {
>
>              logger.info("received {} to invert", input);
>
>              *return* *new* StringBuilder(input).reverse().toString();
>
>        }
>
>
>
>        @Reference
>
>        *void* setLoggerFactory(LoggerFactory factory) {
>
>              *this*.logger = factory.getLogger(getClass());
>
>        }
>
> }
>
>
>
> So I have a mandatory reference to LoggerFactory, and once the reference
> is set, I use it to get the Logger instance. Since the reference is static
> and mandatory I don’t need to take care if the LoggerFactory comes and goes
> at runtime. And as the service instance typically only exists once, there
> is also no memory overhead with this. For multi-instance components created
> by a factory, this could even have the advantage to create a Logger with a
> name that corresponds to the instance. Which would in turn make the log
> outputs more speaking in terms of knowing which component instance created
> the log output.
>
>
>
> Would this be the recommended way of using logging in R7? Are my
> observations correct or do I misunderstand something?
>
>
>
> I would be happy to even write a small blog post about that topic if
> nobody else is currently writing something with regards to logging in R7.
>
>
>
> Mit freundlichen Grüßen / Best regards
>
>
> *Dirk Fauth *
> Automotive Service Solutions, ESI application (AA-AS/EIS2-EU)
> Robert Bosch GmbH | Postfach 11 29 | 73201 Plochingen | GERMANY |
> www.bosch.com
> Tel. +49 7153 666-1155 | dirk.fa...@de.bosch.com
>
> Sitz: Stuttgart, Registergericht: Amtsgericht Stuttgart, HRB 14000;
> Aufsichtsratsvorsitzender: Franz Fehrenbach; Geschäftsführung: Dr. Volkmar
> Denner,
> Prof. Dr. Stefan Asenkerschbaumer, Dr. Rolf Bulander, Dr. Stefan Hartung,
> Dr. Markus Heyn, Dr. Dirk Hoheisel,
> Christoph Kübel, Uwe Raschke, Peter Tyroller
>
>
>
> _______________________________________________
> OSGi Developer Mail List
> osgi-dev@mail.osgi.org
> https://mail.osgi.org/mailman/listinfo/osgi-dev
>
_______________________________________________
OSGi Developer Mail List
osgi-dev@mail.osgi.org
https://mail.osgi.org/mailman/listinfo/osgi-dev

Reply via email to