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:14:59 GMT
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>
>

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