You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-user@logging.apache.org by Nipuni Piyabasi Perera <ni...@gmail.com> on 2016/02/03 14:07:07 UTC

Custom appender not identified in OSGi environment

Hi,

I have written a custom appender extending the log4j2 AbstractAppender. But
I am getting a runtime error[1]. I have added the plugin annotation[2] as
per the manual and the custom appender class contains factory method
createAppender() as well. I also have added the package name to
configuration element.
What am I missing here? Appreciate any input on this.

I have my log4j2.xml file as below:

<Configuration packages="org.my.custom.http.socket.appender">
    <Appenders>
        ...
        <Socket name="socket" host="localhost" port="4714">
      <!--PatternLayout pattern="[%d] %5p {%c} - %m%ex%n"/-->
    </Socket>
        <HTTPSocket name="HTTP_APPENDER" host="localhost" port="8888">
   <-------------------------------------
New Appender
    </HTTPSocket>
    </Appenders>
    <Loggers>
        <Root level="info" includeLocation="true">
            ...
            <AppenderRef ref="HTTP_APPENDER"/>
        </Root>
        <Logger name="my.custom.deployer" level="info" additivity="true">
                <AppenderRef ref="socket"/>
    </Logger>
    </Loggers>
</Configuration>


[1] ERROR Appenders contains an invalid element or attribute "HTTPSocket"
[2] @Plugin(name = "HTTPSocket", category = "Core", elementType = "appender",
printObject = true)

Thanks,
Nipuni

-- 
Nipuni Perera
Software Engineer; WSO2 Inc.; http://wso2.com
Email: nipuni@wso2.com
Git hub profile: https://github.com/nipuni
Blog : http://nipunipererablog.blogspot.com/
Mobile: +94 (71) 5626680

Re: Custom appender not identified in OSGi environment

Posted by Nipuni Piyabasi Perera <ni...@gmail.com>.
Hi Matt,

I have posted this on ops4j group discussion.[1]

[1] https://groups.google.com/forum/#!topic/ops4j/QvSOAmOrACg

Thanks,
Nipuni

On Fri, Feb 5, 2016 at 10:39 PM, Matt Sicker <bo...@gmail.com> wrote:

