karaf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From James Carman <ja...@carmanconsulting.com>
Subject Re: Using Custom Layout for Log4j2 in Karaf 4.1.x...
Date Thu, 25 May 2017 17:54:45 GMT
Can I just create a log4j2 XML file in the "etc" directory?  I've always
just used the properties file format because that's what PAX uses.

On Thu, May 25, 2017 at 1:48 PM Matt Sicker <boards@gmail.com> wrote:

> I remember there being a bug involving the packages property in only the
> properties file format, not sure if it was fixed. Do you get the same issue
> when using the XML format?
>
> On 25 May 2017 at 12:14, James Carman <james@carmanconsulting.com> wrote:
>
> > Okay, I've found a work-around for me, but I think it brings up a slight
> > improvement. By default, Log4j will only search in the
> > org.apache.logging.log4j.core.* packages for plugins. So, while the
> > fragment host approach does work to get my classes into the
> > "org.ops4j.pax.logging.pax-logging-log4j2" bundle (not
> pax-logging-service
> > as described in the instructions/examples), Log4j will not find them,
> > because they're not in the correct package structure. By moving my custom
> > layout to a package underneath that root package, I was able to get
> things
> > working properly.  We need a way to change the package list that Log4j
> > searches.  I tried setting the log4j2.packages property in the
> > configuration file, but it doesn't seem to be working.  Thoughts?
> >
> >
> >
> >
> > On Thu, May 25, 2017 at 10:09 AM Matt Sicker <boards@gmail.com> wrote:
> >
> > > It's possible there's an issue with the shading going on. Ideally,
> log4j2
> > > should be split into at least log4j-api and log4j-core, but pax-logging
> > > shades them together for some reason.
> > >
> > > On 25 May 2017 at 00:55, Jean-Baptiste Onofré <jb@nanthrax.net> wrote:
> > >
> > > > Hi guys,
> > > >
> > > > I will take a look on this one. It sounds like a missing
> > > > activator/fragment host in pax-logging-log4jv2.
> > > >
> > > > Regards
> > > > JB
> > > >
> > > >
> > > > On 05/25/2017 02:38 AM, James Carman wrote:
> > > >
> > > >> I can try to help if you guys want.  Want me to tinker?  I think we
> > will
> > > >> want to update the docs too, since folks will need to generate those
> > dat
> > > >> files.
> > > >> On Wed, May 24, 2017 at 8:31 PM Matt Sicker <boards@gmail.com>
> wrote:
> > > >>
> > > >> Oh, well that certainly sounds like a problem! There's an activator
> in
> > > >>> both
> > > >>> log4j-api and log4j-core from what I recall, so pax-logging might
> > need
> > > >>> something custom as well.
> > > >>>
> > > >>> On 24 May 2017 at 17:41, James Carman <james@carmanconsulting.com>
> > > >>> wrote:
> > > >>>
> > > >>> So, I've done a bit of digging.  Log4j2 ships with an Activator
> that
> > > sets
> > > >>>> up a BundleListener which scans (looks for Log4j2Plugins.dat
> files)
> > > >>>>
> > > >>> bundles
> > > >>>
> > > >>>> for any plugins to be registered.  Since log4j itself is not
> loaded
> > > as a
> > > >>>> bundle (it appears to be shaded into pax-logging-log4j2),
that
> > > Activator
> > > >>>> doesn't run.  Perhaps we should delegate to Log4j's internal
> > Activator
> > > >>>> during the start() method of the Pax Logging Activator
> > > >>>> (org.ops4j.pax.logging.log4j2.internal.Activator)?  Do we
cover
> > this
> > > >>>> behavior in some other way?
> > > >>>>
> > > >>>>
> > > >>>> On Wed, May 24, 2017 at 3:32 PM James Carman <
> > > >>>> james@carmanconsulting.com
> > > >>>>
> > > >>>> wrote:
> > > >>>>
> > > >>>> So, am I way off base with my approach or anything?  Should
Karaf
> be
> > > >>>>> installing pax-logging-service?  Or, is pax-logging-log4j2
taking
> > its
> > > >>>>>
> > > >>>> place
> > > >>>>
> > > >>>>> for Karaf?  Is there anything special we have to do to
implement
> a
> > > >>>>>
> > > >>>> custom
> > > >>>
> > > >>>> Layout using pax-logging?  Is there a working example I can
use to
> > > >>>>>
> > > >>>> install
> > > >>>>
> > > >>>>> into karaf to see if it works for me?
> > > >>>>>
> > > >>>>>
> > > >>>>> On Wed, May 24, 2017 at 3:20 PM Matt Sicker <boards@gmail.com>
> > > wrote:
> > > >>>>>
> > > >>>>> I mostly work on Log4j2, though I try to answer questions
about
> it
> > on
> > > >>>>>> ops4j
> > > >>>>>> and karaf due to pax-logging.
> > > >>>>>>
> > > >>>>>> On 24 May 2017 at 14:17, James Carman <
> james@carmanconsulting.com
> > >
> > > >>>>>>
> > > >>>>> wrote:
> > > >>>>
> > > >>>>>
> > > >>>>>> I know. ;)  And I meant no slight to you.  I didn't
know you
> were
> > > >>>>>>>
> > > >>>>>> one
> > > >>>
> > > >>>> of
> > > >>>>
> > > >>>>> the contributors these days.  I have checked out the code
and I'm
> > > >>>>>>>
> > > >>>>>> going
> > > >>>>
> > > >>>>> to
> > > >>>>>>
> > > >>>>>>> poke around a bit.
> > > >>>>>>>
> > > >>>>>>> On Wed, May 24, 2017 at 3:15 PM Matt Sicker <boards@gmail.com>
> > > >>>>>>>
> > > >>>>>> wrote:
> > > >>>
> > > >>>>
> > > >>>>>>> That would be on the ops4j lists, though that's
mostly the same
> > > >>>>>>>>
> > > >>>>>>> people as
> > > >>>>>>
> > > >>>>>>> here.
> > > >>>>>>>>
> > > >>>>>>>> On 24 May 2017 at 13:31, James Carman <
> > james@carmanconsulting.com
> > > >>>>>>>>
> > > >>>>>>>
> > > >>>> wrote:
> > > >>>>>>>
> > > >>>>>>>>
> > > >>>>>>>> I think I must be doing something wrong. 
Hopefully one of the
> > > >>>>>>>>>
> > > >>>>>>>> PAX
> > > >>>
> > > >>>> folks
> > > >>>>>>>
> > > >>>>>>>> can help here.  I wonder if I should just
reach out to them
> > > >>>>>>>>>
> > > >>>>>>>> directly or
> > > >>>>>>
> > > >>>>>>> if
> > > >>>>>>>>
> > > >>>>>>>>> this is a karaf-specific issue with PAX?
> > > >>>>>>>>>
> > > >>>>>>>>> On Wed, May 24, 2017 at 2:29 PM Matt Sicker
<
> boards@gmail.com>
> > > >>>>>>>>>
> > > >>>>>>>> wrote:
> > > >>>>>>
> > > >>>>>>>
> > > >>>>>>>>> At compile time, an annotation processor
in log4j-core
> > > >>>>>>>>>>
> > > >>>>>>>>> generates a
> > > >>>>
> > > >>>>> .dat
> > > >>>>>>>
> > > >>>>>>>> file containing some metadata about scanned
plugins. These JAR
> > > >>>>>>>>>>
> > > >>>>>>>>> resource
> > > >>>>>>>
> > > >>>>>>>> files are loaded at plugin scan time where
reflection is used
> > > >>>>>>>>>>
> > > >>>>>>>>> to
> > > >>>
> > > >>>> investigate the classes and instantiate plugins based on
> > > >>>>>>>>>>
> > > >>>>>>>>> config
> > > >>>
> > > >>>> files.
> > > >>>>>>>
> > > >>>>>>>> Alternatively, there's an option you can set
to scan a
> > > >>>>>>>>>>
> > > >>>>>>>>> particular
> > > >>>>
> > > >>>>> list
> > > >>>>>>>
> > > >>>>>>>> of
> > > >>>>>>>>
> > > >>>>>>>>> packages for additional plugins, though
I think that uses the
> > > >>>>>>>>>>
> > > >>>>>>>>> context
> > > >>>>>>
> > > >>>>>>> ClassLoader which might not work properly in your
scenario.
> > > >>>>>>>>>>
> > > >>>>>>>>>> On 24 May 2017 at 11:22, James Carman
<
> > > >>>>>>>>>>
> > > >>>>>>>>> james@carmanconsulting.com
> > > >>>>
> > > >>>>>
> > > >>>>>>> wrote:
> > > >>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>> Any advice on how I might be able
to fight my way through
> > > >>>>>>>>>>>
> > > >>>>>>>>>> it?
> > > >>>
> > > >>>> How
> > > >>>>>>
> > > >>>>>>> does
> > > >>>>>>>>
> > > >>>>>>>>> Log4j2 "discover" those @Plugin-annotated
classes?  Does it
> > > >>>>>>>>>>>
> > > >>>>>>>>>> use
> > > >>>>
> > > >>>>> some
> > > >>>>>>>
> > > >>>>>>>> form
> > > >>>>>>>>>
> > > >>>>>>>>>> of classpath scanning?  Is it scoped
to certain packages
> > > >>>>>>>>>>>
> > > >>>>>>>>>> only?
> > > >>>
> > > >>>> I'm
> > > >>>>>>
> > > >>>>>>> thinking I might have to attach to the pax-logging-log4j2
> > > >>>>>>>>>>>
> > > >>>>>>>>>> bundle
> > > >>>>
> > > >>>>> as a
> > > >>>>>>>
> > > >>>>>>>> host
> > > >>>>>>>>>>
> > > >>>>>>>>>>> in order to augment its classpath
so that it can see my
> > > >>>>>>>>>>>
> > > >>>>>>>>>> stuff.
> > > >>>
> > > >>>>
> > > >>>>>>>>>>> On Wed, May 24, 2017 at 12:20
PM Matt Sicker <
> > > >>>>>>>>>>>
> > > >>>>>>>>>> boards@gmail.com>
> > > >>>>
> > > >>>>> wrote:
> > > >>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>>> It could be a bug in log4j2 itself
rather than
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>> pax-logging.
> > > >>>
> > > >>>> I
> > > >>>>
> > > >>>>> worked
> > > >>>>>>>>
> > > >>>>>>>>> on
> > > >>>>>>>>>
> > > >>>>>>>>>> some OSGi support in log4j2 a while
back, and I'm not sure
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>> if
> > > >>>>
> > > >>>>> this
> > > >>>>>>>
> > > >>>>>>>> is a
> > > >>>>>>>>>
> > > >>>>>>>>>> new
> > > >>>>>>>>>>>
> > > >>>>>>>>>>>> issue or an existing one.
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>> On 24 May 2017 at 05:43, James
Carman <
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>> james@carmanconsulting.com>
> > > >>>>>>>
> > > >>>>>>>> wrote:
> > > >>>>>>>>>>>
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>> I tried adding pax-logging-service
to startup.properties
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>> (after
> > > >>>>>>
> > > >>>>>>> putting
> > > >>>>>>>>>>
> > > >>>>>>>>>>> it
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>>> into the system repo)
and I still have the issue. So,
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>> the
> > > >>>
> > > >>>> ultimate
> > > >>>>>>>>
> > > >>>>>>>>> issue
> > > >>>>>>>>>>>
> > > >>>>>>>>>>>> isn't the fragment host necessarily.
My issue is that it
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>> can't
> > > >>>>>>
> > > >>>>>>> fine
> > > >>>>>>>>
> > > >>>>>>>>> my
> > > >>>>>>>>>>
> > > >>>>>>>>>>> custom layout class. I've tried
using the name from the
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>> @Plugin
> > > >>>>>>
> > > >>>>>>> annotation.
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>>> I've tried using the fully-qualified
class name. Nothing
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>> seems
> > > >>>>>>
> > > >>>>>>> to
> > > >>>>>>>
> > > >>>>>>>> work.
> > > >>>>>>>>>>
> > > >>>>>>>>>>> Here's the declaration of my layout:
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>> @Plugin(name = "MyJsonLayout",
category = Node.CATEGORY,
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>> elementType
> > > >>>>>>>>>
> > > >>>>>>>>>> =
> > > >>>>>>>>>>
> > > >>>>>>>>>>> Layout.ELEMENT_TYPE, printObject
= true)
> > > >>>>>>>>>>>>> public class MyJsonLayout
extends AbstractStringLayout {
> > > >>>>>>>>>>>>> ...
> > > >>>>>>>>>>>>> }
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>> and here's what I've changed
in the logging config file:
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>> log4j2.rootLogger.appenderRef.RollingFile.ref
=
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>> RollingFile
> > > >>>>
> > > >>>>> # Rolling file appender
> > > >>>>>>>>>>>>> log4j2.appender.rolling.type
= RollingRandomAccessFile
> > > >>>>>>>>>>>>> log4j2.appender.rolling.name
= RollingFile
> > > >>>>>>>>>>>>> log4j2.appender.rolling.fileName
=
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>> ${karaf.home}/log/aetos.log
> > > >>>>>>
> > > >>>>>>> log4j2.appender.rolling.filePattern =
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>> ${karaf.home}/log/aetos.log.%i
> > > >>>>>>>>>
> > > >>>>>>>>>> # uncomment to not force a disk flush
> > > >>>>>>>>>>>>> log4j2.appender.rolling.immediateFlush
= false
> > > >>>>>>>>>>>>> log4j2.appender.rolling.append
= true
> > > >>>>>>>>>>>>> log4j2.appender.rolling.layout.type
=
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>> com.myco.log4j.json.MyJsonLayout
> > > >>>>>>>>>>
> > > >>>>>>>>>>> log4j2.appender.rolling.policies.type
= Policies
> > > >>>>>>>>>>>>> log4j2.appender.rolling.policies.size.type
=
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>> SizeBasedTriggeringPolicy
> > > >>>>>>>>>>
> > > >>>>>>>>>>> log4j2.appender.rolling.policies.size.size
= 200MB
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>> As I said, I tried just
using layout.type =
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>> MyJsonLayout,
> > > >>>
> > > >>>> but
> > > >>>>>>
> > > >>>>>>> that
> > > >>>>>>>>
> > > >>>>>>>>> doesn't
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>>> work either.  Do we have
an example where something like
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>> this
> > > >>>>>>
> > > >>>>>>> works
> > > >>>>>>>>
> > > >>>>>>>>> that
> > > >>>>>>>>>>>
> > > >>>>>>>>>>>> I
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>>> can reverse engineer?
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>> Thanks,
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>> James
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>> On Tue, May 23, 2017 at
7:03 PM James Carman <
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>> james@carmanconsulting.com
> > > >>>>>>>>>>>
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>>> wrote:
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>> I am trying to use a custom
layout and I'm following
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>> the
> > > >>>
> > > >>>> examples
> > > >>>>>>>>
> > > >>>>>>>>> (I
> > > >>>>>>>>>>
> > > >>>>>>>>>>> think).  We had one that worked
in Karaf 3.0.x.
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>> Anyway, I
> > > >>>>
> > > >>>>> set
> > > >>>>>>>
> > > >>>>>>>> up
> > > >>>>>>>>
> > > >>>>>>>>> the
> > > >>>>>>>>>>
> > > >>>>>>>>>>> fragment host like this:
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> <plugin>
> > > >>>>>>>>>>>>>>    <groupId>org.apache.felix</groupId>
> > > >>>>>>>>>>>>>>    <artifactId>maven-bundle-plugin</artifactId>
> > > >>>>>>>>>>>>>>    <version>3.3.0</version>
> > > >>>>>>>>>>>>>>    <extensions>true</extensions>
> > > >>>>>>>>>>>>>>    <inherited>true</inherited>
> > > >>>>>>>>>>>>>>    <configuration>
> > > >>>>>>>>>>>>>>      <instructions>
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>> <Fragment-Host>org.ops4j.pax.logging.pax-logging-service</
> > > >>>>>>
> > > >>>>> Fragment-Host>
> > > >>>>
> > > >>>>>      </instructions>
> > > >>>>>>>>>>>>>>    </configuration>
> > > >>>>>>>>>>>>>> </plugin>
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> However, my bundle
will not resolve this way. I don't
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>> see
> > > >>>>
> > > >>>>> that
> > > >>>>>>>
> > > >>>>>>>> bundle
> > > >>>>>>>>>>
> > > >>>>>>>>>>> being loaded in Karaf 4.1.1:
> > > >>>>>>>>>>>>>>   karaf@root()>
list -t 0 -s | grep -i log 19:01:18
> > > >>>>>>>>>>>>>>   5 │ Active │
8 │ 1.9.1 │ org.ops4j.pax.logging.pax-
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>> logging-api
> > > >>>>>>>
> > > >>>>>>>>   6 │ Active │ 8 │ 1.9.1 │ org.ops4j.pax.logging.pax-
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>> logging-log4j2
> > > >>>>>>>>>
> > > >>>>>>>>>> 36 │ Active │ 30 │ 4.1.1 │
org.apache.karaf.log.core
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> I tried binding to
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>> "org.ops4j.pax.logging.pax-logging-api",
> > > >>>>>>
> > > >>>>>>> but
> > > >>>>>>>
> > > >>>>>>>> that
> > > >>>>>>>>>>
> > > >>>>>>>>>>> didn't work either.  Did this
process change for
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>> 4.1.x?
> > > >>>
> > > >>>>
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>> --
> > > >>>>>>>>>>>> Matt Sicker <boards@gmail.com>
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>> --
> > > >>>>>>>>>> Matt Sicker <boards@gmail.com>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>> --
> > > >>>>>>>> Matt Sicker <boards@gmail.com>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>> --
> > > >>>>>> Matt Sicker <boards@gmail.com>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>
> > > >>>>
> > > >>>
> > > >>>
> > > >>> --
> > > >>> Matt Sicker <boards@gmail.com>
> > > >>>
> > > >>>
> > > >>
> > > > --
> > > > Jean-Baptiste Onofré
> > > > jbonofre@apache.org
> > > > http://blog.nanthrax.net
> > > > Talend - http://www.talend.com
> > > >
> > >
> > >
> > >
> > > --
> > > Matt Sicker <boards@gmail.com>
> > >
> >
>
>
>
> --
> Matt Sicker <boards@gmail.com>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message