You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@karaf.apache.org by abdelb <ab...@live.co.uk> on 2019/04/17 11:08:16 UTC

Karaf 4.2.4 - log to separate file

I want logs that come from a specific class in a bundle to go to a separate
file. 

E.g. I have class 

/package com.myproject.mypackage;

public class MyClass {
    private static final Logger logger =
LoggerFactory.getLogger(MyClass.class);
    ...    
}/


Everything that is logged from this class should go to a file MyClass.log.
I've added a custom logger/appender to the default
org.ops4j.pax.logging.cfg: 

/# MyClass logger
log4j2.logger.myClass.name = com.myproject.mypackage.MyClass
log4j2.logger.myClass.level = INFO
log4j2.logger.myClass.additivity = false
log4j2.logger.myClass.appenderRef.myClassAppender.ref = myClassAppender

# GatherStats appender
log4j2.appender.myClassAppender.name = myClassAppender
log4j2.appender.myClassAppender.type = RollingFile
log4j2.appender.myClassAppender.fileName=${karaf.log}/MyClass.log
log4j2.appender.myClassAppender.filePattern=${karaf.log}/MyClass.log-%d{yyyy-MM-dd-HH)-%i.log.gz


I get the following stacktrace when launching Karaf: 
2019-04-17 12:05:28,948 CM Configuration Updater (ManagedService Update:
pid=[org.ops4j.pax.logging]) ERROR The parameter is null: policy
2019-04-17 12:05:28,952 CM Configuration Updater (ManagedService Update:
pid=[org.ops4j.pax.logging]) ERROR Unable to inject fields into builder
class for plugin type class
org.apache.logging.log4j.core.appender.RollingFileAppender, element
RollingFile. org.apache.logging.log4j.core.config.ConfigurationException:
Arguments given for element RollingFile are invalid
        at
org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.injectFields(PluginBuilder.java:198)
        at
org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:121)
        at
org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:952)
        at
org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:892)
        at
org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:884)
        at
org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:508)
        at
org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:232)
        at
org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:244)
        at
org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545)
        at
org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:261)
        at
org.ops4j.pax.logging.log4j2.internal.PaxLoggingServiceImpl.doUpdate(PaxLoggingServiceImpl.java:213)
        at
org.ops4j.pax.logging.log4j2.internal.PaxLoggingServiceImpl.updated(PaxLoggingServiceImpl.java:158)
        at
org.ops4j.pax.logging.log4j2.internal.PaxLoggingServiceImpl$1ManagedPaxLoggingService.updated(PaxLoggingServiceImpl.java:426)
        at
org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
        at
org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152)
        at
org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85)
        at
org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1113)
        at
org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1069)
        at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:138)
        at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:105)
        at java.lang.Thread.run(Thread.java:745)

2019-04-17 12:05:28,953 CM Configuration Updater (ManagedService Update:
pid=[org.ops4j.pax.logging]) ERROR Unable to invoke factory method in class
class org.apache.logging.log4j.core.appender.RollingFileAppender for element
RollingFile. java.lang.IllegalStateException: No factory method found for
class org.apache.logging.log4j.core.appender.RollingFileAppender
        at
org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.findFactoryMethod(PluginBuilder.java:224)
        at
org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:130)
        at
org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:952)
        at
org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:892)
        at
org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:884)
        at
org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:508)
        at
org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:232)
        at
org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:244)
        at
org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545)
        at
org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:261)
        at
org.ops4j.pax.logging.log4j2.internal.PaxLoggingServiceImpl.doUpdate(PaxLoggingServiceImpl.java:213)
        at
org.ops4j.pax.logging.log4j2.internal.PaxLoggingServiceImpl.updated(PaxLoggingServiceImpl.java:158)
        at
org.ops4j.pax.logging.log4j2.internal.PaxLoggingServiceImpl$1ManagedPaxLoggingService.updated(PaxLoggingServiceImpl.java:426)
        at
org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
        at
org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152)
        at
org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85)
        at
org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1113)
        at