> That sounds like a problem in pax-logging-log4j2 then. I wouldn't expect to
> have to do that. Could you file an issue for pax-logging?
>
> On 5 February 2016 at 10:44, Nipuni Piyabasi Perera <
> nipuni880917@gmail.com>
> wrote:
>
> > Hi all,
> >
> > This was a class loading issue in my OSGi environment. We were using
> > pax-logging 1.8.4 (which exports log4j2 2.0.2) and the class loader
> cannot
> > load the package (package read from the log4j2.xml configuration) as the
> > new bundle is not visible to the pax-logging bundle.
> >
> > Could resolve it after adding it as a fragment to pax-logging-log4j2
> 1.8.4
> > [1]. (This way new appender bundle becomes a fragment of
> pax-logging-log4j2
> > and visible to the class loader.)
> >
> > Sorry for the noise. Thanks all for the replies.
> >
> > [1]
> <Fragment-Host>org.ops4j.pax.logging.pax-logging-log4j2</Fragment-Host>
> >
> > Thanks,
> > Nipuni
> >
> > On Fri, Feb 5, 2016 at 9:24 PM, Matt Sicker <bo...@gmail.com> wrote:
> >
> > > This sounds like it's probably a bug. Could you file an issue in jira?
> > >
> > > On 4 February 2016 at 12:42, Ralph Goers <ra...@dslextreme.com>
> > > wrote:
> > >
> > > > I don’t think so. I suspect that
> > > > org.apache.logging.log4j.core.osgi.Activator.java is not finding your
> > > > plugin but I am not sure why.
> > > >
> > > > Ralph
> > > >
> > > > > On Feb 4, 2016, at 11:38 AM, Nipuni Piyabasi Perera <
> > > > nipuni880917@gmail.com> wrote:
> > > > >
> > > > > Thanks for the input.
> > > > >
> > > > > Yes the issue may be different than what I have mentioned. I
> > suspected
> > > > that
> > > > > the issue is related to Log4j2Plugins.dat file as the appender is
> > > working
> > > > > fine in non-OSGi environment, and the only different I could find
> was
> > > > > that Log4j2Plugins.dat
> > > > > file comparing the  two jars. May be I am missing some plugin that
> I
> > > need
> > > > > to add in pom.xml.
> > > > >
> > > > > Thanks,
> > > > > Nipuni
> > > > >
> > > > > On Fri, Feb 5, 2016 at 12:00 AM, Ralph Goers <
> > > ralph.goers@dslextreme.com
> > > > >
> > > > > wrote:
> > > > >
> > > > >> Actually, I just looked at the code and there is a class that
> should
> > > be
> > > > >> looking at your bundle to locate any plugins you may have. I am
> > > actually
> > > > >> not very familiar with that code so I wonder if one of the other
> > > > committers
> > > > >> could provide insight on what might be causing it not to work.
> > > > >>
> > > > >> Ralph
> > > > >>
> > > > >>> On Feb 4, 2016, at 11:06 AM, Ralph Goers <
> > ralph.goers@dslextreme.com
> > > >
> > > > >> wrote:
> > > > >>>
> > > > >>> I don’t believe that issue is related to your problem.
> > > > >>>
> > > > >>> When Log4j loads plugins it can only find plugins on whatever
> class
> > > > path
> > > > >> it has available to it.  If it is in a different OSGi bundle than
> > your
> > > > >> plugin it may not see it.  In short, Log4j has to be able to find
> > > > >>
> > > META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat
> > > > for
> > > > >> Log4j and the same file for your plugin. Log4j’s file is embedded
> in
> > > the
> > > > >> log4j-core jar. Yours will be in whatever jar you are producing.
> > There
> > > > is a
> > > > >> process for “shading” your code with Log4j’s that will cause them
> to
> > > be
> > > > >> combined, but I am afraid I don’t know exactly where that is
> > > > documented. If
> > > > >> you want your stuff in a separate bundle from Log4j’s then you
> need
> > to
> > > > >> figure out how to get the stuff in your bundle on Log4j’s
> classpath.
> > > > >>>
> > > > >>> Ralph
> > > > >>>
> > > > >>>> On Feb 4, 2016, at 10:39 AM, Nipuni Piyabasi Perera <
> > > > >> nipuni880917@gmail.com> wrote:
> > > > >>>>
> > > > >>>> Hi all,
> > > > >>>>
> > > > >>>> Above mentioned issue is reported and fixed in[1]. I have tried
> to
> > > use
> > > > >>>> log4j2- 2.0.1 (as this is the fix version of the jira) in my
> OSGi
> > > > >>>> environment. But I still see the same CLASS_NOT_FOUND error
> while
> > it
> > > > >> works
> > > > >>>> fine in non-OSGi environment.
> > > > >>>>
> > > > >>>> [1] https://issues.apache.org/jira/browse/LOG4J2-741
> > > > >>>>
> > > > >>>> Thanks,
> > > > >>>> Nipuni
> > > > >>>>
> > > > >>>> On Thu, Feb 4, 2016 at 9:24 AM, Nipuni Piyabasi Perera <
> > > > >>>> nipuni880917@gmail.com> wrote:
> > > > >>>>
> > > > >>>>> Hi,
> > > > >>>>>
> > > > >>>>> Thank you very much for the reply.
> > > > >>>>>
> > > > >>>>> Initially I got error [1] when I am trying to test the appender
> > in
> > > > >>>>> non-OSGi environment. This was due to not passing the correct
> > > number
> > > > of
> > > > >>>>> parameters to the factory method. I have updated my log4j2.xml
> > and
> > > > then
> > > > >>>>> could solve the issue[1] in non-OSGi env. I have applied the
> same
> > > > >>>>> configuration to OSGi environment as well.
> > > > >>>>>
> > > > >>>>> Now I am seeing error[2],which seems to be a class loading
> issue
> > as
> > > > you
> > > > >>>>> have mentioned. I did added the plugin processor in my pom.xml
> > but
> > > > >> still
> > > > >>>>> seeing the same issue. While comparing the OSGi bundle and the
> > > > >> non-OSGi jar
> > > > >>>>> I could see that the Log4j2Plugins.dat file is missing in the
> > OSGi
> > > > >> bundle. I
> > > > >>>>> have added the package name to configuration element as well.
> (as
> > > per
> > > > >> the
> > > > >>>>> pom.xml [3] I am using log4j2 2.5)
> > > > >>>>>
> > > > >>>>> [1] Unable to invoke factory method in class ...
> > > > >>>>> [2] ERROR Error processing element HTTPSocket: CLASS_NOT_FOUND
> > > > >>>>> [3] Adding the plugin section of my pom.xml
> > > > >>>>>
> > > > >>>>> <plugins>
> > > > >>>>>  <plugin>
> > > > >>>>>      <groupId>org.apache.felix</groupId>
> > > > >>>>>      <artifactId>maven-scr-plugin</artifactId>
> > > > >>>>>      <version>1.9.0</version>
> > > > >>>>>      <executions>
> > > > >>>>>          <execution>
> > > > >>>>>              <id>generate-scr-scrdescriptor</id>
> > > > >>>>>              <goals>
> > > > >>>>>                  <goal>scr</goal>
> > > > >>>>>              </goals>
> > > > >>>>>          </execution>
> > > > >>>>>      </executions>
> > > > >>>>>  </plugin>
> > > > >>>>>  <plugin>
> > > > >>>>>      <groupId>org.apache.maven.plugins</groupId>
> > > > >>>>>      <artifactId>maven-compiler-plugin</artifactId>
> > > > >>>>>      <version>3.1</version>
> > > > >>>>>      <executions>
> > > > >>>>>          <execution>
> > > > >>>>>              <id>log4j-plugin-processor</id>
> > > > >>>>>              <goals>
> > > > >>>>>                  <goal>compile</goal>
> > > > >>>>>              </goals>
> > > > >>>>>              <phase>process-classes</phase>
> > > > >>>>>              <configuration>
> > > > >>>>>                  <proc>only</proc>
> > > > >>>>>                  <annotationProcessors>
> > > > >>>>>
> > > > >>
> > > >
> > >
> >
> <annotationProcessor>org.apache.logging.log4j.core.config.plugins.processor.PluginProcessor</annotationProcessor>
> > > > >>>>>                  </annotationProcessors>
> > > > >>>>>              </configuration>
> > > > >>>>>          </execution>
> > > > >>>>>      </executions>
> > > > >>>>>  </plugin>
> > > > >>>>>  <plugin>
> > > > >>>>>      <groupId>org.apache.felix</groupId>
> > > > >>>>>      <artifactId>maven-bundle-plugin</artifactId>
> > > > >>>>>      <extensions>true</extensions>
> > > > >>>>>      <configuration>
> > > > >>>>>          <instructions>
> > > > >>>>>              <Bundle-Vendor>Nipuni</Bundle-Vendor>
> > > > >>>>>
> > > > >>
> > > >
> > >
> >
> <Bundle-SymbolicName>org.my.custom.http.socket.appender</Bundle-SymbolicName>
> > > > >>>>>
> > > > >> <Bundle-Name>org.my.custom.http.socket.appender</Bundle-Name>
> > > > >>>>>              <Bundle-Version>1.0.0</Bundle-Version>
> > > > >>>>>              <Import-Package>
> > > > >>>>>                  org.apache.log4j.*;version="[2.5.0,3.0.0)"
> > > > >>>>>              </Import-Package>
> > > > >>>>>              <Export-Package>
> > > > >>>>>
> > > org.my.custom.http.socket.appender.*;version="1.0.0"
> > > > >>>>>              </Export-Package>
> > > > >>>>>              <DynamicImport-Package>*</DynamicImport-Package>
> > > > >>>>>          </instructions>
> > > > >>>>>      </configuration>
> > > > >>>>>  </plugin>
> > > > >>>>>
> > > > >>>>> </plugins>
> > > > >>>>>
> > > > >>>>>
> > > > >>>>> Thanks,
> > > > >>>>> Nipuni
> > > > >>>>>
> > > > >>>>> On Thu, Feb 4, 2016 at 4:31 AM, Remko Popma <
> > remko.popma@gmail.com
> > > >
> > > > >> wrote:
> > > > >>>>>
> > > > >>>>>> Thanks for confirming that.
> > > > >>>>>>
> > > > >>>>>> You may avoid the classloader issues by combining the log4j
> jars
> > > and
> > > > >> your
> > > > >>>>>> custom appender in a single jar.
> > > > >>>>>>
> > > > >>>>>> The only tricky part here is that you'd need to combine the
> > > > serialized
> > > > >>>>>> plugin listing files (see
> > > > >>>>>> http://logging.apache.org/log4j/2.x/manual/plugins.html) from
> > the
> > > > >>>>>> various log4j jars into a single serialized plugin listing
> file
> > in
> > > > >> your
> > > > >>>>>> superjar.
> > > > >>>>>>
> > > > >>>>>> See the source code for PluginProcessor for more details.
> > > > >>>>>>
> > > > >>
> > > >
> > >
> >
> https://logging.apache.org/log4j/2.x/log4j-core/xref/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.html
> > > > >>>>>>
> > > > >>>>>> Sent from my iPhone
> > > > >>>>>>
> > > > >>>>>>> On 2016/02/03, at 23:54, Nipuni Piyabasi Perera <
> > > > >> nipuni880917@gmail.com>
> > > > >>>>>> wrote:
> > > > >>>>>>>
> > > > >>>>>>> Hi all,
> > > > >>>>>>>
> > > > >>>>>>> As I have mentioned in my first mail, the issue is only in
> the
> > > OSGi
> > > > >>>>>>> environment it seems. I had mistakenly added the appender as
> a
> > > OSGi
> > > > >>>>>> bundle
> > > > >>>>>>> in the non-OSGi environment. Could resolve the issue after
> > > changing
> > > > >> the
> > > > >>>>>>> package to a jar.
> > > > >>>>>>>
> > > > >>>>>>> Thanks,
> > > > >>>>>>> Nipuni
> > > > >>>>>>>
> > > > >>>>>>> On Wed, Feb 3, 2016 at 7:41 PM, Nipuni Piyabasi Perera <
> > > > >>>>>>> nipuni880917@gmail.com> wrote:
> > > > >>>>>>>
> > > > >>>>>>>> Thanks for the prompt reply.
> > > > >>>>>>>>
> > > > >>>>>>>> I have first tried my custom appender in OSGi environment
> > which
> > > > gave
> > > > >>>>>> the
> > > > >>>>>>>> errors above. But I am getting the same issue in non-OSGi
> > > > >> environment
> > > > >>>>>> too.
> > > > >>>>>>>> It seems an issue with custom appender.
> > > > >>>>>>>> AFAIK It is plugin annotation that make the appender visible
> > to
> > > > >>>>>> log4j2. I
> > > > >>>>>>>> can't find any issue in my log4j2.xml and plugin
> configuration
> > > of
> > > > >> the
> > > > >>>>>>>> class. Is there any other places that I need to care about?
> > > > >>>>>>>>
> > > > >>>>>>>> Thanks,
> > > > >>>>>>>> Nipuni
> > > > >>>>>>>>
> > > > >>>>>>>> On Wed, Feb 3, 2016 at 7:28 PM, Ralph Goers <
> > > > >>>>>> ralph.goers@dslextreme.com>
> > > > >>>>>>>> wrote:
> > > > >>>>>>>>
> > > > >>>>>>>>> OSGi does interesting things with ClassLoaders. Log4j has
> to
> > be
> > > > >> able
> > > > >>>>>> to
> > > > >>>>>>>>> access your plugin when it is configuring. If it isn’t in
> an
> > > > >>>>>> accessible
> > > > >>>>>>>>> ClassLoader it won’t see it.  There have been a few people
> > who
> > > > are
> > > > >>>>>> using
> > > > >>>>>>>>> Log4j in an OSGi environment that have helped out with
> > patches
> > > > from
> > > > >>>>>> time to
> > > > >>>>>>>>> time. Perhaps one of them can help out?
> > > > >>>>>>>>>
> > > > >>>>>>>>> Ralph
> > > > >>>>>>>>>
> > > > >>>>>>>>>>> On Feb 3, 2016, at 6:07 AM, Nipuni Piyabasi Perera <
> > > > >>>>>>>>>> nipuni880917@gmail.com> wrote:
> > > > >>>>>>>>>>
> > > > >>>>>>>>>> Hi,
> > > > >>>>>>>>>>
> > > > >>>>>>>>>> I have written a custom appender extending the log4j2
> > > > >>>>>> AbstractAppender.
> > > > >>>>>>>>> But
> > > > >>>>>>>>>> I am getting a runtime error[1]. I have added the plugin
> > > > >>>>>> annotation[2]
> > > > >>>>>>>>> as
> > > > >>>>>>>>>> per the manual and the custom appender class contains
> > factory
> > > > >> method
> > > > >>>>>>>>>> createAppender() as well. I also have added the package
> name
> > > to
> > > > >>>>>>>>>> configuration element.
> > > > >>>>>>>>>> What am I missing here? Appreciate any input on this.
> > > > >>>>>>>>>>
> > > > >>>>>>>>>> I have my log4j2.xml file as below:
> > > > >>>>>>>>>>
> > > > >>>>>>>>>> <Configuration
> > packages="org.my.custom.http.socket.appender">
> > > > >>>>>>>>>> <Appenders>
> > > > >>>>>>>>>>    ...
> > > > >>>>>>>>>>    <Socket name="socket" host="localhost" port="4714">
> > > > >>>>>>>>>>  <!--PatternLayout pattern="[%d] %5p {%c} - %m%ex%n"/-->
> > > > >>>>>>>>>> </Socket>
> > > > >>>>>>>>>>    <HTTPSocket name="HTTP_APPENDER" host="localhost"
> > > > port="8888">
> > > > >>>>>>>>>> <-------------------------------------
> > > > >>>>>>>>>> New Appender
> > > > >>>>>>>>>> </HTTPSocket>
> > > > >>>>>>>>>> </Appenders>
> > > > >>>>>>>>>> <Loggers>
> > > > >>>>>>>>>>    <Root level="info" includeLocation="true">
> > > > >>>>>>>>>>        ...
> > > > >>>>>>>>>>        <AppenderRef ref="HTTP_APPENDER"/>
> > > > >>>>>>>>>>    </Root>
> > > > >>>>>>>>>>    <Logger name="my.custom.deployer" level="info"
> > > > >>>>>> additivity="true">
> > > > >>>>>>>>>>            <AppenderRef ref="socket"/>
> > > > >>>>>>>>>> </Logger>
> > > > >>>>>>>>>> </Loggers>
> > > > >>>>>>>>>> </Configuration>
> > > > >>>>>>>>>>
> > > > >>>>>>>>>>
> > > > >>>>>>>>>> [1] ERROR Appenders contains an invalid element or
> attribute
> > > > >>>>>>>>> "HTTPSocket"
> > > > >>>>>>>>>> [2] @Plugin(name = "HTTPSocket", category = "Core",
> > > elementType
> > > > =
> > > > >>>>>>>>> "appender",
> > > > >>>>>>>>>> printObject = true)
> > > > >>>>>>>>>>
> > > > >>>>>>>>>> Thanks,
> > > > >>>>>>>>>> Nipuni
> > > > >>>>>>>>>>
> > > > >>>>>>>>>> --
> > > > >>>>>>>>>> Nipuni Perera
> > > > >>>>>>>>>> Software Engineer; WSO2 Inc.; http://wso2.com
> > > > >>>>>>>>>> Email: nipuni@wso2.com
> > > > >>>>>>>>>> Git hub profile: https://github.com/nipuni
> > > > >>>>>>>>>> Blog : http://nipunipererablog.blogspot.com/
> > > > >>>>>>>>>> Mobile: +94 (71) 5626680
> > > > >>>>>>>>>
> > > > >>>>>>>>>
> > > > >>>>>>>>>
> > > > >>>>>>>>>
> > > > >>
> > ---------------------------------------------------------------------
> > > > >>>>>>>>> To unsubscribe, e-mail:
> > > > log4j-user-unsubscribe@logging.apache.org
> > > > >>>>>>>>> For additional commands, e-mail:
> > > > >> log4j-user-help@logging.apache.org
> > > > >>>>>>>>
> > > > >>>>>>>>
> > > > >>>>>>>> --
> > > > >>>>>>>> Nipuni Perera
> > > > >>>>>>>> Software Engineer; WSO2 Inc.; http://wso2.com
> > > > >>>>>>>> Email: nipuni@wso2.com
> > > > >>>>>>>> Git hub profile: https://github.com/nipuni
> > > > >>>>>>>> Blog : http://nipunipererablog.blogspot.com/
> > > > >>>>>>>> Mobile: +94 (71) 5626680
> > > > >>>>>>>
> > > > >>>>>>>
> > > > >>>>>>>
> > > > >>>>>>> --
> > > > >>>>>>> Nipuni Perera
> > > > >>>>>>> Software Engineer; WSO2 Inc.; http://wso2.com
> > > > >>>>>>> Email: nipuni@wso2.com
> > > > >>>>>>> Git hub profile: https://github.com/nipuni
> > > > >>>>>>> Blog : http://nipunipererablog.blogspot.com/
> > > > >>>>>>> Mobile: +94 (71) 5626680
> > > > >>>>>>
> > > > >>>>>
> > > > >>>>>
> > > > >>>>>
> > > > >>>>> --
> > > > >>>>> Nipuni Perera
> > > > >>>>> Software Engineer; WSO2 Inc.; http://wso2.com
> > > > >>>>> Email: nipuni@wso2.com
> > > > >>>>> Git hub profile: https://github.com/nipuni
> > > > >>>>> Blog : http://nipunipererablog.blogspot.com/
> > > > >>>>> Mobile: +94 (71) 5626680
> > > > >>>>>
> > > > >>>>
> > > > >>>>
> > > > >>>>
> > > > >>>> --
> > > > >>>> Nipuni Perera
> > > > >>>> Software Engineer; WSO2 Inc.; http://wso2.com
> > > > >>>> Email: nipuni@wso2.com
> > > > >>>> Git hub profile: https://github.com/nipuni
> > > > >>>> Blog : http://nipunipererablog.blogspot.com/
> > > > >>>> Mobile: +94 (71) 5626680
> > > > >>>
> > > > >>
> > > > >>
> > > > >>
> > > > >>
> > ---------------------------------------------------------------------
> > > > >> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> > > > >> For additional commands, e-mail:
> log4j-user-help@logging.apache.org
> > > > >>
> > > > >>
> > > > >
> > > > >
> > > > > --
> > > > > Nipuni Perera
> > > > > Software Engineer; WSO2 Inc.; http://wso2.com
> > > > > Email: nipuni@wso2.com
> > > > > Git hub profile: https://github.com/nipuni
> > > > > Blog : http://nipunipererablog.blogspot.com/
> > > > > Mobile: +94 (71) 5626680
> > > >
> > > >
> > > >
> > > > ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> > > > For additional commands, e-mail: log4j-user-help@logging.apache.org
> > > >
> > > >
> > >
> > >
> > > --
> > > Matt Sicker <bo...@gmail.com>
> > >
> >
> >
> >
> > --
> > Nipuni Perera
> > Software Engineer; WSO2 Inc.; http://wso2.com
> > Email: nipuni@wso2.com
> > Git hub profile: https://github.com/nipuni
> > Blog : http://nipunipererablog.blogspot.com/
> > Mobile: +94 (71) 5626680
> >
>
>
>
> --
> Matt Sicker <bo...@gmail.com>
>



-- 
Nipuni Perera
Software Engineer; WSO2 Inc.; http://wso2.com
Email: nipuni@wso2.com
Git hub profile: https://github.com/nipuni
Blog : http://nipunipererablog.blogspot.com/
Mobile: +94 (71) 5626680

Re: Custom appender not identified in OSGi environment

Posted by Matt Sicker <bo...@gmail.com>.
That sounds like a problem in pax-logging-log4j2 then. I wouldn't expect to
have to do that. Could you file an issue for pax-logging?

On 5 February 2016 at 10:44, Nipuni Piyabasi Perera <ni...@gmail.com>
wrote:

> Hi all,
>
> This was a class loading issue in my OSGi environment. We were using
> pax-logging 1.8.4 (which exports log4j2 2.0.2) and the class loader cannot
> load the package (package read from the log4j2.xml configuration) as the
> new bundle is not visible to the pax-logging bundle.
>
> Could resolve it after adding it as a fragment to pax-logging-log4j2 1.8.4
> [1]. (This way new appender bundle becomes a fragment of pax-logging-log4j2
> and visible to the class loader.)
>
> Sorry for the noise. Thanks all for the replies.
>
> [1] <Fragment-Host>org.ops4j.pax.logging.pax-logging-log4j2</Fragment-Host>
>
> Thanks,
> Nipuni
>
> On Fri, Feb 5, 2016 at 9:24 PM, Matt Sicker <bo...@gmail.com> wrote:
>
> > This sounds like it's probably a bug. Could you file an issue in jira?
> >
> > On 4 February 2016 at 12:42, Ralph Goers <ra...@dslextreme.com>
> > wrote:
> >
> > > I don’t think so. I suspect that
> > > org.apache.logging.log4j.core.osgi.Activator.java is not finding your
> > > plugin but I am not sure why.
> > >
> > > Ralph
> > >
> > > > On Feb 4, 2016, at 11:38 AM, Nipuni Piyabasi Perera <
> > > nipuni880917@gmail.com> wrote:
> > > >
> > > > Thanks for the input.
> > > >
> > > > Yes the issue may be different than what I have mentioned. I
> suspected
> > > that
> > > > the issue is related to Log4j2Plugins.dat file as the appender is
> > working
> > > > fine in non-OSGi environment, and the only different I could find was
> > > > that Log4j2Plugins.dat
> > > > file comparing the  two jars. May be I am missing some plugin that I
> > need
> > > > to add in pom.xml.
> > > >
> > > > Thanks,
> > > > Nipuni
> > > >
> > > > On Fri, Feb 5, 2016 at 12:00 AM, Ralph Goers <
> > ralph.goers@dslextreme.com
> > > >
> > > > wrote:
> > > >
> > > >> Actually, I just looked at the code and there is a class that should
> > be
> > > >> looking at your bundle to locate any plugins you may have. I am
> > actually
> > > >> not very familiar with that code so I wonder if one of the other
> > > committers
> > > >> could provide insight on what might be causing it not to work.
> > > >>
> > > >> Ralph
> > > >>
> > > >>> On Feb 4, 2016, at 11:06 AM, Ralph Goers <
> ralph.goers@dslextreme.com
> > >
> > > >> wrote:
> > > >>>
> > > >>> I don’t believe that issue is related to your problem.
> > > >>>
> > > >>> When Log4j loads plugins it can only find plugins on whatever class
> > > path
> > > >> it has available to it.  If it is in a different OSGi bundle than
> your
> > > >> plugin it may not see it.  In short, Log4j has to be able to find
> > > >>
> > META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat
> > > for
> > > >> Log4j and the same file for your plugin. Log4j’s file is embedded in
> > the
> > > >> log4j-core jar. Yours will be in whatever jar you are producing.
> There
> > > is a
> > > >> process for “shading” your code with Log4j’s that will cause them to
> > be
> > > >> combined, but I am afraid I don’t know exactly where that is
> > > documented. If
> > > >> you want your stuff in a separate bundle from Log4j’s then you need
> to
> > > >> figure out how to get the stuff in your bundle on Log4j’s classpath.
> > > >>>
> > > >>> Ralph
> > > >>>
> > > >>>> On Feb 4, 2016, at 10:39 AM, Nipuni Piyabasi Perera <
> > > >> nipuni880917@gmail.com> wrote:
> > > >>>>
> > > >>>> Hi all,
> > > >>>>
> > > >>>> Above mentioned issue is reported and fixed in[1]. I have tried to
> > use
> > > >>>> log4j2- 2.0.1 (as this is the fix version of the jira) in my OSGi
> > > >>>> environment. But I still see the same CLASS_NOT_FOUND error while
> it
> > > >> works
> > > >>>> fine in non-OSGi environment.
> > > >>>>
> > > >>>> [1] https://issues.apache.org/jira/browse/LOG4J2-741
> > > >>>>
> > > >>>> Thanks,
> > > >>>> Nipuni
> > > >>>>
> > > >>>> On Thu, Feb 4, 2016 at 9:24 AM, Nipuni Piyabasi Perera <
> > > >>>> nipuni880917@gmail.com> wrote:
> > > >>>>
> > > >>>>> Hi,
> > > >>>>>
> > > >>>>> Thank you very much for the reply.
> > > >>>>>
> > > >>>>> Initially I got error [1] when I am trying to test the appender
> in
> > > >>>>> non-OSGi environment. This was due to not passing the correct
> > number
> > > of
> > > >>>>> parameters to the factory method. I have updated my log4j2.xml
> and
> > > then
> > > >>>>> could solve the issue[1] in non-OSGi env. I have applied the same
> > > >>>>> configuration to OSGi environment as well.
> > > >>>>>
> > > >>>>> Now I am seeing error[2],which seems to be a class loading issue
> as
> > > you
> > > >>>>> have mentioned. I did added the plugin processor in my pom.xml
> but
> > > >> still
> > > >>>>> seeing the same issue. While comparing the OSGi bundle and the
> > > >> non-OSGi jar
> > > >>>>> I could see that the Log4j2Plugins.dat file is missing in the
> OSGi
> > > >> bundle. I
> > > >>>>> have added the package name to configuration element as well. (as
> > per
> > > >> the
> > > >>>>> pom.xml [3] I am using log4j2 2.5)
> > > >>>>>
> > > >>>>> [1] Unable to invoke factory method in class ...
> > > >>>>> [2] ERROR Error processing element HTTPSocket: CLASS_NOT_FOUND
> > > >>>>> [3] Adding the plugin section of my pom.xml
> > > >>>>>
> > > >>>>> <plugins>
> > > >>>>>  <plugin>
> > > >>>>>      <groupId>org.apache.felix</groupId>
> > > >>>>>      <artifactId>maven-scr-plugin</artifactId>
> > > >>>>>      <version>1.9.0</version>
> > > >>>>>      <executions>
> > > >>>>>          <execution>
> > > >>>>>              <id>generate-scr-scrdescriptor</id>
> > > >>>>>              <goals>
> > > >>>>>                  <goal>scr</goal>
> > > >>>>>              </goals>
> > > >>>>>          </execution>
> > > >>>>>      </executions>
> > > >>>>>  </plugin>
> > > >>>>>  <plugin>
> > > >>>>>      <groupId>org.apache.maven.plugins</groupId>
> > > >>>>>      <artifactId>maven-compiler-plugin</artifactId>
> > > >>>>>      <version>3.1</version>
> > > >>>>>      <executions>
> > > >>>>>          <execution>
> > > >>>>>              <id>log4j-plugin-processor</id>
> > > >>>>>              <goals>
> > > >>>>>                  <goal>compile</goal>
> > > >>>>>              </goals>
> > > >>>>>              <phase>process-classes</phase>
> > > >>>>>              <configuration>
> > > >>>>>                  <proc>only</proc>
> > > >>>>>                  <annotationProcessors>
> > > >>>>>
> > > >>
> > >
> >
> <annotationProcessor>org.apache.logging.log4j.core.config.plugins.processor.PluginProcessor</annotationProcessor>
> > > >>>>>                  </annotationProcessors>
> > > >>>>>              </configuration>
> > > >>>>>          </execution>
> > > >>>>>      </executions>
> > > >>>>>  </plugin>
> > > >>>>>  <plugin>
> > > >>>>>      <groupId>org.apache.felix</groupId>
> > > >>>>>      <artifactId>maven-bundle-plugin</artifactId>
> > > >>>>>      <extensions>true</extensions>
> > > >>>>>      <configuration>
> > > >>>>>          <instructions>
> > > >>>>>              <Bundle-Vendor>Nipuni</Bundle-Vendor>
> > > >>>>>
> > > >>
> > >
> >
> <Bundle-SymbolicName>org.my.custom.http.socket.appender</Bundle-SymbolicName>
> > > >>>>>
> > > >> <Bundle-Name>org.my.custom.http.socket.appender</Bundle-Name>
> > > >>>>>              <Bundle-Version>1.0.0</Bundle-Version>
> > > >>>>>              <Import-Package>
> > > >>>>>                  org.apache.log4j.*;version="[2.5.0,3.0.0)"
> > > >>>>>              </Import-Package>
> > > >>>>>              <Export-Package>
> > > >>>>>
> > org.my.custom.http.socket.appender.*;version="1.0.0"
> > > >>>>>              </Export-Package>
> > > >>>>>              <DynamicImport-Package>*</DynamicImport-Package>
> > > >>>>>          </instructions>
> > > >>>>>      </configuration>
> > > >>>>>  </plugin>
> > > >>>>>
> > > >>>>> </plugins>
> > > >>>>>
> > > >>>>>
> > > >>>>> Thanks,
> > > >>>>> Nipuni
> > > >>>>>
> > > >>>>> On Thu, Feb 4, 2016 at 4:31 AM, Remko Popma <
> remko.popma@gmail.com
> > >
> > > >> wrote:
> > > >>>>>
> > > >>>>>> Thanks for confirming that.
> > > >>>>>>
> > > >>>>>> You may avoid the classloader issues by combining the log4j jars
> > and
> > > >> your
> > > >>>>>> custom appender in a single jar.
> > > >>>>>>
> > > >>>>>> The only tricky part here is that you'd need to combine the
> > > serialized
> > > >>>>>> plugin listing files (see
> > > >>>>>> http://logging.apache.org/log4j/2.x/manual/plugins.html) from
> the
> > > >>>>>> various log4j jars into a single serialized plugin listing file
> in
> > > >> your
> > > >>>>>> superjar.
> > > >>>>>>
> > > >>>>>> See the source code for PluginProcessor for more details.
> > > >>>>>>
> > > >>
> > >
> >
> https://logging.apache.org/log4j/2.x/log4j-core/xref/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.html
> > > >>>>>>
> > > >>>>>> Sent from my iPhone
> > > >>>>>>
> > > >>>>>>> On 2016/02/03, at 23:54, Nipuni Piyabasi Perera <
> > > >> nipuni880917@gmail.com>
> > > >>>>>> wrote:
> > > >>>>>>>
> > > >>>>>>> Hi all,
> > > >>>>>>>
> > > >>>>>>> As I have mentioned in my first mail, the issue is only in the
> > OSGi
> > > >>>>>>> environment it seems. I had mistakenly added the appender as a
> > OSGi
> > > >>>>>> bundle
> > > >>>>>>> in the non-OSGi environment. Could resolve the issue after
> > changing
> > > >> the
> > > >>>>>>> package to a jar.
> > > >>>>>>>
> > > >>>>>>> Thanks,
> > > >>>>>>> Nipuni
> > > >>>>>>>
> > > >>>>>>> On Wed, Feb 3, 2016 at 7:41 PM, Nipuni Piyabasi Perera <
> > > >>>>>>> nipuni880917@gmail.com> wrote:
> > > >>>>>>>
> > > >>>>>>>> Thanks for the prompt reply.
> > > >>>>>>>>
> > > >>>>>>>> I have first tried my custom appender in OSGi environment
> which
> > > gave
> > > >>>>>> the
> > > >>>>>>>> errors above. But I am getting the same issue in non-OSGi
> > > >> environment
> > > >>>>>> too.
> > > >>>>>>>> It seems an issue with custom appender.
> > > >>>>>>>> AFAIK It is plugin annotation that make the appender visible
> to
> > > >>>>>> log4j2. I
> > > >>>>>>>> can't find any issue in my log4j2.xml and plugin configuration
> > of
> > > >> the
> > > >>>>>>>> class. Is there any other places that I need to care about?
> > > >>>>>>>>
> > > >>>>>>>> Thanks,
> > > >>>>>>>> Nipuni
> > > >>>>>>>>
> > > >>>>>>>> On Wed, Feb 3, 2016 at 7:28 PM, Ralph Goers <
> > > >>>>>> ralph.goers@dslextreme.com>
> > > >>>>>>>> wrote:
> > > >>>>>>>>
> > > >>>>>>>>> OSGi does interesting things with ClassLoaders. Log4j has to
> be
> > > >> able
> > > >>>>>> to
> > > >>>>>>>>> access your plugin when it is configuring. If it isn’t in an
> > > >>>>>> accessible
> > > >>>>>>>>> ClassLoader it won’t see it.  There have been a few people
> who
> > > are
> > > >>>>>> using
> > > >>>>>>>>> Log4j in an OSGi environment that have helped out with
> patches
> > > from
> > > >>>>>> time to
> > > >>>>>>>>> time. Perhaps one of them can help out?
> > > >>>>>>>>>
> > > >>>>>>>>> Ralph
> > > >>>>>>>>>
> > > >>>>>>>>>>> On Feb 3, 2016, at 6:07 AM, Nipuni Piyabasi Perera <
> > > >>>>>>>>>> nipuni880917@gmail.com> wrote:
> > > >>>>>>>>>>
> > > >>>>>>>>>> Hi,
> > > >>>>>>>>>>
> > > >>>>>>>>>> I have written a custom appender extending the log4j2
> > > >>>>>> AbstractAppender.
> > > >>>>>>>>> But
> > > >>>>>>>>>> I am getting a runtime error[1]. I have added the plugin
> > > >>>>>> annotation[2]
> > > >>>>>>>>> as
> > > >>>>>>>>>> per the manual and the custom appender class contains
> factory
> > > >> method
> > > >>>>>>>>>> createAppender() as well. I also have added the package name
> > to
> > > >>>>>>>>>> configuration element.
> > > >>>>>>>>>> What am I missing here? Appreciate any input on this.
> > > >>>>>>>>>>
> > > >>>>>>>>>> I have my log4j2.xml file as below:
> > > >>>>>>>>>>
> > > >>>>>>>>>> <Configuration
> packages="org.my.custom.http.socket.appender">
> > > >>>>>>>>>> <Appenders>
> > > >>>>>>>>>>    ...
> > > >>>>>>>>>>    <Socket name="socket" host="localhost" port="4714">
> > > >>>>>>>>>>  <!--PatternLayout pattern="[%d] %5p {%c} - %m%ex%n"/-->
> > > >>>>>>>>>> </Socket>
> > > >>>>>>>>>>    <HTTPSocket name="HTTP_APPENDER" host="localhost"
> > > port="8888">
> > > >>>>>>>>>> <-------------------------------------
> > > >>>>>>>>>> New Appender
> > > >>>>>>>>>> </HTTPSocket>
> > > >>>>>>>>>> </Appenders>
> > > >>>>>>>>>> <Loggers>
> > > >>>>>>>>>>    <Root level="info" includeLocation="true">
> > > >>>>>>>>>>        ...
> > > >>>>>>>>>>        <AppenderRef ref="HTTP_APPENDER"/>
> > > >>>>>>>>>>    </Root>
> > > >>>>>>>>>>    <Logger name="my.custom.deployer" level="info"
> > > >>>>>> additivity="true">
> > > >>>>>>>>>>            <AppenderRef ref="socket"/>
> > > >>>>>>>>>> </Logger>
> > > >>>>>>>>>> </Loggers>
> > > >>>>>>>>>> </Configuration>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>> [1] ERROR Appenders contains an invalid element or attribute
> > > >>>>>>>>> "HTTPSocket"
> > > >>>>>>>>>> [2] @Plugin(name = "HTTPSocket", category = "Core",
> > elementType
> > > =
> > > >>>>>>>>> "appender",
> > > >>>>>>>>>> printObject = true)
> > > >>>>>>>>>>
> > > >>>>>>>>>> Thanks,
> > > >>>>>>>>>> Nipuni
> > > >>>>>>>>>>
> > > >>>>>>>>>> --
> > > >>>>>>>>>> Nipuni Perera
> > > >>>>>>>>>> Software Engineer; WSO2 Inc.; http://wso2.com
> > > >>>>>>>>>> Email: nipuni@wso2.com
> > > >>>>>>>>>> Git hub profile: https://github.com/nipuni
> > > >>>>>>>>>> Blog : http://nipunipererablog.blogspot.com/
> > > >>>>>>>>>> Mobile: +94 (71) 5626680
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>
> ---------------------------------------------------------------------
> > > >>>>>>>>> To unsubscribe, e-mail:
> > > log4j-user-unsubscribe@logging.apache.org
> > > >>>>>>>>> For additional commands, e-mail:
> > > >> log4j-user-help@logging.apache.org
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>> --
> > > >>>>>>>> Nipuni Perera
> > > >>>>>>>> Software Engineer; WSO2 Inc.; http://wso2.com
> > > >>>>>>>> Email: nipuni@wso2.com
> > > >>>>>>>> Git hub profile: https://github.com/nipuni
> > > >>>>>>>> Blog : http://nipunipererablog.blogspot.com/
> > > >>>>>>>> Mobile: +94 (71) 5626680
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>> --
> > > >>>>>>> Nipuni Perera
> > > >>>>>>> Software Engineer; WSO2 Inc.; http://wso2.com
> > > >>>>>>> Email: nipuni@wso2.com
> > > >>>>>>> Git hub profile: https://github.com/nipuni
> > > >>>>>>> Blog : http://nipunipererablog.blogspot.com/
> > > >>>>>>> Mobile: +94 (71) 5626680
> > > >>>>>>
> > > >>>>>
> > > >>>>>
> > > >>>>>
> > > >>>>> --
> > > >>>>> Nipuni Perera
> > > >>>>> Software Engineer; WSO2 Inc.; http://wso2.com
> > > >>>>> Email: nipuni@wso2.com
> > > >>>>> Git hub profile: https://github.com/nipuni
> > > >>>>> Blog : http://nipunipererablog.blogspot.com/
> > > >>>>> Mobile: +94 (71) 5626680
> > > >>>>>
> > > >>>>
> > > >>>>
> > > >>>>
> > > >>>> --
> > > >>>> Nipuni Perera
> > > >>>> Software Engineer; WSO2 Inc.; http://wso2.com
> > > >>>> Email: nipuni@wso2.com
> > > >>>> Git hub profile: https://github.com/nipuni
> > > >>>> Blog : http://nipunipererablog.blogspot.com/
> > > >>>> Mobile: +94 (71) 5626680
> > > >>>
> > > >>
> > > >>
> > > >>
> > > >>
> ---------------------------------------------------------------------
> > > >> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> > > >> For additional commands, e-mail: log4j-user-help@logging.apache.org
> > > >>
> > > >>
> > > >
> > > >
> > > > --
> > > > Nipuni Perera
> > > > Software Engineer; WSO2 Inc.; http://wso2.com
> > > > Email: nipuni@wso2.com
> > > > Git hub profile: https://github.com/nipuni
> > > > Blog : http://nipunipererablog.blogspot.com/
> > > > Mobile: +94 (71) 5626680
> > >
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> > > For additional commands, e-mail: log4j-user-help@logging.apache.org
> > >
> > >
> >
> >
> > --
> > Matt Sicker <bo...@gmail.com>
> >
>
>
>
> --
> Nipuni Perera
> Software Engineer; WSO2 Inc.; http://wso2.com
> Email: nipuni@wso2.com
> Git hub profile: https://github.com/nipuni
> Blog : http://nipunipererablog.blogspot.com/
> Mobile: +94 (71) 5626680
>



-- 
Matt Sicker <bo...@gmail.com>

Re: Custom appender not identified in OSGi environment

Posted by Nipuni Piyabasi Perera <ni...@gmail.com>.
Hi all,

This was a class loading issue in my OSGi environment. We were using
pax-logging 1.8.4 (which exports log4j2 2.0.2) and the class loader cannot
load the package (package read from the log4j2.xml configuration) as the
new bundle is not visible to the pax-logging bundle.

Could resolve it after adding it as a fragment to pax-logging-log4j2 1.8.4
[1]. (This way new appender bundle becomes a fragment of pax-logging-log4j2
and visible to the class loader.)

Sorry for the noise. Thanks all for the replies.

[1] <Fragment-Host>org.ops4j.pax.logging.pax-logging-log4j2</Fragment-Host>

Thanks,
Nipuni

On Fri, Feb 5, 2016 at 9:24 PM, Matt Sicker <bo...@gmail.com> wrote:

> This sounds like it's probably a bug. Could you file an issue in jira?
>
> On 4 February 2016 at 12:42, Ralph Goers <ra...@dslextreme.com>
> wrote:
>
> > I don’t think so. I suspect that
> > org.apache.logging.log4j.core.osgi.Activator.java is not finding your
> > plugin but I am not sure why.
> >
> > Ralph
> >
> > > On Feb 4, 2016, at 11:38 AM, Nipuni Piyabasi Perera <
> > nipuni880917@gmail.com> wrote:
> > >
> > > Thanks for the input.
> > >
> > > Yes the issue may be different than what I have mentioned. I suspected
> > that
> > > the issue is related to Log4j2Plugins.dat file as the appender is
> working
> > > fine in non-OSGi environment, and the only different I could find was
> > > that Log4j2Plugins.dat
> > > file comparing the  two jars. May be I am missing some plugin that I
> need
> > > to add in pom.xml.
> > >
> > > Thanks,
> > > Nipuni
> > >
> > > On Fri, Feb 5, 2016 at 12:00 AM, Ralph Goers <
> ralph.goers@dslextreme.com
> > >
> > > wrote:
> > >
> > >> Actually, I just looked at the code and there is a class that should
> be
> > >> looking at your bundle to locate any plugins you may have. I am
> actually
> > >> not very familiar with that code so I wonder if one of the other
> > committers
> > >> could provide insight on what might be causing it not to work.
> > >>
> > >> Ralph
> > >>
> > >>> On Feb 4, 2016, at 11:06 AM, Ralph Goers <ralph.goers@dslextreme.com
> >
> > >> wrote:
> > >>>
> > >>> I don’t believe that issue is related to your problem.
> > >>>
> > >>> When Log4j loads plugins it can only find plugins on whatever class
> > path
> > >> it has available to it.  If it is in a different OSGi bundle than your
> > >> plugin it may not see it.  In short, Log4j has to be able to find
> > >>
> META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat
> > for
> > >> Log4j and the same file for your plugin. Log4j’s file is embedded in
> the
> > >> log4j-core jar. Yours will be in whatever jar you are producing. There
> > is a
> > >> process for “shading” your code with Log4j’s that will cause them to
> be
> > >> combined, but I am afraid I don’t know exactly where that is
> > documented. If
> > >> you want your stuff in a separate bundle from Log4j’s then you need to
> > >> figure out how to get the stuff in your bundle on Log4j’s classpath.
> > >>>
> > >>> Ralph
> > >>>
> > >>>> On Feb 4, 2016, at 10:39 AM, Nipuni Piyabasi Perera <
> > >> nipuni880917@gmail.com> wrote:
> > >>>>
> > >>>> Hi all,
> > >>>>
> > >>>> Above mentioned issue is reported and fixed in[1]. I have tried to
> use
> > >>>> log4j2- 2.0.1 (as this is the fix version of the jira) in my OSGi
> > >>>> environment. But I still see the same CLASS_NOT_FOUND error while it
> > >> works
> > >>>> fine in non-OSGi environment.
> > >>>>
> > >>>> [1] https://issues.apache.org/jira/browse/LOG4J2-741
> > >>>>
> > >>>> Thanks,
> > >>>> Nipuni
> > >>>>
> > >>>> On Thu, Feb 4, 2016 at 9:24 AM, Nipuni Piyabasi Perera <
> > >>>> nipuni880917@gmail.com> wrote:
> > >>>>
> > >>>>> Hi,
> > >>>>>
> > >>>>> Thank you very much for the reply.
> > >>>>>
> > >>>>> Initially I got error [1] when I am trying to test the appender in
> > >>>>> non-OSGi environment. This was due to not passing the correct
> number
> > of
> > >>>>> parameters to the factory method. I have updated my log4j2.xml and
> > then
> > >>>>> could solve the issue[1] in non-OSGi env. I have applied the same
> > >>>>> configuration to OSGi environment as well.
> > >>>>>
> > >>>>> Now I am seeing error[2],which seems to be a class loading issue as
> > you
> > >>>>> have mentioned. I did added the plugin processor in my pom.xml but
> > >> still
> > >>>>> seeing the same issue. While comparing the OSGi bundle and the
> > >> non-OSGi jar
> > >>>>> I could see that the Log4j2Plugins.dat file is missing in the OSGi
> > >> bundle. I
> > >>>>> have added the package name to configuration element as well. (as
> per
> > >> the
> > >>>>> pom.xml [3] I am using log4j2 2.5)
> > >>>>>
> > >>>>> [1] Unable to invoke factory method in class ...
> > >>>>> [2] ERROR Error processing element HTTPSocket: CLASS_NOT_FOUND
> > >>>>> [3] Adding the plugin section of my pom.xml
> > >>>>>
> > >>>>> <plugins>
> > >>>>>  <plugin>
> > >>>>>      <groupId>org.apache.felix</groupId>
> > >>>>>      <artifactId>maven-scr-plugin</artifactId>
> > >>>>>      <version>1.9.0</version>
> > >>>>>      <executions>
> > >>>>>          <execution>
> > >>>>>              <id>generate-scr-scrdescriptor</id>
> > >>>>>              <goals>
> > >>>>>                  <goal>scr</goal>
> > >>>>>              </goals>
> > >>>>>          </execution>
> > >>>>>      </executions>
> > >>>>>  </plugin>
> > >>>>>  <plugin>
> > >>>>>      <groupId>org.apache.maven.plugins</groupId>
> > >>>>>      <artifactId>maven-compiler-plugin</artifactId>
> > >>>>>      <version>3.1</version>
> > >>>>>      <executions>
> > >>>>>          <execution>
> > >>>>>              <id>log4j-plugin-processor</id>
> > >>>>>              <goals>
> > >>>>>                  <goal>compile</goal>
> > >>>>>              </goals>
> > >>>>>              <phase>process-classes</phase>
> > >>>>>              <configuration>
> > >>>>>                  <proc>only</proc>
> > >>>>>                  <annotationProcessors>
> > >>>>>
> > >>
> >
> <annotationProcessor>org.apache.logging.log4j.core.config.plugins.processor.PluginProcessor</annotationProcessor>
> > >>>>>                  </annotationProcessors>
> > >>>>>              </configuration>
> > >>>>>          </execution>
> > >>>>>      </executions>
> > >>>>>  </plugin>
> > >>>>>  <plugin>
> > >>>>>      <groupId>org.apache.felix</groupId>
> > >>>>>      <artifactId>maven-bundle-plugin</artifactId>
> > >>>>>      <extensions>true</extensions>
> > >>>>>      <configuration>
> > >>>>>          <instructions>
> > >>>>>              <Bundle-Vendor>Nipuni</Bundle-Vendor>
> > >>>>>
> > >>
> >
> <Bundle-SymbolicName>org.my.custom.http.socket.appender</Bundle-SymbolicName>
> > >>>>>
> > >> <Bundle-Name>org.my.custom.http.socket.appender</Bundle-Name>
> > >>>>>              <Bundle-Version>1.0.0</Bundle-Version>
> > >>>>>              <Import-Package>
> > >>>>>                  org.apache.log4j.*;version="[2.5.0,3.0.0)"
> > >>>>>              </Import-Package>
> > >>>>>              <Export-Package>
> > >>>>>
> org.my.custom.http.socket.appender.*;version="1.0.0"
> > >>>>>              </Export-Package>
> > >>>>>              <DynamicImport-Package>*</DynamicImport-Package>
> > >>>>>          </instructions>
> > >>>>>      </configuration>
> > >>>>>  </plugin>
> > >>>>>
> > >>>>> </plugins>
> > >>>>>
> > >>>>>
> > >>>>> Thanks,
> > >>>>> Nipuni
> > >>>>>
> > >>>>> On Thu, Feb 4, 2016 at 4:31 AM, Remko Popma <remko.popma@gmail.com
> >
> > >> wrote:
> > >>>>>
> > >>>>>> Thanks for confirming that.
> > >>>>>>
> > >>>>>> You may avoid the classloader issues by combining the log4j jars
> and
> > >> your
> > >>>>>> custom appender in a single jar.
> > >>>>>>
> > >>>>>> The only tricky part here is that you'd need to combine the
> > serialized
> > >>>>>> plugin listing files (see
> > >>>>>> http://logging.apache.org/log4j/2.x/manual/plugins.html) from the
> > >>>>>> various log4j jars into a single serialized plugin listing file in
> > >> your
> > >>>>>> superjar.
> > >>>>>>
> > >>>>>> See the source code for PluginProcessor for more details.
> > >>>>>>
> > >>
> >
> https://logging.apache.org/log4j/2.x/log4j-core/xref/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.html
> > >>>>>>
> > >>>>>> Sent from my iPhone
> > >>>>>>
> > >>>>>>> On 2016/02/03, at 23:54, Nipuni Piyabasi Perera <
> > >> nipuni880917@gmail.com>
> > >>>>>> wrote:
> > >>>>>>>
> > >>>>>>> Hi all,
> > >>>>>>>
> > >>>>>>> As I have mentioned in my first mail, the issue is only in the
> OSGi
> > >>>>>>> environment it seems. I had mistakenly added the appender as a
> OSGi
> > >>>>>> bundle
> > >>>>>>> in the non-OSGi environment. Could resolve the issue after
> changing
> > >> the
> > >>>>>>> package to a jar.
> > >>>>>>>
> > >>>>>>> Thanks,
> > >>>>>>> Nipuni
> > >>>>>>>
> > >>>>>>> On Wed, Feb 3, 2016 at 7:41 PM, Nipuni Piyabasi Perera <
> > >>>>>>> nipuni880917@gmail.com> wrote:
> > >>>>>>>
> > >>>>>>>> Thanks for the prompt reply.
> > >>>>>>>>
> > >>>>>>>> I have first tried my custom appender in OSGi environment which
> > gave
> > >>>>>> the
> > >>>>>>>> errors above. But I am getting the same issue in non-OSGi
> > >> environment
> > >>>>>> too.
> > >>>>>>>> It seems an issue with custom appender.
> > >>>>>>>> AFAIK It is plugin annotation that make the appender visible to
> > >>>>>> log4j2. I
> > >>>>>>>> can't find any issue in my log4j2.xml and plugin configuration
> of
> > >> the
> > >>>>>>>> class. Is there any other places that I need to care about?
> > >>>>>>>>
> > >>>>>>>> Thanks,
> > >>>>>>>> Nipuni
> > >>>>>>>>
> > >>>>>>>> On Wed, Feb 3, 2016 at 7:28 PM, Ralph Goers <
> > >>>>>> ralph.goers@dslextreme.com>
> > >>>>>>>> wrote:
> > >>>>>>>>
> > >>>>>>>>> OSGi does interesting things with ClassLoaders. Log4j has to be
> > >> able
> > >>>>>> to
> > >>>>>>>>> access your plugin when it is configuring. If it isn’t in an
> > >>>>>> accessible
> > >>>>>>>>> ClassLoader it won’t see it.  There have been a few people who
> > are
> > >>>>>> using
> > >>>>>>>>> Log4j in an OSGi environment that have helped out with patches
> > from
> > >>>>>> time to
> > >>>>>>>>> time. Perhaps one of them can help out?
> > >>>>>>>>>
> > >>>>>>>>> Ralph
> > >>>>>>>>>
> > >>>>>>>>>>> On Feb 3, 2016, at 6:07 AM, Nipuni Piyabasi Perera <
> > >>>>>>>>>> nipuni880917@gmail.com> wrote:
> > >>>>>>>>>>
> > >>>>>>>>>> Hi,
> > >>>>>>>>>>
> > >>>>>>>>>> I have written a custom appender extending the log4j2
> > >>>>>> AbstractAppender.
> > >>>>>>>>> But
> > >>>>>>>>>> I am getting a runtime error[1]. I have added the plugin
> > >>>>>> annotation[2]
> > >>>>>>>>> as
> > >>>>>>>>>> per the manual and the custom appender class contains factory
> > >> method
> > >>>>>>>>>> createAppender() as well. I also have added the package name
> to
> > >>>>>>>>>> configuration element.
> > >>>>>>>>>> What am I missing here? Appreciate any input on this.
> > >>>>>>>>>>
> > >>>>>>>>>> I have my log4j2.xml file as below:
> > >>>>>>>>>>
> > >>>>>>>>>> <Configuration packages="org.my.custom.http.socket.appender">
> > >>>>>>>>>> <Appenders>
> > >>>>>>>>>>    ...
> > >>>>>>>>>>    <Socket name="socket" host="localhost" port="4714">
> > >>>>>>>>>>  <!--PatternLayout pattern="[%d] %5p {%c} - %m%ex%n"/-->
> > >>>>>>>>>> </Socket>
> > >>>>>>>>>>    <HTTPSocket name="HTTP_APPENDER" host="localhost"
> > port="8888">
> > >>>>>>>>>> <-------------------------------------
> > >>>>>>>>>> New Appender
> > >>>>>>>>>> </HTTPSocket>
> > >>>>>>>>>> </Appenders>
> > >>>>>>>>>> <Loggers>
> > >>>>>>>>>>    <Root level="info" includeLocation="true">
> > >>>>>>>>>>        ...
> > >>>>>>>>>>        <AppenderRef ref="HTTP_APPENDER"/>
> > >>>>>>>>>>    </Root>
> > >>>>>>>>>>    <Logger name="my.custom.deployer" level="info"
> > >>>>>> additivity="true">
> > >>>>>>>>>>            <AppenderRef ref="socket"/>
> > >>>>>>>>>> </Logger>
> > >>>>>>>>>> </Loggers>
> > >>>>>>>>>> </Configuration>
> > >>>>>>>>>>
> > >>>>>>>>>>
> > >>>>>>>>>> [1] ERROR Appenders contains an invalid element or attribute
> > >>>>>>>>> "HTTPSocket"
> > >>>>>>>>>> [2] @Plugin(name = "HTTPSocket", category = "Core",
> elementType
> > =
> > >>>>>>>>> "appender",
> > >>>>>>>>>> printObject = true)
> > >>>>>>>>>>
> > >>>>>>>>>> Thanks,
> > >>>>>>>>>> Nipuni
> > >>>>>>>>>>
> > >>>>>>>>>> --
> > >>>>>>>>>> Nipuni Perera
> > >>>>>>>>>> Software Engineer; WSO2 Inc.; http://wso2.com
> > >>>>>>>>>> Email: nipuni@wso2.com
> > >>>>>>>>>> Git hub profile: https://github.com/nipuni
> > >>>>>>>>>> Blog : http://nipunipererablog.blogspot.com/
> > >>>>>>>>>> Mobile: +94 (71) 5626680
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>>
> > >> ---------------------------------------------------------------------
> > >>>>>>>>> To unsubscribe, e-mail:
> > log4j-user-unsubscribe@logging.apache.org
> > >>>>>>>>> For additional commands, e-mail:
> > >> log4j-user-help@logging.apache.org
> > >>>>>>>>
> > >>>>>>>>
> > >>>>>>>> --
> > >>>>>>>> Nipuni Perera
> > >>>>>>>> Software Engineer; WSO2 Inc.; http://wso2.com
> > >>>>>>>> Email: nipuni@wso2.com
> > >>>>>>>> Git hub profile: https://github.com/nipuni
> > >>>>>>>> Blog : http://nipunipererablog.blogspot.com/
> > >>>>>>>> Mobile: +94 (71) 5626680
> > >>>>>>>
> > >>>>>>>
> > >>>>>>>
> > >>>>>>> --
> > >>>>>>> Nipuni Perera
> > >>>>>>> Software Engineer; WSO2 Inc.; http://wso2.com
> > >>>>>>> Email: nipuni@wso2.com
> > >>>>>>> Git hub profile: https://github.com/nipuni
> > >>>>>>> Blog : http://nipunipererablog.blogspot.com/
> > >>>>>>> Mobile: +94 (71) 5626680
> > >>>>>>
> > >>>>>
> > >>>>>
> > >>>>>
> > >>>>> --
> > >>>>> Nipuni Perera
> > >>>>> Software Engineer; WSO2 Inc.; http://wso2.com
> > >>>>> Email: nipuni@wso2.com
> > >>>>> Git hub profile: https://github.com/nipuni
> > >>>>> Blog : http://nipunipererablog.blogspot.com/
> > >>>>> Mobile: +94 (71) 5626680
> > >>>>>
> > >>>>
> > >>>>
> > >>>>
> > >>>> --
> > >>>> Nipuni Perera
> > >>>> Software Engineer; WSO2 Inc.; http://wso2.com
> > >>>> Email: nipuni@wso2.com
> > >>>> Git hub profile: https://github.com/nipuni
> > >>>> Blog : http://nipunipererablog.blogspot.com/
> > >>>> Mobile: +94 (71) 5626680
> > >>>
> > >>
> > >>
> > >>
> > >> ---------------------------------------------------------------------
> > >> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> > >> For additional commands, e-mail: log4j-user-help@logging.apache.org
> > >>
> > >>
> > >
> > >
> > > --
> > > Nipuni Perera
> > > Software Engineer; WSO2 Inc.; http://wso2.com
> > > Email: nipuni@wso2.com
> > > Git hub profile: https://github.com/nipuni
> > > Blog : http://nipunipererablog.blogspot.com/
> > > Mobile: +94 (71) 5626680
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> > For additional commands, e-mail: log4j-user-help@logging.apache.org
> >
> >
>
>
> --
> Matt Sicker <bo...@gmail.com>
>



-- 
Nipuni Perera
Software Engineer; WSO2 Inc.; http://wso2.com
Email: nipuni@wso2.com
Git hub profile: https://github.com/nipuni
Blog : http://nipunipererablog.blogspot.com/
Mobile: +94 (71) 5626680

Re: Custom appender not identified in OSGi environment

Posted by Matt Sicker <bo...@gmail.com>.
This sounds like it's probably a bug. Could you file an issue in jira?

On 4 February 2016 at 12:42, Ralph Goers <ra...@dslextreme.com> wrote:

> I don’t think so. I suspect that
> org.apache.logging.log4j.core.osgi.Activator.java is not finding your
> plugin but I am not sure why.
>
> Ralph
>
> > On Feb 4, 2016, at 11:38 AM, Nipuni Piyabasi Perera <
> nipuni880917@gmail.com> wrote:
> >
> > Thanks for the input.
> >
> > Yes the issue may be different than what I have mentioned. I suspected
> that
> > the issue is related to Log4j2Plugins.dat file as the appender is working
> > fine in non-OSGi environment, and the only different I could find was
> > that Log4j2Plugins.dat
> > file comparing the  two jars. May be I am missing some plugin that I need
> > to add in pom.xml.
> >
> > Thanks,
> > Nipuni
> >
> > On Fri, Feb 5, 2016 at 12:00 AM, Ralph Goers <ralph.goers@dslextreme.com
> >
> > wrote:
> >
> >> Actually, I just looked at the code and there is a class that should be
> >> looking at your bundle to locate any plugins you may have. I am actually
> >> not very familiar with that code so I wonder if one of the other
> committers
> >> could provide insight on what might be causing it not to work.
> >>
> >> Ralph
> >>
> >>> On Feb 4, 2016, at 11:06 AM, Ralph Goers <ra...@dslextreme.com>
> >> wrote:
> >>>
> >>> I don’t believe that issue is related to your problem.
> >>>
> >>> When Log4j loads plugins it can only find plugins on whatever class
> path
> >> it has available to it.  If it is in a different OSGi bundle than your
> >> plugin it may not see it.  In short, Log4j has to be able to find
> >> META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat
> for
> >> Log4j and the same file for your plugin. Log4j’s file is embedded in the
> >> log4j-core jar. Yours will be in whatever jar you are producing. There
> is a
> >> process for “shading” your code with Log4j’s that will cause them to be
> >> combined, but I am afraid I don’t know exactly where that is
> documented. If
> >> you want your stuff in a separate bundle from Log4j’s then you need to
> >> figure out how to get the stuff in your bundle on Log4j’s classpath.
> >>>
> >>> Ralph
> >>>
> >>>> On Feb 4, 2016, at 10:39 AM, Nipuni Piyabasi Perera <
> >> nipuni880917@gmail.com> wrote:
> >>>>
> >>>> Hi all,
> >>>>
> >>>> Above mentioned issue is reported and fixed in[1]. I have tried to use
> >>>> log4j2- 2.0.1 (as this is the fix version of the jira) in my OSGi
> >>>> environment. But I still see the same CLASS_NOT_FOUND error while it
> >> works
> >>>> fine in non-OSGi environment.
> >>>>
> >>>> [1] https://issues.apache.org/jira/browse/LOG4J2-741
> >>>>
> >>>> Thanks,
> >>>> Nipuni
> >>>>
> >>>> On Thu, Feb 4, 2016 at 9:24 AM, Nipuni Piyabasi Perera <
> >>>> nipuni880917@gmail.com> wrote:
> >>>>
> >>>>> Hi,
> >>>>>
> >>>>> Thank you very much for the reply.
> >>>>>
> >>>>> Initially I got error [1] when I am trying to test the appender in
> >>>>> non-OSGi environment. This was due to not passing the correct number
> of
> >>>>> parameters to the factory method. I have updated my log4j2.xml and
> then
> >>>>> could solve the issue[1] in non-OSGi env. I have applied the same
> >>>>> configuration to OSGi environment as well.
> >>>>>
> >>>>> Now I am seeing error[2],which seems to be a class loading issue as
> you
> >>>>> have mentioned. I did added the plugin processor in my pom.xml but
> >> still
> >>>>> seeing the same issue. While comparing the OSGi bundle and the
> >> non-OSGi jar
> >>>>> I could see that the Log4j2Plugins.dat file is missing in the OSGi
> >> bundle. I
> >>>>> have added the package name to configuration element as well. (as per
> >> the
> >>>>> pom.xml [3] I am using log4j2 2.5)
> >>>>>
> >>>>> [1] Unable to invoke factory method in class ...
> >>>>> [2] ERROR Error processing element HTTPSocket: CLASS_NOT_FOUND
> >>>>> [3] Adding the plugin section of my pom.xml
> >>>>>
> >>>>> <plugins>
> >>>>>  <plugin>
> >>>>>      <groupId>org.apache.felix</groupId>
> >>>>>      <artifactId>maven-scr-plugin</artifactId>
> >>>>>      <version>1.9.0</version>
> >>>>>      <executions>
> >>>>>          <execution>
> >>>>>              <id>generate-scr-scrdescriptor</id>
> >>>>>              <goals>
> >>>>>                  <goal>scr</goal>
> >>>>>              </goals>
> >>>>>          </execution>
> >>>>>      </executions>
> >>>>>  </plugin>
> >>>>>  <plugin>
> >>>>>      <groupId>org.apache.maven.plugins</groupId>
> >>>>>      <artifactId>maven-compiler-plugin</artifactId>
> >>>>>      <version>3.1</version>
> >>>>>      <executions>
> >>>>>          <execution>
> >>>>>              <id>log4j-plugin-processor</id>
> >>>>>              <goals>
> >>>>>                  <goal>compile</goal>
> >>>>>              </goals>
> >>>>>              <phase>process-classes</phase>
> >>>>>              <configuration>
> >>>>>                  <proc>only</proc>
> >>>>>                  <annotationProcessors>
> >>>>>
> >>
> <annotationProcessor>org.apache.logging.log4j.core.config.plugins.processor.PluginProcessor</annotationProcessor>
> >>>>>                  </annotationProcessors>
> >>>>>              </configuration>
> >>>>>          </execution>
> >>>>>      </executions>
> >>>>>  </plugin>
> >>>>>  <plugin>
> >>>>>      <groupId>org.apache.felix</groupId>
> >>>>>      <artifactId>maven-bundle-plugin</artifactId>
> >>>>>      <extensions>true</extensions>
> >>>>>      <configuration>
> >>>>>          <instructions>
> >>>>>              <Bundle-Vendor>Nipuni</Bundle-Vendor>
> >>>>>
> >>
> <Bundle-SymbolicName>org.my.custom.http.socket.appender</Bundle-SymbolicName>
> >>>>>
> >> <Bundle-Name>org.my.custom.http.socket.appender</Bundle-Name>
> >>>>>              <Bundle-Version>1.0.0</Bundle-Version>
> >>>>>              <Import-Package>
> >>>>>                  org.apache.log4j.*;version="[2.5.0,3.0.0)"
> >>>>>              </Import-Package>
> >>>>>              <Export-Package>
> >>>>>                  org.my.custom.http.socket.appender.*;version="1.0.0"
> >>>>>              </Export-Package>
> >>>>>              <DynamicImport-Package>*</DynamicImport-Package>
> >>>>>          </instructions>
> >>>>>      </configuration>
> >>>>>  </plugin>
> >>>>>
> >>>>> </plugins>
> >>>>>
> >>>>>
> >>>>> Thanks,
> >>>>> Nipuni
> >>>>>
> >>>>> On Thu, Feb 4, 2016 at 4:31 AM, Remko Popma <re...@gmail.com>
> >> wrote:
> >>>>>
> >>>>>> Thanks for confirming that.
> >>>>>>
> >>>>>> You may avoid the classloader issues by combining the log4j jars and
> >> your
> >>>>>> custom appender in a single jar.
> >>>>>>
> >>>>>> The only tricky part here is that you'd need to combine the
> serialized
> >>>>>> plugin listing files (see
> >>>>>> http://logging.apache.org/log4j/2.x/manual/plugins.html) from the
> >>>>>> various log4j jars into a single serialized plugin listing file in
> >> your
> >>>>>> superjar.
> >>>>>>
> >>>>>> See the source code for PluginProcessor for more details.
> >>>>>>
> >>
> https://logging.apache.org/log4j/2.x/log4j-core/xref/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.html
> >>>>>>
> >>>>>> Sent from my iPhone
> >>>>>>
> >>>>>>> On 2016/02/03, at 23:54, Nipuni Piyabasi Perera <
> >> nipuni880917@gmail.com>
> >>>>>> wrote:
> >>>>>>>
> >>>>>>> Hi all,
> >>>>>>>
> >>>>>>> As I have mentioned in my first mail, the issue is only in the OSGi
> >>>>>>> environment it seems. I had mistakenly added the appender as a OSGi
> >>>>>> bundle
> >>>>>>> in the non-OSGi environment. Could resolve the issue after changing
> >> the
> >>>>>>> package to a jar.
> >>>>>>>
> >>>>>>> Thanks,
> >>>>>>> Nipuni
> >>>>>>>
> >>>>>>> On Wed, Feb 3, 2016 at 7:41 PM, Nipuni Piyabasi Perera <
> >>>>>>> nipuni880917@gmail.com> wrote:
> >>>>>>>
> >>>>>>>> Thanks for the prompt reply.
> >>>>>>>>
> >>>>>>>> I have first tried my custom appender in OSGi environment which
> gave
> >>>>>> the
> >>>>>>>> errors above. But I am getting the same issue in non-OSGi
> >> environment
> >>>>>> too.
> >>>>>>>> It seems an issue with custom appender.
> >>>>>>>> AFAIK It is plugin annotation that make the appender visible to
> >>>>>> log4j2. I
> >>>>>>>> can't find any issue in my log4j2.xml and plugin configuration of
> >> the
> >>>>>>>> class. Is there any other places that I need to care about?
> >>>>>>>>
> >>>>>>>> Thanks,
> >>>>>>>> Nipuni
> >>>>>>>>
> >>>>>>>> On Wed, Feb 3, 2016 at 7:28 PM, Ralph Goers <
> >>>>>> ralph.goers@dslextreme.com>
> >>>>>>>> wrote:
> >>>>>>>>
> >>>>>>>>> OSGi does interesting things with ClassLoaders. Log4j has to be
> >> able
> >>>>>> to
> >>>>>>>>> access your plugin when it is configuring. If it isn’t in an
> >>>>>> accessible
> >>>>>>>>> ClassLoader it won’t see it.  There have been a few people who
> are
> >>>>>> using
> >>>>>>>>> Log4j in an OSGi environment that have helped out with patches
> from
> >>>>>> time to
> >>>>>>>>> time. Perhaps one of them can help out?
> >>>>>>>>>
> >>>>>>>>> Ralph
> >>>>>>>>>
> >>>>>>>>>>> On Feb 3, 2016, at 6:07 AM, Nipuni Piyabasi Perera <
> >>>>>>>>>> nipuni880917@gmail.com> wrote:
> >>>>>>>>>>
> >>>>>>>>>> Hi,
> >>>>>>>>>>
> >>>>>>>>>> I have written a custom appender extending the log4j2
> >>>>>> AbstractAppender.
> >>>>>>>>> But
> >>>>>>>>>> I am getting a runtime error[1]. I have added the plugin
> >>>>>> annotation[2]
> >>>>>>>>> as
> >>>>>>>>>> per the manual and the custom appender class contains factory
> >> method
> >>>>>>>>>> createAppender() as well. I also have added the package name to
> >>>>>>>>>> configuration element.
> >>>>>>>>>> What am I missing here? Appreciate any input on this.
> >>>>>>>>>>
> >>>>>>>>>> I have my log4j2.xml file as below:
> >>>>>>>>>>
> >>>>>>>>>> <Configuration packages="org.my.custom.http.socket.appender">
> >>>>>>>>>> <Appenders>
> >>>>>>>>>>    ...
> >>>>>>>>>>    <Socket name="socket" host="localhost" port="4714">
> >>>>>>>>>>  <!--PatternLayout pattern="[%d] %5p {%c} - %m%ex%n"/-->
> >>>>>>>>>> </Socket>
> >>>>>>>>>>    <HTTPSocket name="HTTP_APPENDER" host="localhost"
> port="8888">
> >>>>>>>>>> <-------------------------------------
> >>>>>>>>>> New Appender
> >>>>>>>>>> </HTTPSocket>
> >>>>>>>>>> </Appenders>
> >>>>>>>>>> <Loggers>
> >>>>>>>>>>    <Root level="info" includeLocation="true">
> >>>>>>>>>>        ...
> >>>>>>>>>>        <AppenderRef ref="HTTP_APPENDER"/>
> >>>>>>>>>>    </Root>
> >>>>>>>>>>    <Logger name="my.custom.deployer" level="info"
> >>>>>> additivity="true">
> >>>>>>>>>>            <AppenderRef ref="socket"/>
> >>>>>>>>>> </Logger>
> >>>>>>>>>> </Loggers>
> >>>>>>>>>> </Configuration>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> [1] ERROR Appenders contains an invalid element or attribute
> >>>>>>>>> "HTTPSocket"
> >>>>>>>>>> [2] @Plugin(name = "HTTPSocket", category = "Core", elementType
> =
> >>>>>>>>> "appender",
> >>>>>>>>>> printObject = true)
> >>>>>>>>>>
> >>>>>>>>>> Thanks,
> >>>>>>>>>> Nipuni
> >>>>>>>>>>
> >>>>>>>>>> --
> >>>>>>>>>> Nipuni Perera
> >>>>>>>>>> Software Engineer; WSO2 Inc.; http://wso2.com
> >>>>>>>>>> Email: nipuni@wso2.com
> >>>>>>>>>> Git hub profile: https://github.com/nipuni
> >>>>>>>>>> Blog : http://nipunipererablog.blogspot.com/
> >>>>>>>>>> Mobile: +94 (71) 5626680
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >> ---------------------------------------------------------------------
> >>>>>>>>> To unsubscribe, e-mail:
> log4j-user-unsubscribe@logging.apache.org
> >>>>>>>>> For additional commands, e-mail:
> >> log4j-user-help@logging.apache.org
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> --
> >>>>>>>> Nipuni Perera
> >>>>>>>> Software Engineer; WSO2 Inc.; http://wso2.com
> >>>>>>>> Email: nipuni@wso2.com
> >>>>>>>> Git hub profile: https://github.com/nipuni
> >>>>>>>> Blog : http://nipunipererablog.blogspot.com/
> >>>>>>>> Mobile: +94 (71) 5626680
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> --
> >>>>>>> Nipuni Perera
> >>>>>>> Software Engineer; WSO2 Inc.; http://wso2.com
> >>>>>>> Email: nipuni@wso2.com
> >>>>>>> Git hub profile: https://github.com/nipuni
> >>>>>>> Blog : http://nipunipererablog.blogspot.com/
> >>>>>>> Mobile: +94 (71) 5626680
> >>>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>> --
> >>>>> Nipuni Perera
> >>>>> Software Engineer; WSO2 Inc.; http://wso2.com
> >>>>> Email: nipuni@wso2.com
> >>>>> Git hub profile: https://github.com/nipuni
> >>>>> Blog : http://nipunipererablog.blogspot.com/
> >>>>> Mobile: +94 (71) 5626680
> >>>>>
> >>>>
> >>>>
> >>>>
> >>>> --
> >>>> Nipuni Perera
> >>>> Software Engineer; WSO2 Inc.; http://wso2.com
> >>>> Email: nipuni@wso2.com
> >>>> Git hub profile: https://github.com/nipuni
> >>>> Blog : http://nipunipererablog.blogspot.com/
> >>>> Mobile: +94 (71) 5626680
> >>>
> >>
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> >> For additional commands, e-mail: log4j-user-help@logging.apache.org
> >>
> >>
> >
> >
> > --
> > Nipuni Perera
> > Software Engineer; WSO2 Inc.; http://wso2.com
> > Email: nipuni@wso2.com
> > Git hub profile: https://github.com/nipuni
> > Blog : http://nipunipererablog.blogspot.com/
> > Mobile: +94 (71) 5626680
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> For additional commands, e-mail: log4j-user-help@logging.apache.org
>
>


-- 
Matt Sicker <bo...@gmail.com>

Re: Custom appender not identified in OSGi environment

Posted by Ralph Goers <ra...@dslextreme.com>.
I don’t think so. I suspect that org.apache.logging.log4j.core.osgi.Activator.java is not finding your plugin but I am not sure why.

Ralph

> On Feb 4, 2016, at 11:38 AM, Nipuni Piyabasi Perera <ni...@gmail.com> wrote:
> 
> Thanks for the input.
> 
> Yes the issue may be different than what I have mentioned. I suspected that
> the issue is related to Log4j2Plugins.dat file as the appender is working
> fine in non-OSGi environment, and the only different I could find was
> that Log4j2Plugins.dat
> file comparing the  two jars. May be I am missing some plugin that I need
> to add in pom.xml.
> 
> Thanks,
> Nipuni
> 
> On Fri, Feb 5, 2016 at 12:00 AM, Ralph Goers <ra...@dslextreme.com>
> wrote:
> 
>> Actually, I just looked at the code and there is a class that should be
>> looking at your bundle to locate any plugins you may have. I am actually
>> not very familiar with that code so I wonder if one of the other committers
>> could provide insight on what might be causing it not to work.
>> 
>> Ralph
>> 
>>> On Feb 4, 2016, at 11:06 AM, Ralph Goers <ra...@dslextreme.com>
>> wrote:
>>> 
>>> I don’t believe that issue is related to your problem.
>>> 
>>> When Log4j loads plugins it can only find plugins on whatever class path
>> it has available to it.  If it is in a different OSGi bundle than your
>> plugin it may not see it.  In short, Log4j has to be able to find
>> META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat for
>> Log4j and the same file for your plugin. Log4j’s file is embedded in the
>> log4j-core jar. Yours will be in whatever jar you are producing. There is a
>> process for “shading” your code with Log4j’s that will cause them to be
>> combined, but I am afraid I don’t know exactly where that is documented. If
>> you want your stuff in a separate bundle from Log4j’s then you need to
>> figure out how to get the stuff in your bundle on Log4j’s classpath.
>>> 
>>> Ralph
>>> 
>>>> On Feb 4, 2016, at 10:39 AM, Nipuni Piyabasi Perera <
>> nipuni880917@gmail.com> wrote:
>>>> 
>>>> Hi all,
>>>> 
>>>> Above mentioned issue is reported and fixed in[1]. I have tried to use
>>>> log4j2- 2.0.1 (as this is the fix version of the jira) in my OSGi
>>>> environment. But I still see the same CLASS_NOT_FOUND error while it
>> works
>>>> fine in non-OSGi environment.
>>>> 
>>>> [1] https://issues.apache.org/jira/browse/LOG4J2-741
>>>> 
>>>> Thanks,
>>>> Nipuni
>>>> 
>>>> On Thu, Feb 4, 2016 at 9:24 AM, Nipuni Piyabasi Perera <
>>>> nipuni880917@gmail.com> wrote:
>>>> 
>>>>> Hi,
>>>>> 
>>>>> Thank you very much for the reply.
>>>>> 
>>>>> Initially I got error [1] when I am trying to test the appender in
>>>>> non-OSGi environment. This was due to not passing the correct number of
>>>>> parameters to the factory method. I have updated my log4j2.xml and then
>>>>> could solve the issue[1] in non-OSGi env. I have applied the same
>>>>> configuration to OSGi environment as well.
>>>>> 
>>>>> Now I am seeing error[2],which seems to be a class loading issue as you
>>>>> have mentioned. I did added the plugin processor in my pom.xml but
>> still
>>>>> seeing the same issue. While comparing the OSGi bundle and the
>> non-OSGi jar
>>>>> I could see that the Log4j2Plugins.dat file is missing in the OSGi
>> bundle. I
>>>>> have added the package name to configuration element as well. (as per
>> the
>>>>> pom.xml [3] I am using log4j2 2.5)
>>>>> 
>>>>> [1] Unable to invoke factory method in class ...
>>>>> [2] ERROR Error processing element HTTPSocket: CLASS_NOT_FOUND
>>>>> [3] Adding the plugin section of my pom.xml
>>>>> 
>>>>> <plugins>
>>>>>  <plugin>
>>>>>      <groupId>org.apache.felix</groupId>
>>>>>      <artifactId>maven-scr-plugin</artifactId>
>>>>>      <version>1.9.0</version>
>>>>>      <executions>
>>>>>          <execution>
>>>>>              <id>generate-scr-scrdescriptor</id>
>>>>>              <goals>
>>>>>                  <goal>scr</goal>
>>>>>              </goals>
>>>>>          </execution>
>>>>>      </executions>
>>>>>  </plugin>
>>>>>  <plugin>
>>>>>      <groupId>org.apache.maven.plugins</groupId>
>>>>>      <artifactId>maven-compiler-plugin</artifactId>
>>>>>      <version>3.1</version>
>>>>>      <executions>
>>>>>          <execution>
>>>>>              <id>log4j-plugin-processor</id>
>>>>>              <goals>
>>>>>                  <goal>compile</goal>
>>>>>              </goals>
>>>>>              <phase>process-classes</phase>
>>>>>              <configuration>
>>>>>                  <proc>only</proc>
>>>>>                  <annotationProcessors>
>>>>> 
>> <annotationProcessor>org.apache.logging.log4j.core.config.plugins.processor.PluginProcessor</annotationProcessor>
>>>>>                  </annotationProcessors>
>>>>>              </configuration>
>>>>>          </execution>
>>>>>      </executions>
>>>>>  </plugin>
>>>>>  <plugin>
>>>>>      <groupId>org.apache.felix</groupId>
>>>>>      <artifactId>maven-bundle-plugin</artifactId>
>>>>>      <extensions>true</extensions>
>>>>>      <configuration>
>>>>>          <instructions>
>>>>>              <Bundle-Vendor>Nipuni</Bundle-Vendor>
>>>>> 
>> <Bundle-SymbolicName>org.my.custom.http.socket.appender</Bundle-SymbolicName>
>>>>> 
>> <Bundle-Name>org.my.custom.http.socket.appender</Bundle-Name>
>>>>>              <Bundle-Version>1.0.0</Bundle-Version>
>>>>>              <Import-Package>
>>>>>                  org.apache.log4j.*;version="[2.5.0,3.0.0)"
>>>>>              </Import-Package>
>>>>>              <Export-Package>
>>>>>                  org.my.custom.http.socket.appender.*;version="1.0.0"
>>>>>              </Export-Package>
>>>>>              <DynamicImport-Package>*</DynamicImport-Package>
>>>>>          </instructions>
>>>>>      </configuration>
>>>>>  </plugin>
>>>>> 
>>>>> </plugins>
>>>>> 
>>>>> 
>>>>> Thanks,
>>>>> Nipuni
>>>>> 
>>>>> On Thu, Feb 4, 2016 at 4:31 AM, Remko Popma <re...@gmail.com>
>> wrote:
>>>>> 
>>>>>> Thanks for confirming that.
>>>>>> 
>>>>>> You may avoid the classloader issues by combining the log4j jars and
>> your
>>>>>> custom appender in a single jar.
>>>>>> 
>>>>>> The only tricky part here is that you'd need to combine the serialized
>>>>>> plugin listing files (see
>>>>>> http://logging.apache.org/log4j/2.x/manual/plugins.html) from the
>>>>>> various log4j jars into a single serialized plugin listing file in
>> your
>>>>>> superjar.
>>>>>> 
>>>>>> See the source code for PluginProcessor for more details.
>>>>>> 
>> https://logging.apache.org/log4j/2.x/log4j-core/xref/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.html
>>>>>> 
>>>>>> Sent from my iPhone
>>>>>> 
>>>>>>> On 2016/02/03, at 23:54, Nipuni Piyabasi Perera <
>> nipuni880917@gmail.com>
>>>>>> wrote:
>>>>>>> 
>>>>>>> Hi all,
>>>>>>> 
>>>>>>> As I have mentioned in my first mail, the issue is only in the OSGi
>>>>>>> environment it seems. I had mistakenly added the appender as a OSGi
>>>>>> bundle
>>>>>>> in the non-OSGi environment. Could resolve the issue after changing
>> the
>>>>>>> package to a jar.
>>>>>>> 
>>>>>>> Thanks,
>>>>>>> Nipuni
>>>>>>> 
>>>>>>> On Wed, Feb 3, 2016 at 7:41 PM, Nipuni Piyabasi Perera <
>>>>>>> nipuni880917@gmail.com> wrote:
>>>>>>> 
>>>>>>>> Thanks for the prompt reply.
>>>>>>>> 
>>>>>>>> I have first tried my custom appender in OSGi environment which gave
>>>>>> the
>>>>>>>> errors above. But I am getting the same issue in non-OSGi
>> environment
>>>>>> too.
>>>>>>>> It seems an issue with custom appender.
>>>>>>>> AFAIK It is plugin annotation that make the appender visible to
>>>>>> log4j2. I
>>>>>>>> can't find any issue in my log4j2.xml and plugin configuration of
>> the
>>>>>>>> class. Is there any other places that I need to care about?
>>>>>>>> 
>>>>>>>> Thanks,
>>>>>>>> Nipuni
>>>>>>>> 
>>>>>>>> On Wed, Feb 3, 2016 at 7:28 PM, Ralph Goers <
>>>>>> ralph.goers@dslextreme.com>
>>>>>>>> wrote:
>>>>>>>> 
>>>>>>>>> OSGi does interesting things with ClassLoaders. Log4j has to be
>> able
>>>>>> to
>>>>>>>>> access your plugin when it is configuring. If it isn’t in an
>>>>>> accessible
>>>>>>>>> ClassLoader it won’t see it.  There have been a few people who are
>>>>>> using
>>>>>>>>> Log4j in an OSGi environment that have helped out with patches from
>>>>>> time to
>>>>>>>>> time. Perhaps one of them can help out?
>>>>>>>>> 
>>>>>>>>> Ralph
>>>>>>>>> 
>>>>>>>>>>> On Feb 3, 2016, at 6:07 AM, Nipuni Piyabasi Perera <
>>>>>>>>>> nipuni880917@gmail.com> wrote:
>>>>>>>>>> 
>>>>>>>>>> Hi,
>>>>>>>>>> 
>>>>>>>>>> I have written a custom appender extending the log4j2
>>>>>> AbstractAppender.
>>>>>>>>> But
>>>>>>>>>> I am getting a runtime error[1]. I have added the plugin
>>>>>> annotation[2]
>>>>>>>>> as
>>>>>>>>>> per the manual and the custom appender class contains factory
>> method
>>>>>>>>>> createAppender() as well. I also have added the package name to
>>>>>>>>>> configuration element.
>>>>>>>>>> What am I missing here? Appreciate any input on this.
>>>>>>>>>> 
>>>>>>>>>> I have my log4j2.xml file as below:
>>>>>>>>>> 
>>>>>>>>>> <Configuration packages="org.my.custom.http.socket.appender">
>>>>>>>>>> <Appenders>
>>>>>>>>>>    ...
>>>>>>>>>>    <Socket name="socket" host="localhost" port="4714">
>>>>>>>>>>  <!--PatternLayout pattern="[%d] %5p {%c} - %m%ex%n"/-->
>>>>>>>>>> </Socket>
>>>>>>>>>>    <HTTPSocket name="HTTP_APPENDER" host="localhost" port="8888">
>>>>>>>>>> <-------------------------------------
>>>>>>>>>> New Appender
>>>>>>>>>> </HTTPSocket>
>>>>>>>>>> </Appenders>
>>>>>>>>>> <Loggers>
>>>>>>>>>>    <Root level="info" includeLocation="true">
>>>>>>>>>>        ...
>>>>>>>>>>        <AppenderRef ref="HTTP_APPENDER"/>
>>>>>>>>>>    </Root>
>>>>>>>>>>    <Logger name="my.custom.deployer" level="info"
>>>>>> additivity="true">
>>>>>>>>>>            <AppenderRef ref="socket"/>
>>>>>>>>>> </Logger>
>>>>>>>>>> </Loggers>
>>>>>>>>>> </Configuration>
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> [1] ERROR Appenders contains an invalid element or attribute
>>>>>>>>> "HTTPSocket"
>>>>>>>>>> [2] @Plugin(name = "HTTPSocket", category = "Core", elementType =
>>>>>>>>> "appender",
>>>>>>>>>> printObject = true)
>>>>>>>>>> 
>>>>>>>>>> Thanks,
>>>>>>>>>> Nipuni
>>>>>>>>>> 
>>>>>>>>>> --
>>>>>>>>>> Nipuni Perera
>>>>>>>>>> Software Engineer; WSO2 Inc.; http://wso2.com
>>>>>>>>>> Email: nipuni@wso2.com
>>>>>>>>>> Git hub profile: https://github.com/nipuni
>>>>>>>>>> Blog : http://nipunipererablog.blogspot.com/
>>>>>>>>>> Mobile: +94 (71) 5626680
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>> ---------------------------------------------------------------------
>>>>>>>>> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
>>>>>>>>> For additional commands, e-mail:
>> log4j-user-help@logging.apache.org
>>>>>>>> 
>>>>>>>> 
>>>>>>>> --
>>>>>>>> Nipuni Perera
>>>>>>>> Software Engineer; WSO2 Inc.; http://wso2.com
>>>>>>>> Email: nipuni@wso2.com
>>>>>>>> Git hub profile: https://github.com/nipuni
>>>>>>>> Blog : http://nipunipererablog.blogspot.com/
>>>>>>>> Mobile: +94 (71) 5626680
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> --
>>>>>>> Nipuni Perera
>>>>>>> Software Engineer; WSO2 Inc.; http://wso2.com
>>>>>>> Email: nipuni@wso2.com
>>>>>>> Git hub profile: https://github.com/nipuni
>>>>>>> Blog : http://nipunipererablog.blogspot.com/
>>>>>>> Mobile: +94 (71) 5626680
>>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> Nipuni Perera
>>>>> Software Engineer; WSO2 Inc.; http://wso2.com
>>>>> Email: nipuni@wso2.com
>>>>> Git hub profile: https://github.com/nipuni
>>>>> Blog : http://nipunipererablog.blogspot.com/
>>>>> Mobile: +94 (71) 5626680
>>>>> 
>>>> 
>>>> 
>>>> 
>>>> --
>>>> Nipuni Perera
>>>> Software Engineer; WSO2 Inc.; http://wso2.com
>>>> Email: nipuni@wso2.com
>>>> Git hub profile: https://github.com/nipuni
>>>> Blog : http://nipunipererablog.blogspot.com/
>>>> Mobile: +94 (71) 5626680
>>> 
>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
>> For additional commands, e-mail: log4j-user-help@logging.apache.org
>> 
>> 
> 
> 
> -- 
> Nipuni Perera
> Software Engineer; WSO2 Inc.; http://wso2.com
> Email: nipuni@wso2.com
> Git hub profile: https://github.com/nipuni
> Blog : http://nipunipererablog.blogspot.com/
> Mobile: +94 (71) 5626680



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org


Re: Custom appender not identified in OSGi environment

Posted by Nipuni Piyabasi Perera <ni...@gmail.com>.
Thanks for the input.

Yes the issue may be different than what I have mentioned. I suspected that
the issue is related to Log4j2Plugins.dat file as the appender is working
fine in non-OSGi environment, and the only different I could find was
that Log4j2Plugins.dat
file comparing the  two jars. May be I am missing some plugin that I need
to add in pom.xml.

Thanks,
Nipuni

On Fri, Feb 5, 2016 at 12:00 AM, Ralph Goers <ra...@dslextreme.com>
wrote:

> Actually, I just looked at the code and there is a class that should be
> looking at your bundle to locate any plugins you may have. I am actually
> not very familiar with that code so I wonder if one of the other committers
> could provide insight on what might be causing it not to work.
>
> Ralph
>
> > On Feb 4, 2016, at 11:06 AM, Ralph Goers <ra...@dslextreme.com>
> wrote:
> >
> > I don’t believe that issue is related to your problem.
> >
> > When Log4j loads plugins it can only find plugins on whatever class path
> it has available to it.  If it is in a different OSGi bundle than your
> plugin it may not see it.  In short, Log4j has to be able to find
> META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat for
> Log4j and the same file for your plugin. Log4j’s file is embedded in the
> log4j-core jar. Yours will be in whatever jar you are producing. There is a
> process for “shading” your code with Log4j’s that will cause them to be
> combined, but I am afraid I don’t know exactly where that is documented. If
> you want your stuff in a separate bundle from Log4j’s then you need to
> figure out how to get the stuff in your bundle on Log4j’s classpath.
> >
> > Ralph
> >
> >> On Feb 4, 2016, at 10:39 AM, Nipuni Piyabasi Perera <
> nipuni880917@gmail.com> wrote:
> >>
> >> Hi all,
> >>
> >> Above mentioned issue is reported and fixed in[1]. I have tried to use
> >> log4j2- 2.0.1 (as this is the fix version of the jira) in my OSGi
> >> environment. But I still see the same CLASS_NOT_FOUND error while it
> works
> >> fine in non-OSGi environment.
> >>
> >> [1] https://issues.apache.org/jira/browse/LOG4J2-741
> >>
> >> Thanks,
> >> Nipuni
> >>
> >> On Thu, Feb 4, 2016 at 9:24 AM, Nipuni Piyabasi Perera <
> >> nipuni880917@gmail.com> wrote:
> >>
> >>> Hi,
> >>>
> >>> Thank you very much for the reply.
> >>>
> >>> Initially I got error [1] when I am trying to test the appender in
> >>> non-OSGi environment. This was due to not passing the correct number of
> >>> parameters to the factory method. I have updated my log4j2.xml and then
> >>> could solve the issue[1] in non-OSGi env. I have applied the same
> >>> configuration to OSGi environment as well.
> >>>
> >>> Now I am seeing error[2],which seems to be a class loading issue as you
> >>> have mentioned. I did added the plugin processor in my pom.xml but
> still
> >>> seeing the same issue. While comparing the OSGi bundle and the
> non-OSGi jar
> >>> I could see that the Log4j2Plugins.dat file is missing in the OSGi
> bundle. I
> >>> have added the package name to configuration element as well. (as per
> the
> >>> pom.xml [3] I am using log4j2 2.5)
> >>>
> >>> [1] Unable to invoke factory method in class ...
> >>> [2] ERROR Error processing element HTTPSocket: CLASS_NOT_FOUND
> >>> [3] Adding the plugin section of my pom.xml
> >>>
> >>> <plugins>
> >>>   <plugin>
> >>>       <groupId>org.apache.felix</groupId>
> >>>       <artifactId>maven-scr-plugin</artifactId>
> >>>       <version>1.9.0</version>
> >>>       <executions>
> >>>           <execution>
> >>>               <id>generate-scr-scrdescriptor</id>
> >>>               <goals>
> >>>                   <goal>scr</goal>
> >>>               </goals>
> >>>           </execution>
> >>>       </executions>
> >>>   </plugin>
> >>>   <plugin>
> >>>       <groupId>org.apache.maven.plugins</groupId>
> >>>       <artifactId>maven-compiler-plugin</artifactId>
> >>>       <version>3.1</version>
> >>>       <executions>
> >>>           <execution>
> >>>               <id>log4j-plugin-processor</id>
> >>>               <goals>
> >>>                   <goal>compile</goal>
> >>>               </goals>
> >>>               <phase>process-classes</phase>
> >>>               <configuration>
> >>>                   <proc>only</proc>
> >>>                   <annotationProcessors>
> >>>
>  <annotationProcessor>org.apache.logging.log4j.core.config.plugins.processor.PluginProcessor</annotationProcessor>
> >>>                   </annotationProcessors>
> >>>               </configuration>
> >>>           </execution>
> >>>       </executions>
> >>>   </plugin>
> >>>   <plugin>
> >>>       <groupId>org.apache.felix</groupId>
> >>>       <artifactId>maven-bundle-plugin</artifactId>
> >>>       <extensions>true</extensions>
> >>>       <configuration>
> >>>           <instructions>
> >>>               <Bundle-Vendor>Nipuni</Bundle-Vendor>
> >>>
>  <Bundle-SymbolicName>org.my.custom.http.socket.appender</Bundle-SymbolicName>
> >>>
>  <Bundle-Name>org.my.custom.http.socket.appender</Bundle-Name>
> >>>               <Bundle-Version>1.0.0</Bundle-Version>
> >>>               <Import-Package>
> >>>                   org.apache.log4j.*;version="[2.5.0,3.0.0)"
> >>>               </Import-Package>
> >>>               <Export-Package>
> >>>                   org.my.custom.http.socket.appender.*;version="1.0.0"
> >>>               </Export-Package>
> >>>               <DynamicImport-Package>*</DynamicImport-Package>
> >>>           </instructions>
> >>>       </configuration>
> >>>   </plugin>
> >>>
> >>> </plugins>
> >>>
> >>>
> >>> Thanks,
> >>> Nipuni
> >>>
> >>> On Thu, Feb 4, 2016 at 4:31 AM, Remko Popma <re...@gmail.com>
> wrote:
> >>>
> >>>> Thanks for confirming that.
> >>>>
> >>>> You may avoid the classloader issues by combining the log4j jars and
> your
> >>>> custom appender in a single jar.
> >>>>
> >>>> The only tricky part here is that you'd need to combine the serialized
> >>>> plugin listing files (see
> >>>> http://logging.apache.org/log4j/2.x/manual/plugins.html) from the
> >>>> various log4j jars into a single serialized plugin listing file in
> your
> >>>> superjar.
> >>>>
> >>>> See the source code for PluginProcessor for more details.
> >>>>
> https://logging.apache.org/log4j/2.x/log4j-core/xref/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.html
> >>>>
> >>>> Sent from my iPhone
> >>>>
> >>>>> On 2016/02/03, at 23:54, Nipuni Piyabasi Perera <
> nipuni880917@gmail.com>
> >>>> wrote:
> >>>>>
> >>>>> Hi all,
> >>>>>
> >>>>> As I have mentioned in my first mail, the issue is only in the OSGi
> >>>>> environment it seems. I had mistakenly added the appender as a OSGi
> >>>> bundle
> >>>>> in the non-OSGi environment. Could resolve the issue after changing
> the
> >>>>> package to a jar.
> >>>>>
> >>>>> Thanks,
> >>>>> Nipuni
> >>>>>
> >>>>> On Wed, Feb 3, 2016 at 7:41 PM, Nipuni Piyabasi Perera <
> >>>>> nipuni880917@gmail.com> wrote:
> >>>>>
> >>>>>> Thanks for the prompt reply.
> >>>>>>
> >>>>>> I have first tried my custom appender in OSGi environment which gave
> >>>> the
> >>>>>> errors above. But I am getting the same issue in non-OSGi
> environment
> >>>> too.
> >>>>>> It seems an issue with custom appender.
> >>>>>> AFAIK It is plugin annotation that make the appender visible to
> >>>> log4j2. I
> >>>>>> can't find any issue in my log4j2.xml and plugin configuration of
> the
> >>>>>> class. Is there any other places that I need to care about?
> >>>>>>
> >>>>>> Thanks,
> >>>>>> Nipuni
> >>>>>>
> >>>>>> On Wed, Feb 3, 2016 at 7:28 PM, Ralph Goers <
> >>>> ralph.goers@dslextreme.com>
> >>>>>> wrote:
> >>>>>>
> >>>>>>> OSGi does interesting things with ClassLoaders. Log4j has to be
> able
> >>>> to
> >>>>>>> access your plugin when it is configuring. If it isn’t in an
> >>>> accessible
> >>>>>>> ClassLoader it won’t see it.  There have been a few people who are
> >>>> using
> >>>>>>> Log4j in an OSGi environment that have helped out with patches from
> >>>> time to
> >>>>>>> time. Perhaps one of them can help out?
> >>>>>>>
> >>>>>>> Ralph
> >>>>>>>
> >>>>>>>>> On Feb 3, 2016, at 6:07 AM, Nipuni Piyabasi Perera <
> >>>>>>>> nipuni880917@gmail.com> wrote:
> >>>>>>>>
> >>>>>>>> Hi,
> >>>>>>>>
> >>>>>>>> I have written a custom appender extending the log4j2
> >>>> AbstractAppender.
> >>>>>>> But
> >>>>>>>> I am getting a runtime error[1]. I have added the plugin
> >>>> annotation[2]
> >>>>>>> as
> >>>>>>>> per the manual and the custom appender class contains factory
> method
> >>>>>>>> createAppender() as well. I also have added the package name to
> >>>>>>>> configuration element.
> >>>>>>>> What am I missing here? Appreciate any input on this.
> >>>>>>>>
> >>>>>>>> I have my log4j2.xml file as below:
> >>>>>>>>
> >>>>>>>> <Configuration packages="org.my.custom.http.socket.appender">
> >>>>>>>> <Appenders>
> >>>>>>>>     ...
> >>>>>>>>     <Socket name="socket" host="localhost" port="4714">
> >>>>>>>>   <!--PatternLayout pattern="[%d] %5p {%c} - %m%ex%n"/-->
> >>>>>>>> </Socket>
> >>>>>>>>     <HTTPSocket name="HTTP_APPENDER" host="localhost" port="8888">
> >>>>>>>> <-------------------------------------
> >>>>>>>> New Appender
> >>>>>>>> </HTTPSocket>
> >>>>>>>> </Appenders>
> >>>>>>>> <Loggers>
> >>>>>>>>     <Root level="info" includeLocation="true">
> >>>>>>>>         ...
> >>>>>>>>         <AppenderRef ref="HTTP_APPENDER"/>
> >>>>>>>>     </Root>
> >>>>>>>>     <Logger name="my.custom.deployer" level="info"
> >>>> additivity="true">
> >>>>>>>>             <AppenderRef ref="socket"/>
> >>>>>>>> </Logger>
> >>>>>>>> </Loggers>
> >>>>>>>> </Configuration>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> [1] ERROR Appenders contains an invalid element or attribute
> >>>>>>> "HTTPSocket"
> >>>>>>>> [2] @Plugin(name = "HTTPSocket", category = "Core", elementType =
> >>>>>>> "appender",
> >>>>>>>> printObject = true)
> >>>>>>>>
> >>>>>>>> Thanks,
> >>>>>>>> Nipuni
> >>>>>>>>
> >>>>>>>> --
> >>>>>>>> Nipuni Perera
> >>>>>>>> Software Engineer; WSO2 Inc.; http://wso2.com
> >>>>>>>> Email: nipuni@wso2.com
> >>>>>>>> Git hub profile: https://github.com/nipuni
> >>>>>>>> Blog : http://nipunipererablog.blogspot.com/
> >>>>>>>> Mobile: +94 (71) 5626680
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> ---------------------------------------------------------------------
> >>>>>>> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> >>>>>>> For additional commands, e-mail:
> log4j-user-help@logging.apache.org
> >>>>>>
> >>>>>>
> >>>>>> --
> >>>>>> Nipuni Perera
> >>>>>> Software Engineer; WSO2 Inc.; http://wso2.com
> >>>>>> Email: nipuni@wso2.com
> >>>>>> Git hub profile: https://github.com/nipuni
> >>>>>> Blog : http://nipunipererablog.blogspot.com/
> >>>>>> Mobile: +94 (71) 5626680
> >>>>>
> >>>>>
> >>>>>
> >>>>> --
> >>>>> Nipuni Perera
> >>>>> Software Engineer; WSO2 Inc.; http://wso2.com
> >>>>> Email: nipuni@wso2.com
> >>>>> Git hub profile: https://github.com/nipuni
> >>>>> Blog : http://nipunipererablog.blogspot.com/
> >>>>> Mobile: +94 (71) 5626680
> >>>>
> >>>
> >>>
> >>>
> >>> --
> >>> Nipuni Perera
> >>> Software Engineer; WSO2 Inc.; http://wso2.com
> >>> Email: nipuni@wso2.com
> >>> Git hub profile: https://github.com/nipuni
> >>> Blog : http://nipunipererablog.blogspot.com/
> >>> Mobile: +94 (71) 5626680
> >>>
> >>
> >>
> >>
> >> --
> >> Nipuni Perera
> >> Software Engineer; WSO2 Inc.; http://wso2.com
> >> Email: nipuni@wso2.com
> >> Git hub profile: https://github.com/nipuni
> >> Blog : http://nipunipererablog.blogspot.com/
> >> Mobile: +94 (71) 5626680
> >
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> For additional commands, e-mail: log4j-user-help@logging.apache.org
>
>


-- 
Nipuni Perera
Software Engineer; WSO2 Inc.; http://wso2.com
Email: nipuni@wso2.com
Git hub profile: https://github.com/nipuni
Blog : http://nipunipererablog.blogspot.com/
Mobile: +94 (71) 5626680

Re: Custom appender not identified in OSGi environment

Posted by Ralph Goers <ra...@dslextreme.com>.
Actually, I just looked at the code and there is a class that should be looking at your bundle to locate any plugins you may have. I am actually not very familiar with that code so I wonder if one of the other committers could provide insight on what might be causing it not to work.

Ralph

> On Feb 4, 2016, at 11:06 AM, Ralph Goers <ra...@dslextreme.com> wrote:
> 
> I don’t believe that issue is related to your problem.  
> 
> When Log4j loads plugins it can only find plugins on whatever class path it has available to it.  If it is in a different OSGi bundle than your plugin it may not see it.  In short, Log4j has to be able to find META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat for Log4j and the same file for your plugin. Log4j’s file is embedded in the log4j-core jar. Yours will be in whatever jar you are producing. There is a process for “shading” your code with Log4j’s that will cause them to be combined, but I am afraid I don’t know exactly where that is documented. If you want your stuff in a separate bundle from Log4j’s then you need to figure out how to get the stuff in your bundle on Log4j’s classpath.
> 
> Ralph
> 
>> On Feb 4, 2016, at 10:39 AM, Nipuni Piyabasi Perera <ni...@gmail.com> wrote:
>> 
>> Hi all,
>> 
>> Above mentioned issue is reported and fixed in[1]. I have tried to use
>> log4j2- 2.0.1 (as this is the fix version of the jira) in my OSGi
>> environment. But I still see the same CLASS_NOT_FOUND error while it works
>> fine in non-OSGi environment.
>> 
>> [1] https://issues.apache.org/jira/browse/LOG4J2-741
>> 
>> Thanks,
>> Nipuni
>> 
>> On Thu, Feb 4, 2016 at 9:24 AM, Nipuni Piyabasi Perera <
>> nipuni880917@gmail.com> wrote:
>> 
>>> Hi,
>>> 
>>> Thank you very much for the reply.
>>> 
>>> Initially I got error [1] when I am trying to test the appender in
>>> non-OSGi environment. This was due to not passing the correct number of
>>> parameters to the factory method. I have updated my log4j2.xml and then
>>> could solve the issue[1] in non-OSGi env. I have applied the same
>>> configuration to OSGi environment as well.
>>> 
>>> Now I am seeing error[2],which seems to be a class loading issue as you
>>> have mentioned. I did added the plugin processor in my pom.xml but still
>>> seeing the same issue. While comparing the OSGi bundle and the non-OSGi jar
>>> I could see that the Log4j2Plugins.dat file is missing in the OSGi bundle. I
>>> have added the package name to configuration element as well. (as per the
>>> pom.xml [3] I am using log4j2 2.5)
>>> 
>>> [1] Unable to invoke factory method in class ...
>>> [2] ERROR Error processing element HTTPSocket: CLASS_NOT_FOUND
>>> [3] Adding the plugin section of my pom.xml
>>> 
>>> <plugins>
>>>   <plugin>
>>>       <groupId>org.apache.felix</groupId>
>>>       <artifactId>maven-scr-plugin</artifactId>
>>>       <version>1.9.0</version>
>>>       <executions>
>>>           <execution>
>>>               <id>generate-scr-scrdescriptor</id>
>>>               <goals>
>>>                   <goal>scr</goal>
>>>               </goals>
>>>           </execution>
>>>       </executions>
>>>   </plugin>
>>>   <plugin>
>>>       <groupId>org.apache.maven.plugins</groupId>
>>>       <artifactId>maven-compiler-plugin</artifactId>
>>>       <version>3.1</version>
>>>       <executions>
>>>           <execution>
>>>               <id>log4j-plugin-processor</id>
>>>               <goals>
>>>                   <goal>compile</goal>
>>>               </goals>
>>>               <phase>process-classes</phase>
>>>               <configuration>
>>>                   <proc>only</proc>
>>>                   <annotationProcessors>
>>>                       <annotationProcessor>org.apache.logging.log4j.core.config.plugins.processor.PluginProcessor</annotationProcessor>
>>>                   </annotationProcessors>
>>>               </configuration>
>>>           </execution>
>>>       </executions>
>>>   </plugin>
>>>   <plugin>
>>>       <groupId>org.apache.felix</groupId>
>>>       <artifactId>maven-bundle-plugin</artifactId>
>>>       <extensions>true</extensions>
>>>       <configuration>
>>>           <instructions>
>>>               <Bundle-Vendor>Nipuni</Bundle-Vendor>
>>>               <Bundle-SymbolicName>org.my.custom.http.socket.appender</Bundle-SymbolicName>
>>>               <Bundle-Name>org.my.custom.http.socket.appender</Bundle-Name>
>>>               <Bundle-Version>1.0.0</Bundle-Version>
>>>               <Import-Package>
>>>                   org.apache.log4j.*;version="[2.5.0,3.0.0)"
>>>               </Import-Package>
>>>               <Export-Package>
>>>                   org.my.custom.http.socket.appender.*;version="1.0.0"
>>>               </Export-Package>
>>>               <DynamicImport-Package>*</DynamicImport-Package>
>>>           </instructions>
>>>       </configuration>
>>>   </plugin>
>>> 
>>> </plugins>
>>> 
>>> 
>>> Thanks,
>>> Nipuni
>>> 
>>> On Thu, Feb 4, 2016 at 4:31 AM, Remko Popma <re...@gmail.com> wrote:
>>> 
>>>> Thanks for confirming that.
>>>> 
>>>> You may avoid the classloader issues by combining the log4j jars and your
>>>> custom appender in a single jar.
>>>> 
>>>> The only tricky part here is that you'd need to combine the serialized
>>>> plugin listing files (see
>>>> http://logging.apache.org/log4j/2.x/manual/plugins.html) from the
>>>> various log4j jars into a single serialized plugin listing file in your
>>>> superjar.
>>>> 
>>>> See the source code for PluginProcessor for more details.
>>>> https://logging.apache.org/log4j/2.x/log4j-core/xref/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.html
>>>> 
>>>> Sent from my iPhone
>>>> 
>>>>> On 2016/02/03, at 23:54, Nipuni Piyabasi Perera <ni...@gmail.com>
>>>> wrote:
>>>>> 
>>>>> Hi all,
>>>>> 
>>>>> As I have mentioned in my first mail, the issue is only in the OSGi
>>>>> environment it seems. I had mistakenly added the appender as a OSGi
>>>> bundle
>>>>> in the non-OSGi environment. Could resolve the issue after changing the
>>>>> package to a jar.
>>>>> 
>>>>> Thanks,
>>>>> Nipuni
>>>>> 
>>>>> On Wed, Feb 3, 2016 at 7:41 PM, Nipuni Piyabasi Perera <
>>>>> nipuni880917@gmail.com> wrote:
>>>>> 
>>>>>> Thanks for the prompt reply.
>>>>>> 
>>>>>> I have first tried my custom appender in OSGi environment which gave
>>>> the
>>>>>> errors above. But I am getting the same issue in non-OSGi environment
>>>> too.
>>>>>> It seems an issue with custom appender.
>>>>>> AFAIK It is plugin annotation that make the appender visible to
>>>> log4j2. I
>>>>>> can't find any issue in my log4j2.xml and plugin configuration of the
>>>>>> class. Is there any other places that I need to care about?
>>>>>> 
>>>>>> Thanks,
>>>>>> Nipuni
>>>>>> 
>>>>>> On Wed, Feb 3, 2016 at 7:28 PM, Ralph Goers <
>>>> ralph.goers@dslextreme.com>
>>>>>> wrote:
>>>>>> 
>>>>>>> OSGi does interesting things with ClassLoaders. Log4j has to be able
>>>> to
>>>>>>> access your plugin when it is configuring. If it isn’t in an
>>>> accessible
>>>>>>> ClassLoader it won’t see it.  There have been a few people who are
>>>> using
>>>>>>> Log4j in an OSGi environment that have helped out with patches from
>>>> time to
>>>>>>> time. Perhaps one of them can help out?
>>>>>>> 
>>>>>>> Ralph
>>>>>>> 
>>>>>>>>> On Feb 3, 2016, at 6:07 AM, Nipuni Piyabasi Perera <
>>>>>>>> nipuni880917@gmail.com> wrote:
>>>>>>>> 
>>>>>>>> Hi,
>>>>>>>> 
>>>>>>>> I have written a custom appender extending the log4j2
>>>> AbstractAppender.
>>>>>>> But
>>>>>>>> I am getting a runtime error[1]. I have added the plugin
>>>> annotation[2]
>>>>>>> as
>>>>>>>> per the manual and the custom appender class contains factory method
>>>>>>>> createAppender() as well. I also have added the package name to
>>>>>>>> configuration element.
>>>>>>>> What am I missing here? Appreciate any input on this.
>>>>>>>> 
>>>>>>>> I have my log4j2.xml file as below:
>>>>>>>> 
>>>>>>>> <Configuration packages="org.my.custom.http.socket.appender">
>>>>>>>> <Appenders>
>>>>>>>>     ...
>>>>>>>>     <Socket name="socket" host="localhost" port="4714">
>>>>>>>>   <!--PatternLayout pattern="[%d] %5p {%c} - %m%ex%n"/-->
>>>>>>>> </Socket>
>>>>>>>>     <HTTPSocket name="HTTP_APPENDER" host="localhost" port="8888">
>>>>>>>> <-------------------------------------
>>>>>>>> New Appender
>>>>>>>> </HTTPSocket>
>>>>>>>> </Appenders>
>>>>>>>> <Loggers>
>>>>>>>>     <Root level="info" includeLocation="true">
>>>>>>>>         ...
>>>>>>>>         <AppenderRef ref="HTTP_APPENDER"/>
>>>>>>>>     </Root>
>>>>>>>>     <Logger name="my.custom.deployer" level="info"
>>>> additivity="true">
>>>>>>>>             <AppenderRef ref="socket"/>
>>>>>>>> </Logger>
>>>>>>>> </Loggers>
>>>>>>>> </Configuration>
>>>>>>>> 
>>>>>>>> 
>>>>>>>> [1] ERROR Appenders contains an invalid element or attribute
>>>>>>> "HTTPSocket"
>>>>>>>> [2] @Plugin(name = "HTTPSocket", category = "Core", elementType =
>>>>>>> "appender",
>>>>>>>> printObject = true)
>>>>>>>> 
>>>>>>>> Thanks,
>>>>>>>> Nipuni
>>>>>>>> 
>>>>>>>> --
>>>>>>>> Nipuni Perera
>>>>>>>> Software Engineer; WSO2 Inc.; http://wso2.com
>>>>>>>> Email: nipuni@wso2.com
>>>>>>>> Git hub profile: https://github.com/nipuni
>>>>>>>> Blog : http://nipunipererablog.blogspot.com/
>>>>>>>> Mobile: +94 (71) 5626680
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> ---------------------------------------------------------------------
>>>>>>> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
>>>>>>> For additional commands, e-mail: log4j-user-help@logging.apache.org
>>>>>> 
>>>>>> 
>>>>>> --
>>>>>> Nipuni Perera
>>>>>> Software Engineer; WSO2 Inc.; http://wso2.com
>>>>>> Email: nipuni@wso2.com
>>>>>> Git hub profile: https://github.com/nipuni
>>>>>> Blog : http://nipunipererablog.blogspot.com/
>>>>>> Mobile: +94 (71) 5626680
>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> Nipuni Perera
>>>>> Software Engineer; WSO2 Inc.; http://wso2.com
>>>>> Email: nipuni@wso2.com
>>>>> Git hub profile: https://github.com/nipuni
>>>>> Blog : http://nipunipererablog.blogspot.com/
>>>>> Mobile: +94 (71) 5626680
>>>> 
>>> 
>>> 
>>> 
>>> --
>>> Nipuni Perera
>>> Software Engineer; WSO2 Inc.; http://wso2.com
>>> Email: nipuni@wso2.com
>>> Git hub profile: https://github.com/nipuni
>>> Blog : http://nipunipererablog.blogspot.com/
>>> Mobile: +94 (71) 5626680
>>> 
>> 
>> 
>> 
>> -- 
>> Nipuni Perera
>> Software Engineer; WSO2 Inc.; http://wso2.com
>> Email: nipuni@wso2.com
>> Git hub profile: https://github.com/nipuni
>> Blog : http://nipunipererablog.blogspot.com/
>> Mobile: +94 (71) 5626680
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org


Re: Custom appender not identified in OSGi environment

Posted by Ralph Goers <ra...@dslextreme.com>.
I don’t believe that issue is related to your problem.  

When Log4j loads plugins it can only find plugins on whatever class path it has available to it.  If it is in a different OSGi bundle than your plugin it may not see it.  In short, Log4j has to be able to find META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat for Log4j and the same file for your plugin. Log4j’s file is embedded in the log4j-core jar. Yours will be in whatever jar you are producing. There is a process for “shading” your code with Log4j’s that will cause them to be combined, but I am afraid I don’t know exactly where that is documented. If you want your stuff in a separate bundle from Log4j’s then you need to figure out how to get the stuff in your bundle on Log4j’s classpath.

Ralph

> On Feb 4, 2016, at 10:39 AM, Nipuni Piyabasi Perera <ni...@gmail.com> wrote:
> 
> Hi all,
> 
> Above mentioned issue is reported and fixed in[1]. I have tried to use
> log4j2- 2.0.1 (as this is the fix version of the jira) in my OSGi
> environment. But I still see the same CLASS_NOT_FOUND error while it works
> fine in non-OSGi environment.
> 
> [1] https://issues.apache.org/jira/browse/LOG4J2-741
> 
> Thanks,
> Nipuni
> 
> On Thu, Feb 4, 2016 at 9:24 AM, Nipuni Piyabasi Perera <
> nipuni880917@gmail.com> wrote:
> 
>> Hi,
>> 
>> Thank you very much for the reply.
>> 
>> Initially I got error [1] when I am trying to test the appender in
>> non-OSGi environment. This was due to not passing the correct number of
>> parameters to the factory method. I have updated my log4j2.xml and then
>> could solve the issue[1] in non-OSGi env. I have applied the same
>> configuration to OSGi environment as well.
>> 
>> Now I am seeing error[2],which seems to be a class loading issue as you
>> have mentioned. I did added the plugin processor in my pom.xml but still
>> seeing the same issue. While comparing the OSGi bundle and the non-OSGi jar
>> I could see that the Log4j2Plugins.dat file is missing in the OSGi bundle. I
>> have added the package name to configuration element as well. (as per the
>> pom.xml [3] I am using log4j2 2.5)
>> 
>> [1] Unable to invoke factory method in class ...
>> [2] ERROR Error processing element HTTPSocket: CLASS_NOT_FOUND
>> [3] Adding the plugin section of my pom.xml
>> 
>> <plugins>
>>    <plugin>
>>        <groupId>org.apache.felix</groupId>
>>        <artifactId>maven-scr-plugin</artifactId>
>>        <version>1.9.0</version>
>>        <executions>
>>            <execution>
>>                <id>generate-scr-scrdescriptor</id>
>>                <goals>
>>                    <goal>scr</goal>
>>                </goals>
>>            </execution>
>>        </executions>
>>    </plugin>
>>    <plugin>
>>        <groupId>org.apache.maven.plugins</groupId>
>>        <artifactId>maven-compiler-plugin</artifactId>
>>        <version>3.1</version>
>>        <executions>
>>            <execution>
>>                <id>log4j-plugin-processor</id>
>>                <goals>
>>                    <goal>compile</goal>
>>                </goals>
>>                <phase>process-classes</phase>
>>                <configuration>
>>                    <proc>only</proc>
>>                    <annotationProcessors>
>>                        <annotationProcessor>org.apache.logging.log4j.core.config.plugins.processor.PluginProcessor</annotationProcessor>
>>                    </annotationProcessors>
>>                </configuration>
>>            </execution>
>>        </executions>
>>    </plugin>
>>    <plugin>
>>        <groupId>org.apache.felix</groupId>
>>        <artifactId>maven-bundle-plugin</artifactId>
>>        <extensions>true</extensions>
>>        <configuration>
>>            <instructions>
>>                <Bundle-Vendor>Nipuni</Bundle-Vendor>
>>                <Bundle-SymbolicName>org.my.custom.http.socket.appender</Bundle-SymbolicName>
>>                <Bundle-Name>org.my.custom.http.socket.appender</Bundle-Name>
>>                <Bundle-Version>1.0.0</Bundle-Version>
>>                <Import-Package>
>>                    org.apache.log4j.*;version="[2.5.0,3.0.0)"
>>                </Import-Package>
>>                <Export-Package>
>>                    org.my.custom.http.socket.appender.*;version="1.0.0"
>>                </Export-Package>
>>                <DynamicImport-Package>*</DynamicImport-Package>
>>            </instructions>
>>        </configuration>
>>    </plugin>
>> 
>> </plugins>
>> 
>> 
>> Thanks,
>> Nipuni
>> 
>> On Thu, Feb 4, 2016 at 4:31 AM, Remko Popma <re...@gmail.com> wrote:
>> 
>>> Thanks for confirming that.
>>> 
>>> You may avoid the classloader issues by combining the log4j jars and your
>>> custom appender in a single jar.
>>> 
>>> The only tricky part here is that you'd need to combine the serialized
>>> plugin listing files (see
>>> http://logging.apache.org/log4j/2.x/manual/plugins.html) from the
>>> various log4j jars into a single serialized plugin listing file in your
>>> superjar.
>>> 
>>> See the source code for PluginProcessor for more details.
>>> https://logging.apache.org/log4j/2.x/log4j-core/xref/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.html
>>> 
>>> Sent from my iPhone
>>> 
>>>> On 2016/02/03, at 23:54, Nipuni Piyabasi Perera <ni...@gmail.com>
>>> wrote:
>>>> 
>>>> Hi all,
>>>> 
>>>> As I have mentioned in my first mail, the issue is only in the OSGi
>>>> environment it seems. I had mistakenly added the appender as a OSGi
>>> bundle
>>>> in the non-OSGi environment. Could resolve the issue after changing the
>>>> package to a jar.
>>>> 
>>>> Thanks,
>>>> Nipuni
>>>> 
>>>> On Wed, Feb 3, 2016 at 7:41 PM, Nipuni Piyabasi Perera <
>>>> nipuni880917@gmail.com> wrote:
>>>> 
>>>>> Thanks for the prompt reply.
>>>>> 
>>>>> I have first tried my custom appender in OSGi environment which gave
>>> the
>>>>> errors above. But I am getting the same issue in non-OSGi environment
>>> too.
>>>>> It seems an issue with custom appender.
>>>>> AFAIK It is plugin annotation that make the appender visible to
>>> log4j2. I
>>>>> can't find any issue in my log4j2.xml and plugin configuration of the
>>>>> class. Is there any other places that I need to care about?
>>>>> 
>>>>> Thanks,
>>>>> Nipuni
>>>>> 
>>>>> On Wed, Feb 3, 2016 at 7:28 PM, Ralph Goers <
>>> ralph.goers@dslextreme.com>
>>>>> wrote:
>>>>> 
>>>>>> OSGi does interesting things with ClassLoaders. Log4j has to be able
>>> to
>>>>>> access your plugin when it is configuring. If it isn’t in an
>>> accessible
>>>>>> ClassLoader it won’t see it.  There have been a few people who are
>>> using
>>>>>> Log4j in an OSGi environment that have helped out with patches from
>>> time to
>>>>>> time. Perhaps one of them can help out?
>>>>>> 
>>>>>> Ralph
>>>>>> 
>>>>>>>> On Feb 3, 2016, at 6:07 AM, Nipuni Piyabasi Perera <
>>>>>>> nipuni880917@gmail.com> wrote:
>>>>>>> 
>>>>>>> Hi,
>>>>>>> 
>>>>>>> I have written a custom appender extending the log4j2
>>> AbstractAppender.
>>>>>> But
>>>>>>> I am getting a runtime error[1]. I have added the plugin
>>> annotation[2]
>>>>>> as
>>>>>>> per the manual and the custom appender class contains factory method
>>>>>>> createAppender() as well. I also have added the package name to
>>>>>>> configuration element.
>>>>>>> What am I missing here? Appreciate any input on this.
>>>>>>> 
>>>>>>> I have my log4j2.xml file as below:
>>>>>>> 
>>>>>>> <Configuration packages="org.my.custom.http.socket.appender">
>>>>>>>  <Appenders>
>>>>>>>      ...
>>>>>>>      <Socket name="socket" host="localhost" port="4714">
>>>>>>>    <!--PatternLayout pattern="[%d] %5p {%c} - %m%ex%n"/-->
>>>>>>>  </Socket>
>>>>>>>      <HTTPSocket name="HTTP_APPENDER" host="localhost" port="8888">
>>>>>>> <-------------------------------------
>>>>>>> New Appender
>>>>>>>  </HTTPSocket>
>>>>>>>  </Appenders>
>>>>>>>  <Loggers>
>>>>>>>      <Root level="info" includeLocation="true">
>>>>>>>          ...
>>>>>>>          <AppenderRef ref="HTTP_APPENDER"/>
>>>>>>>      </Root>
>>>>>>>      <Logger name="my.custom.deployer" level="info"
>>> additivity="true">
>>>>>>>              <AppenderRef ref="socket"/>
>>>>>>>  </Logger>
>>>>>>>  </Loggers>
>>>>>>> </Configuration>
>>>>>>> 
>>>>>>> 
>>>>>>> [1] ERROR Appenders contains an invalid element or attribute
>>>>>> "HTTPSocket"
>>>>>>> [2] @Plugin(name = "HTTPSocket", category = "Core", elementType =
>>>>>> "appender",
>>>>>>> printObject = true)
>>>>>>> 
>>>>>>> Thanks,
>>>>>>> Nipuni
>>>>>>> 
>>>>>>> --
>>>>>>> Nipuni Perera
>>>>>>> Software Engineer; WSO2 Inc.; http://wso2.com
>>>>>>> Email: nipuni@wso2.com
>>>>>>> Git hub profile: https://github.com/nipuni
>>>>>>> Blog : http://nipunipererablog.blogspot.com/
>>>>>>> Mobile: +94 (71) 5626680
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
>>>>>> For additional commands, e-mail: log4j-user-help@logging.apache.org
>>>>> 
>>>>> 
>>>>> --
>>>>> Nipuni Perera
>>>>> Software Engineer; WSO2 Inc.; http://wso2.com
>>>>> Email: nipuni@wso2.com
>>>>> Git hub profile: https://github.com/nipuni
>>>>> Blog : http://nipunipererablog.blogspot.com/
>>>>> Mobile: +94 (71) 5626680
>>>> 
>>>> 
>>>> 
>>>> --
>>>> Nipuni Perera
>>>> Software Engineer; WSO2 Inc.; http://wso2.com
>>>> Email: nipuni@wso2.com
>>>> Git hub profile: https://github.com/nipuni
>>>> Blog : http://nipunipererablog.blogspot.com/
>>>> Mobile: +94 (71) 5626680
>>> 
>> 
>> 
>> 
>> --
>> Nipuni Perera
>> Software Engineer; WSO2 Inc.; http://wso2.com
>> Email: nipuni@wso2.com
>> Git hub profile: https://github.com/nipuni
>> Blog : http://nipunipererablog.blogspot.com/
>> Mobile: +94 (71) 5626680
>> 
> 
> 
> 
> -- 
> Nipuni Perera
> Software Engineer; WSO2 Inc.; http://wso2.com
> Email: nipuni@wso2.com
> Git hub profile: https://github.com/nipuni
> Blog : http://nipunipererablog.blogspot.com/
> Mobile: +94 (71) 5626680


Re: Custom appender not identified in OSGi environment

Posted by Nipuni Piyabasi Perera <ni...@gmail.com>.
Hi all,

Above mentioned issue is reported and fixed in[1]. I have tried to use
log4j2- 2.0.1 (as this is the fix version of the jira) in my OSGi
environment. But I still see the same CLASS_NOT_FOUND error while it works
fine in non-OSGi environment.

[1] https://issues.apache.org/jira/browse/LOG4J2-741

Thanks,
Nipuni

On Thu, Feb 4, 2016 at 9:24 AM, Nipuni Piyabasi Perera <
nipuni880917@gmail.com> wrote:

> Hi,
>
> Thank you very much for the reply.
>
> Initially I got error [1] when I am trying to test the appender in
> non-OSGi environment. This was due to not passing the correct number of
> parameters to the factory method. I have updated my log4j2.xml and then
> could solve the issue[1] in non-OSGi env. I have applied the same
> configuration to OSGi environment as well.
>
> Now I am seeing error[2],which seems to be a class loading issue as you
> have mentioned. I did added the plugin processor in my pom.xml but still
> seeing the same issue. While comparing the OSGi bundle and the non-OSGi jar
> I could see that the Log4j2Plugins.dat file is missing in the OSGi bundle. I
> have added the package name to configuration element as well. (as per the
> pom.xml [3] I am using log4j2 2.5)
>
> [1] Unable to invoke factory method in class ...
> [2] ERROR Error processing element HTTPSocket: CLASS_NOT_FOUND
> [3] Adding the plugin section of my pom.xml
>
> <plugins>
>     <plugin>
>         <groupId>org.apache.felix</groupId>
>         <artifactId>maven-scr-plugin</artifactId>
>         <version>1.9.0</version>
>         <executions>
>             <execution>
>                 <id>generate-scr-scrdescriptor</id>
>                 <goals>
>                     <goal>scr</goal>
>                 </goals>
>             </execution>
>         </executions>
>     </plugin>
>     <plugin>
>         <groupId>org.apache.maven.plugins</groupId>
>         <artifactId>maven-compiler-plugin</artifactId>
>         <version>3.1</version>
>         <executions>
>             <execution>
>                 <id>log4j-plugin-processor</id>
>                 <goals>
>                     <goal>compile</goal>
>                 </goals>
>                 <phase>process-classes</phase>
>                 <configuration>
>                     <proc>only</proc>
>                     <annotationProcessors>
>                         <annotationProcessor>org.apache.logging.log4j.core.config.plugins.processor.PluginProcessor</annotationProcessor>
>                     </annotationProcessors>
>                 </configuration>
>             </execution>
>         </executions>
>     </plugin>
>     <plugin>
>         <groupId>org.apache.felix</groupId>
>         <artifactId>maven-bundle-plugin</artifactId>
>         <extensions>true</extensions>
>         <configuration>
>             <instructions>
>                 <Bundle-Vendor>Nipuni</Bundle-Vendor>
>                 <Bundle-SymbolicName>org.my.custom.http.socket.appender</Bundle-SymbolicName>
>                 <Bundle-Name>org.my.custom.http.socket.appender</Bundle-Name>
>                 <Bundle-Version>1.0.0</Bundle-Version>
>                 <Import-Package>
>                     org.apache.log4j.*;version="[2.5.0,3.0.0)"
>                 </Import-Package>
>                 <Export-Package>
>                     org.my.custom.http.socket.appender.*;version="1.0.0"
>                 </Export-Package>
>                 <DynamicImport-Package>*</DynamicImport-Package>
>             </instructions>
>         </configuration>
>     </plugin>
>
> </plugins>
>
>
> Thanks,
> Nipuni
>
> On Thu, Feb 4, 2016 at 4:31 AM, Remko Popma <re...@gmail.com> wrote:
>
>> Thanks for confirming that.
>>
>> You may avoid the classloader issues by combining the log4j jars and your
>> custom appender in a single jar.
>>
>> The only tricky part here is that you'd need to combine the serialized
>> plugin listing files (see
>> http://logging.apache.org/log4j/2.x/manual/plugins.html) from the
>> various log4j jars into a single serialized plugin listing file in your
>> superjar.
>>
>> See the source code for PluginProcessor for more details.
>> https://logging.apache.org/log4j/2.x/log4j-core/xref/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.html
>>
>> Sent from my iPhone
>>
>> > On 2016/02/03, at 23:54, Nipuni Piyabasi Perera <ni...@gmail.com>
>> wrote:
>> >
>> > Hi all,
>> >
>> > As I have mentioned in my first mail, the issue is only in the OSGi
>> > environment it seems. I had mistakenly added the appender as a OSGi
>> bundle
>> > in the non-OSGi environment. Could resolve the issue after changing the
>> > package to a jar.
>> >
>> > Thanks,
>> > Nipuni
>> >
>> > On Wed, Feb 3, 2016 at 7:41 PM, Nipuni Piyabasi Perera <
>> > nipuni880917@gmail.com> wrote:
>> >
>> >> Thanks for the prompt reply.
>> >>
>> >> I have first tried my custom appender in OSGi environment which gave
>> the
>> >> errors above. But I am getting the same issue in non-OSGi environment
>> too.
>> >> It seems an issue with custom appender.
>> >> AFAIK It is plugin annotation that make the appender visible to
>> log4j2. I
>> >> can't find any issue in my log4j2.xml and plugin configuration of the
>> >> class. Is there any other places that I need to care about?
>> >>
>> >> Thanks,
>> >> Nipuni
>> >>
>> >> On Wed, Feb 3, 2016 at 7:28 PM, Ralph Goers <
>> ralph.goers@dslextreme.com>
>> >> wrote:
>> >>
>> >>> OSGi does interesting things with ClassLoaders. Log4j has to be able
>> to
>> >>> access your plugin when it is configuring. If it isn’t in an
>> accessible
>> >>> ClassLoader it won’t see it.  There have been a few people who are
>> using
>> >>> Log4j in an OSGi environment that have helped out with patches from
>> time to
>> >>> time. Perhaps one of them can help out?
>> >>>
>> >>> Ralph
>> >>>
>> >>>>> On Feb 3, 2016, at 6:07 AM, Nipuni Piyabasi Perera <
>> >>>> nipuni880917@gmail.com> wrote:
>> >>>>
>> >>>> Hi,
>> >>>>
>> >>>> I have written a custom appender extending the log4j2
>> AbstractAppender.
>> >>> But
>> >>>> I am getting a runtime error[1]. I have added the plugin
>> annotation[2]
>> >>> as
>> >>>> per the manual and the custom appender class contains factory method
>> >>>> createAppender() as well. I also have added the package name to
>> >>>> configuration element.
>> >>>> What am I missing here? Appreciate any input on this.
>> >>>>
>> >>>> I have my log4j2.xml file as below:
>> >>>>
>> >>>> <Configuration packages="org.my.custom.http.socket.appender">
>> >>>>   <Appenders>
>> >>>>       ...
>> >>>>       <Socket name="socket" host="localhost" port="4714">
>> >>>>     <!--PatternLayout pattern="[%d] %5p {%c} - %m%ex%n"/-->
>> >>>>   </Socket>
>> >>>>       <HTTPSocket name="HTTP_APPENDER" host="localhost" port="8888">
>> >>>>  <-------------------------------------
>> >>>> New Appender
>> >>>>   </HTTPSocket>
>> >>>>   </Appenders>
>> >>>>   <Loggers>
>> >>>>       <Root level="info" includeLocation="true">
>> >>>>           ...
>> >>>>           <AppenderRef ref="HTTP_APPENDER"/>
>> >>>>       </Root>
>> >>>>       <Logger name="my.custom.deployer" level="info"
>> additivity="true">
>> >>>>               <AppenderRef ref="socket"/>
>> >>>>   </Logger>
>> >>>>   </Loggers>
>> >>>> </Configuration>
>> >>>>
>> >>>>
>> >>>> [1] ERROR Appenders contains an invalid element or attribute
>> >>> "HTTPSocket"
>> >>>> [2] @Plugin(name = "HTTPSocket", category = "Core", elementType =
>> >>> "appender",
>> >>>> printObject = true)
>> >>>>
>> >>>> Thanks,
>> >>>> Nipuni
>> >>>>
>> >>>> --
>> >>>> Nipuni Perera
>> >>>> Software Engineer; WSO2 Inc.; http://wso2.com
>> >>>> Email: nipuni@wso2.com
>> >>>> Git hub profile: https://github.com/nipuni
>> >>>> Blog : http://nipunipererablog.blogspot.com/
>> >>>> Mobile: +94 (71) 5626680
>> >>>
>> >>>
>> >>>
>> >>> ---------------------------------------------------------------------
>> >>> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
>> >>> For additional commands, e-mail: log4j-user-help@logging.apache.org
>> >>
>> >>
>> >> --
>> >> Nipuni Perera
>> >> Software Engineer; WSO2 Inc.; http://wso2.com
>> >> Email: nipuni@wso2.com
>> >> Git hub profile: https://github.com/nipuni
>> >> Blog : http://nipunipererablog.blogspot.com/
>> >> Mobile: +94 (71) 5626680
>> >
>> >
>> >
>> > --
>> > Nipuni Perera
>> > Software Engineer; WSO2 Inc.; http://wso2.com
>> > Email: nipuni@wso2.com
>> > Git hub profile: https://github.com/nipuni
>> > Blog : http://nipunipererablog.blogspot.com/
>> > Mobile: +94 (71) 5626680
>>
>
>
>
> --
> Nipuni Perera
> Software Engineer; WSO2 Inc.; http://wso2.com
> Email: nipuni@wso2.com
> Git hub profile: https://github.com/nipuni
> Blog : http://nipunipererablog.blogspot.com/
> Mobile: +94 (71) 5626680
>



-- 
Nipuni Perera
Software Engineer; WSO2 Inc.; http://wso2.com
Email: nipuni@wso2.com
Git hub profile: https://github.com/nipuni
Blog : http://nipunipererablog.blogspot.com/
Mobile: +94 (71) 5626680

Re: Custom appender not identified in OSGi environment

Posted by Nipuni Piyabasi Perera <ni...@gmail.com>.
Hi,

Thank you very much for the reply.

Initially I got error [1] when I am trying to test the appender in non-OSGi
environment. This was due to not passing the correct number of parameters
to the factory method. I have updated my log4j2.xml and then could solve
the issue[1] in non-OSGi env. I have applied the same configuration to OSGi
environment as well.

Now I am seeing error[2],which seems to be a class loading issue as you
have mentioned. I did added the plugin processor in my pom.xml but still
seeing the same issue. While comparing the OSGi bundle and the non-OSGi jar
I could see that the Log4j2Plugins.dat file is missing in the OSGi bundle. I
have added the package name to configuration element as well. (as per the
pom.xml [3] I am using log4j2 2.5)

[1] Unable to invoke factory method in class ...
[2] ERROR Error processing element HTTPSocket: CLASS_NOT_FOUND
[3] Adding the plugin section of my pom.xml

<plugins>
    <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-scr-plugin</artifactId>
        <version>1.9.0</version>
        <executions>
            <execution>
                <id>generate-scr-scrdescriptor</id>
                <goals>
                    <goal>scr</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <executions>
            <execution>
                <id>log4j-plugin-processor</id>
                <goals>
                    <goal>compile</goal>
                </goals>
                <phase>process-classes</phase>
                <configuration>
                    <proc>only</proc>
                    <annotationProcessors>

<annotationProcessor>org.apache.logging.log4j.core.config.plugins.processor.PluginProcessor</annotationProcessor>
                    </annotationProcessors>
                </configuration>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
            <instructions>
                <Bundle-Vendor>Nipuni</Bundle-Vendor>

<Bundle-SymbolicName>org.my.custom.http.socket.appender</Bundle-SymbolicName>
                <Bundle-Name>org.my.custom.http.socket.appender</Bundle-Name>
                <Bundle-Version>1.0.0</Bundle-Version>
                <Import-Package>
                    org.apache.log4j.*;version="[2.5.0,3.0.0)"
                </Import-Package>
                <Export-Package>
                    org.my.custom.http.socket.appender.*;version="1.0.0"
                </Export-Package>
                <DynamicImport-Package>*</DynamicImport-Package>
            </instructions>
        </configuration>
    </plugin>

</plugins>


Thanks,
Nipuni

On Thu, Feb 4, 2016 at 4:31 AM, Remko Popma <re...@gmail.com> wrote:

> Thanks for confirming that.
>
> You may avoid the classloader issues by combining the log4j jars and your
> custom appender in a single jar.
>
> The only tricky part here is that you'd need to combine the serialized
> plugin listing files (see
> http://logging.apache.org/log4j/2.x/manual/plugins.html) from the various
> log4j jars into a single serialized plugin listing file in your superjar.
>
> See the source code for PluginProcessor for more details.
> https://logging.apache.org/log4j/2.x/log4j-core/xref/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.html
>
> Sent from my iPhone
>
> > On 2016/02/03, at 23:54, Nipuni Piyabasi Perera <ni...@gmail.com>
> wrote:
> >
> > Hi all,
> >
> > As I have mentioned in my first mail, the issue is only in the OSGi
> > environment it seems. I had mistakenly added the appender as a OSGi
> bundle
> > in the non-OSGi environment. Could resolve the issue after changing the
> > package to a jar.
> >
> > Thanks,
> > Nipuni
> >
> > On Wed, Feb 3, 2016 at 7:41 PM, Nipuni Piyabasi Perera <
> > nipuni880917@gmail.com> wrote:
> >
> >> Thanks for the prompt reply.
> >>
> >> I have first tried my custom appender in OSGi environment which gave the
> >> errors above. But I am getting the same issue in non-OSGi environment
> too.
> >> It seems an issue with custom appender.
> >> AFAIK It is plugin annotation that make the appender visible to log4j2.
> I
> >> can't find any issue in my log4j2.xml and plugin configuration of the
> >> class. Is there any other places that I need to care about?
> >>
> >> Thanks,
> >> Nipuni
> >>
> >> On Wed, Feb 3, 2016 at 7:28 PM, Ralph Goers <ralph.goers@dslextreme.com
> >
> >> wrote:
> >>
> >>> OSGi does interesting things with ClassLoaders. Log4j has to be able to
> >>> access your plugin when it is configuring. If it isn’t in an accessible
> >>> ClassLoader it won’t see it.  There have been a few people who are
> using
> >>> Log4j in an OSGi environment that have helped out with patches from
> time to
> >>> time. Perhaps one of them can help out?
> >>>
> >>> Ralph
> >>>
> >>>>> On Feb 3, 2016, at 6:07 AM, Nipuni Piyabasi Perera <
> >>>> nipuni880917@gmail.com> wrote:
> >>>>
> >>>> Hi,
> >>>>
> >>>> I have written a custom appender extending the log4j2
> AbstractAppender.
> >>> But
> >>>> I am getting a runtime error[1]. I have added the plugin annotation[2]
> >>> as
> >>>> per the manual and the custom appender class contains factory method
> >>>> createAppender() as well. I also have added the package name to
> >>>> configuration element.
> >>>> What am I missing here? Appreciate any input on this.
> >>>>
> >>>> I have my log4j2.xml file as below:
> >>>>
> >>>> <Configuration packages="org.my.custom.http.socket.appender">
> >>>>   <Appenders>
> >>>>       ...
> >>>>       <Socket name="socket" host="localhost" port="4714">
> >>>>     <!--PatternLayout pattern="[%d] %5p {%c} - %m%ex%n"/-->
> >>>>   </Socket>
> >>>>       <HTTPSocket name="HTTP_APPENDER" host="localhost" port="8888">
> >>>>  <-------------------------------------
> >>>> New Appender
> >>>>   </HTTPSocket>
> >>>>   </Appenders>
> >>>>   <Loggers>
> >>>>       <Root level="info" includeLocation="true">
> >>>>           ...
> >>>>           <AppenderRef ref="HTTP_APPENDER"/>
> >>>>       </Root>
> >>>>       <Logger name="my.custom.deployer" level="info"
> additivity="true">
> >>>>               <AppenderRef ref="socket"/>
> >>>>   </Logger>
> >>>>   </Loggers>
> >>>> </Configuration>
> >>>>
> >>>>
> >>>> [1] ERROR Appenders contains an invalid element or attribute
> >>> "HTTPSocket"
> >>>> [2] @Plugin(name = "HTTPSocket", category = "Core", elementType =
> >>> "appender",
> >>>> printObject = true)
> >>>>
> >>>> Thanks,
> >>>> Nipuni
> >>>>
> >>>> --
> >>>> Nipuni Perera
> >>>> Software Engineer; WSO2 Inc.; http://wso2.com
> >>>> Email: nipuni@wso2.com
> >>>> Git hub profile: https://github.com/nipuni
> >>>> Blog : http://nipunipererablog.blogspot.com/
> >>>> Mobile: +94 (71) 5626680
> >>>
> >>>
> >>>
> >>> ---------------------------------------------------------------------
> >>> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> >>> For additional commands, e-mail: log4j-user-help@logging.apache.org
> >>
> >>
> >> --
> >> Nipuni Perera
> >> Software Engineer; WSO2 Inc.; http://wso2.com
> >> Email: nipuni@wso2.com
> >> Git hub profile: https://github.com/nipuni
> >> Blog : http://nipunipererablog.blogspot.com/
> >> Mobile: +94 (71) 5626680
> >
> >
> >
> > --
> > Nipuni Perera
> > Software Engineer; WSO2 Inc.; http://wso2.com
> > Email: nipuni@wso2.com
> > Git hub profile: https://github.com/nipuni
> > Blog : http://nipunipererablog.blogspot.com/
> > Mobile: +94 (71) 5626680
>



-- 
Nipuni Perera
Software Engineer; WSO2 Inc.; http://wso2.com
Email: nipuni@wso2.com
Git hub profile: https://github.com/nipuni
Blog : http://nipunipererablog.blogspot.com/
Mobile: +94 (71) 5626680

Re: Custom appender not identified in OSGi environment

Posted by Remko Popma <re...@gmail.com>.
Thanks for confirming that. 

You may avoid the classloader issues by combining the log4j jars and your custom appender in a single jar. 

The only tricky part here is that you'd need to combine the serialized plugin listing files (see http://logging.apache.org/log4j/2.x/manual/plugins.html) from the various log4j jars into a single serialized plugin listing file in your superjar. 

See the source code for PluginProcessor for more details. https://logging.apache.org/log4j/2.x/log4j-core/xref/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.html

Sent from my iPhone

> On 2016/02/03, at 23:54, Nipuni Piyabasi Perera <ni...@gmail.com> wrote:
> 
> Hi all,
> 
> As I have mentioned in my first mail, the issue is only in the OSGi
> environment it seems. I had mistakenly added the appender as a OSGi bundle
> in the non-OSGi environment. Could resolve the issue after changing the
> package to a jar.
> 
> Thanks,
> Nipuni
> 
> On Wed, Feb 3, 2016 at 7:41 PM, Nipuni Piyabasi Perera <
> nipuni880917@gmail.com> wrote:
> 
>> Thanks for the prompt reply.
>> 
>> I have first tried my custom appender in OSGi environment which gave the
>> errors above. But I am getting the same issue in non-OSGi environment too.
>> It seems an issue with custom appender.
>> AFAIK It is plugin annotation that make the appender visible to log4j2. I
>> can't find any issue in my log4j2.xml and plugin configuration of the
>> class. Is there any other places that I need to care about?
>> 
>> Thanks,
>> Nipuni
>> 
>> On Wed, Feb 3, 2016 at 7:28 PM, Ralph Goers <ra...@dslextreme.com>
>> wrote:
>> 
>>> OSGi does interesting things with ClassLoaders. Log4j has to be able to
>>> access your plugin when it is configuring. If it isn’t in an accessible
>>> ClassLoader it won’t see it.  There have been a few people who are using
>>> Log4j in an OSGi environment that have helped out with patches from time to
>>> time. Perhaps one of them can help out?
>>> 
>>> Ralph
>>> 
>>>>> On Feb 3, 2016, at 6:07 AM, Nipuni Piyabasi Perera <
>>>> nipuni880917@gmail.com> wrote:
>>>> 
>>>> Hi,
>>>> 
>>>> I have written a custom appender extending the log4j2 AbstractAppender.
>>> But
>>>> I am getting a runtime error[1]. I have added the plugin annotation[2]
>>> as
>>>> per the manual and the custom appender class contains factory method
>>>> createAppender() as well. I also have added the package name to
>>>> configuration element.
>>>> What am I missing here? Appreciate any input on this.
>>>> 
>>>> I have my log4j2.xml file as below:
>>>> 
>>>> <Configuration packages="org.my.custom.http.socket.appender">
>>>>   <Appenders>
>>>>       ...
>>>>       <Socket name="socket" host="localhost" port="4714">
>>>>     <!--PatternLayout pattern="[%d] %5p {%c} - %m%ex%n"/-->
>>>>   </Socket>
>>>>       <HTTPSocket name="HTTP_APPENDER" host="localhost" port="8888">
>>>>  <-------------------------------------
>>>> New Appender
>>>>   </HTTPSocket>
>>>>   </Appenders>
>>>>   <Loggers>
>>>>       <Root level="info" includeLocation="true">
>>>>           ...
>>>>           <AppenderRef ref="HTTP_APPENDER"/>
>>>>       </Root>
>>>>       <Logger name="my.custom.deployer" level="info" additivity="true">
>>>>               <AppenderRef ref="socket"/>
>>>>   </Logger>
>>>>   </Loggers>
>>>> </Configuration>
>>>> 
>>>> 
>>>> [1] ERROR Appenders contains an invalid element or attribute
>>> "HTTPSocket"
>>>> [2] @Plugin(name = "HTTPSocket", category = "Core", elementType =
>>> "appender",
>>>> printObject = true)
>>>> 
>>>> Thanks,
>>>> Nipuni
>>>> 
>>>> --
>>>> Nipuni Perera
>>>> Software Engineer; WSO2 Inc.; http://wso2.com
>>>> Email: nipuni@wso2.com
>>>> Git hub profile: https://github.com/nipuni
>>>> Blog : http://nipunipererablog.blogspot.com/
>>>> Mobile: +94 (71) 5626680
>>> 
>>> 
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
>>> For additional commands, e-mail: log4j-user-help@logging.apache.org
>> 
>> 
>> --
>> Nipuni Perera
>> Software Engineer; WSO2 Inc.; http://wso2.com
>> Email: nipuni@wso2.com
>> Git hub profile: https://github.com/nipuni
>> Blog : http://nipunipererablog.blogspot.com/
>> Mobile: +94 (71) 5626680
> 
> 
> 
> -- 
> Nipuni Perera
> Software Engineer; WSO2 Inc.; http://wso2.com
> Email: nipuni@wso2.com
> Git hub profile: https://github.com/nipuni
> Blog : http://nipunipererablog.blogspot.com/
> Mobile: +94 (71) 5626680

Re: Custom appender not identified in OSGi environment

Posted by Nipuni Piyabasi Perera <ni...@gmail.com>.
Hi all,

As I have mentioned in my first mail, the issue is only in the OSGi
environment it seems. I had mistakenly added the appender as a OSGi bundle
in the non-OSGi environment. Could resolve the issue after changing the
package to a jar.

Thanks,
Nipuni

On Wed, Feb 3, 2016 at 7:41 PM, Nipuni Piyabasi Perera <
nipuni880917@gmail.com> wrote:

> Thanks for the prompt reply.
>
> I have first tried my custom appender in OSGi environment which gave the
> errors above. But I am getting the same issue in non-OSGi environment too.
> It seems an issue with custom appender.
> AFAIK It is plugin annotation that make the appender visible to log4j2. I
> can't find any issue in my log4j2.xml and plugin configuration of the
> class. Is there any other places that I need to care about?
>
> Thanks,
> Nipuni
>
> On Wed, Feb 3, 2016 at 7:28 PM, Ralph Goers <ra...@dslextreme.com>
> wrote:
>
>> OSGi does interesting things with ClassLoaders. Log4j has to be able to
>> access your plugin when it is configuring. If it isn’t in an accessible
>> ClassLoader it won’t see it.  There have been a few people who are using
>> Log4j in an OSGi environment that have helped out with patches from time to
>> time. Perhaps one of them can help out?
>>
>> Ralph
>>
>> > On Feb 3, 2016, at 6:07 AM, Nipuni Piyabasi Perera <
>> nipuni880917@gmail.com> wrote:
>> >
>> > Hi,
>> >
>> > I have written a custom appender extending the log4j2 AbstractAppender.
>> But
>> > I am getting a runtime error[1]. I have added the plugin annotation[2]
>> as
>> > per the manual and the custom appender class contains factory method
>> > createAppender() as well. I also have added the package name to
>> > configuration element.
>> > What am I missing here? Appreciate any input on this.
>> >
>> > I have my log4j2.xml file as below:
>> >
>> > <Configuration packages="org.my.custom.http.socket.appender">
>> >    <Appenders>
>> >        ...
>> >        <Socket name="socket" host="localhost" port="4714">
>> >      <!--PatternLayout pattern="[%d] %5p {%c} - %m%ex%n"/-->
>> >    </Socket>
>> >        <HTTPSocket name="HTTP_APPENDER" host="localhost" port="8888">
>> >   <-------------------------------------
>> > New Appender
>> >    </HTTPSocket>
>> >    </Appenders>
>> >    <Loggers>
>> >        <Root level="info" includeLocation="true">
>> >            ...
>> >            <AppenderRef ref="HTTP_APPENDER"/>
>> >        </Root>
>> >        <Logger name="my.custom.deployer" level="info" additivity="true">
>> >                <AppenderRef ref="socket"/>
>> >    </Logger>
>> >    </Loggers>
>> > </Configuration>
>> >
>> >
>> > [1] ERROR Appenders contains an invalid element or attribute
>> "HTTPSocket"
>> > [2] @Plugin(name = "HTTPSocket", category = "Core", elementType =
>> "appender",
>> > printObject = true)
>> >
>> > Thanks,
>> > Nipuni
>> >
>> > --
>> > Nipuni Perera
>> > Software Engineer; WSO2 Inc.; http://wso2.com
>> > Email: nipuni@wso2.com
>> > Git hub profile: https://github.com/nipuni
>> > Blog : http://nipunipererablog.blogspot.com/
>> > Mobile: +94 (71) 5626680
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
>> For additional commands, e-mail: log4j-user-help@logging.apache.org
>>
>>
>
>
> --
> Nipuni Perera
> Software Engineer; WSO2 Inc.; http://wso2.com
> Email: nipuni@wso2.com
> Git hub profile: https://github.com/nipuni
> Blog : http://nipunipererablog.blogspot.com/
> Mobile: +94 (71) 5626680
>



-- 
Nipuni Perera
Software Engineer; WSO2 Inc.; http://wso2.com
Email: nipuni@wso2.com
Git hub profile: https://github.com/nipuni
Blog : http://nipunipererablog.blogspot.com/
Mobile: +94 (71) 5626680

Re: Custom appender not identified in OSGi environment

Posted by Nipuni Piyabasi Perera <ni...@gmail.com>.
Thanks for the prompt reply.

I have first tried my custom appender in OSGi environment which gave the
errors above. But I am getting the same issue in non-OSGi environment too.
It seems an issue with custom appender.
AFAIK It is plugin annotation that make the appender visible to log4j2. I
can't find any issue in my log4j2.xml and plugin configuration of the
class. Is there any other places that I need to care about?

Thanks,
Nipuni

On Wed, Feb 3, 2016 at 7:28 PM, Ralph Goers <ra...@dslextreme.com>
wrote:

> OSGi does interesting things with ClassLoaders. Log4j has to be able to
> access your plugin when it is configuring. If it isn’t in an accessible
> ClassLoader it won’t see it.  There have been a few people who are using
> Log4j in an OSGi environment that have helped out with patches from time to
> time. Perhaps one of them can help out?
>
> Ralph
>
> > On Feb 3, 2016, at 6:07 AM, Nipuni Piyabasi Perera <
> nipuni880917@gmail.com> wrote:
> >
> > Hi,
> >
> > I have written a custom appender extending the log4j2 AbstractAppender.
> But
> > I am getting a runtime error[1]. I have added the plugin annotation[2] as
> > per the manual and the custom appender class contains factory method
> > createAppender() as well. I also have added the package name to
> > configuration element.
> > What am I missing here? Appreciate any input on this.
> >
> > I have my log4j2.xml file as below:
> >
> > <Configuration packages="org.my.custom.http.socket.appender">
> >    <Appenders>
> >        ...
> >        <Socket name="socket" host="localhost" port="4714">
> >      <!--PatternLayout pattern="[%d] %5p {%c} - %m%ex%n"/-->
> >    </Socket>
> >        <HTTPSocket name="HTTP_APPENDER" host="localhost" port="8888">
> >   <-------------------------------------
> > New Appender
> >    </HTTPSocket>
> >    </Appenders>
> >    <Loggers>
> >        <Root level="info" includeLocation="true">
> >            ...
> >            <AppenderRef ref="HTTP_APPENDER"/>
> >        </Root>
> >        <Logger name="my.custom.deployer" level="info" additivity="true">
> >                <AppenderRef ref="socket"/>
> >    </Logger>
> >    </Loggers>
> > </Configuration>
> >
> >
> > [1] ERROR Appenders contains an invalid element or attribute "HTTPSocket"
> > [2] @Plugin(name = "HTTPSocket", category = "Core", elementType =
> "appender",
> > printObject = true)
> >
> > Thanks,
> > Nipuni
> >
> > --
> > Nipuni Perera
> > Software Engineer; WSO2 Inc.; http://wso2.com
> > Email: nipuni@wso2.com
> > Git hub profile: https://github.com/nipuni
> > Blog : http://nipunipererablog.blogspot.com/
> > Mobile: +94 (71) 5626680
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> For additional commands, e-mail: log4j-user-help@logging.apache.org
>
>


-- 
Nipuni Perera
Software Engineer; WSO2 Inc.; http://wso2.com
Email: nipuni@wso2.com
Git hub profile: https://github.com/nipuni
Blog : http://nipunipererablog.blogspot.com/
Mobile: +94 (71) 5626680

Re: Custom appender not identified in OSGi environment

Posted by Ralph Goers <ra...@dslextreme.com>.
OSGi does interesting things with ClassLoaders. Log4j has to be able to access your plugin when it is configuring. If it isn’t in an accessible ClassLoader it won’t see it.  There have been a few people who are using Log4j in an OSGi environment that have helped out with patches from time to time. Perhaps one of them can help out?

Ralph

> On Feb 3, 2016, at 6:07 AM, Nipuni Piyabasi Perera <ni...@gmail.com> wrote:
> 
> Hi,
> 
> I have written a custom appender extending the log4j2 AbstractAppender. But
> I am getting a runtime error[1]. I have added the plugin annotation[2] as
> per the manual and the custom appender class contains factory method
> createAppender() as well. I also have added the package name to
> configuration element.
> What am I missing here? Appreciate any input on this.
> 
> I have my log4j2.xml file as below:
> 
> <Configuration packages="org.my.custom.http.socket.appender">
>    <Appenders>
>        ...
>        <Socket name="socket" host="localhost" port="4714">
>      <!--PatternLayout pattern="[%d] %5p {%c} - %m%ex%n"/-->
>    </Socket>
>        <HTTPSocket name="HTTP_APPENDER" host="localhost" port="8888">
>   <-------------------------------------
> New Appender
>    </HTTPSocket>
>    </Appenders>
>    <Loggers>
>        <Root level="info" includeLocation="true">
>            ...
>            <AppenderRef ref="HTTP_APPENDER"/>
>        </Root>
>        <Logger name="my.custom.deployer" level="info" additivity="true">
>                <AppenderRef ref="socket"/>
>    </Logger>
>    </Loggers>
> </Configuration>
> 
> 
> [1] ERROR Appenders contains an invalid element or attribute "HTTPSocket"
> [2] @Plugin(name = "HTTPSocket", category = "Core", elementType = "appender",
> printObject = true)
> 
> Thanks,
> Nipuni
> 
> -- 
> Nipuni Perera
> Software Engineer; WSO2 Inc.; http://wso2.com
> Email: nipuni@wso2.com
> Git hub profile: https://github.com/nipuni
> Blog : http://nipunipererablog.blogspot.com/
> Mobile: +94 (71) 5626680



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org