org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1069)
        at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:138)
        at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:105)
        at java.lang.Thread.run(Thread.java:745)

2019-04-17 12:05:28,954 CM Configuration Updater (ManagedService Update:
pid=[org.ops4j.pax.logging]) ERROR Null object returned for RollingFile in
Appenders.
2019-04-17 12:05:28,954 CM Configuration Updater (ManagedService Update:
pid=[org.ops4j.pax.logging]) ERROR Unable to locate appender
"myClassAppender" for logger config "com.myproject.mypackage.MyClass"



--
Sent from: http://karaf.922171.n3.nabble.com/Karaf-User-f930749.html

Re: Karaf 4.2.4 - log to separate file

Posted by Jean-Baptiste Onofré <jb...@nanthrax.net>.
Cool ;)

Happy to help ;)

Regards
JB

On 17/04/2019 15:32, abdelb wrote:
> Brilliant, that's working nicely now :) 
> 
> 
> 
> --
> Sent from: http://karaf.922171.n3.nabble.com/Karaf-User-f930749.html
> 

-- 
Jean-Baptiste Onofré
jbonofre@apache.org
http://blog.nanthrax.net
Talend - http://www.talend.com

Re: Karaf 4.2.4 - log to separate file

Posted by abdelb <ab...@live.co.uk>.
Brilliant, that's working nicely now :) 



--
Sent from: http://karaf.922171.n3.nabble.com/Karaf-User-f930749.html

Re: Karaf 4.2.4 - log to separate file

Posted by Jean-Baptiste Onofré <jb...@nanthrax.net>.
Hi,

I already answer to similar question last week and I also updated the
provided org.ops4j.pax.logging.cfg file.

You are not so far but you have a mistake in your config.

Can you try the following:

log4j2.logger.myClass.name = com.myproject.mypackage
log4j2.logger.myClass.level = INFO
log4j2.logger.myClass.additivity = false
log4j2.logger.myClass.appenderRef.MyClassAppender.ref = MyClassAppender

log4j2.appender.MyClassAppender.type = RollingRandomAccessFile
log4j2.appender.MyClassAppender.name = MyClassAppender
log4j2.appender.MyClassAppender.fileName = ${karaf.log}/myclass.log
log4j2.appender.MyClassAppender.filePattern = ${karaf.log}/myclass-%i.log
log4j2.appender.MyClassAppender.append = true
log4j2.appender.MyClassAppender.layout.type = PatternLayout
log4j2.appender.MyClassAppender.layout.pattern = ${log4j2.pattern}
log4j2.appender.MyClassAppender.policies.type = Policies
log4j2.appender.MyClassAppender.policies.size.type =
SizeBasedTriggeringPolicy
log4j2.appender.MyClassAppender.policies.size.size = 8MB

Regards
JB

On 17/04/2019 13:08, abdelb wrote:
> I want logs that come from a specific class in a bundle to go to a separate
> file. 
> 
> E.g. I have class 
> 
> /package com.myproject.mypackage;
> 
> public class MyClass {
>     private static final Logger logger =
> LoggerFactory.getLogger(MyClass.class);
>     ...    
> }/
> 
> 
> Everything that is logged from this class should go to a file MyClass.log.
> I've added a custom logger/appender to the default
> org.ops4j.pax.logging.cfg: 
> 
> /# MyClass logger
> log4j2.logger.myClass.name = com.myproject.mypackage.MyClass
> log4j2.logger.myClass.level = INFO
> log4j2.logger.myClass.additivity = false
> log4j2.logger.myClass.appenderRef.myClassAppender.ref = myClassAppender
> 
> # GatherStats appender
> log4j2.appender.myClassAppender.name = myClassAppender
> log4j2.appender.myClassAppender.type = RollingFile
> log4j2.appender.myClassAppender.fileName=${karaf.log}/MyClass.log
> log4j2.appender.myClassAppender.filePattern=${karaf.log}/MyClass.log-%d{yyyy-MM-dd-HH)-%i.log.gz
> 
> 
> I get the following stacktrace when launching Karaf: 
> 2019-04-17 12:05:28,948 CM Configuration Updater (ManagedService Update:
> pid=[org.ops4j.pax.logging]) ERROR The parameter is null: policy
> 2019-04-17 12:05:28,952 CM Configuration Updater (ManagedService Update:
> pid=[org.ops4j.pax.logging]) ERROR Unable to inject fields into builder
> class for plugin type class
> org.apache.logging.log4j.core.appender.RollingFileAppender, element
> RollingFile. org.apache.logging.log4j.core.config.ConfigurationException:
> Arguments given for element RollingFile are invalid
>         at
> org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.injectFields(PluginBuilder.java:198)
>         at
> org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:121)
>         at
> org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:952)
>         at
> org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:892)
>         at
> org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:884)
>         at
> org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:508)
>         at
> org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:232)
>         at
> org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:244)
>         at
> org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545)
>         at
> org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:261)
>         at
> org.ops4j.pax.logging.log4j2.internal.PaxLoggingServiceImpl.doUpdate(PaxLoggingServiceImpl.java:213)
>         at
> org.ops4j.pax.logging.log4j2.internal.PaxLoggingServiceImpl.updated(PaxLoggingServiceImpl.java:158)
>         at
> org.ops4j.pax.logging.log4j2.internal.PaxLoggingServiceImpl$1ManagedPaxLoggingService.updated(PaxLoggingServiceImpl.java:426)
>         at
> org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
>         at
> org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152)
>         at
> org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85)
>         at
> org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1113)
>         at
> org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1069)
>         at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:138)
>         at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:105)
>         at java.lang.Thread.run(Thread.java:745)
> 
> 2019-04-17 12:05:28,953 CM Configuration Updater (ManagedService Update:
> pid=[org.ops4j.pax.logging]) ERROR Unable to invoke factory method in class
> class org.apache.logging.log4j.core.appender.RollingFileAppender for element
> RollingFile. java.lang.IllegalStateException: No factory method found for
> class org.apache.logging.log4j.core.appender.RollingFileAppender
>         at
> org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.findFactoryMethod(PluginBuilder.java:224)
>         at
> org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:130)
>         at
> org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:952)
>         at
> org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:892)
>         at
> org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:884)
>         at
> org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:508)
>         at
> org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:232)
>         at
> org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:244)
>         at
> org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545)
>         at
> org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:261)
>         at
> org.ops4j.pax.logging.log4j2.internal.PaxLoggingServiceImpl.doUpdate(PaxLoggingServiceImpl.java:213)
>         at
> org.ops4j.pax.logging.log4j2.internal.PaxLoggingServiceImpl.updated(PaxLoggingServiceImpl.java:158)
>         at
> org.ops4j.pax.logging.log4j2.internal.PaxLoggingServiceImpl$1ManagedPaxLoggingService.updated(PaxLoggingServiceImpl.java:426)
>         at
> org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
>         at
> org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152)
>         at
> org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85)
>         at
> org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1113)
>         at
> org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1069)
>         at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:138)
>         at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:105)
>         at java.lang.Thread.run(Thread.java:745)
> 
> 2019-04-17 12:05:28,954 CM Configuration Updater (ManagedService Update:
> pid=[org.ops4j.pax.logging]) ERROR Null object returned for RollingFile in
> Appenders.
> 2019-04-17 12:05:28,954 CM Configuration Updater (ManagedService Update:
> pid=[org.ops4j.pax.logging]) ERROR Unable to locate appender
> "myClassAppender" for logger config "com.myproject.mypackage.MyClass"
> 
> 
> 
> --
> Sent from: http://karaf.922171.n3.nabble.com/Karaf-User-f930749.html
> 

-- 
Jean-Baptiste Onofré
jbonofre@apache.org
http://blog.nanthrax.net
Talend - http://www.talend.com

Re: Karaf 4.2.4 - log to separate file

Posted by abdelb <ab...@live.co.uk>.
EDIT



--
Sent from: http://karaf.922171.n3.nabble.com/Karaf-User-f930749.html