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 <nipuni880...@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 < > nipuni880...@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.po...@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 <nipuni880...@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 < >>>> nipuni880...@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.go...@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 < >>>>>>> nipuni880...@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: nip...@wso2.com >>>>>>> Git hub profile: https://github.com/nipuni >>>>>>> Blog : http://nipunipererablog.blogspot.com/ >>>>>>> Mobile: +94 (71) 5626680 >>>>>> >>>>>> >>>>>> >>>>>> --------------------------------------------------------------------- >>>>>> To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org >>>>>> For additional commands, e-mail: log4j-user-h...@logging.apache.org >>>>> >>>>> >>>>> -- >>>>> Nipuni Perera >>>>> Software Engineer; WSO2 Inc.; http://wso2.com >>>>> Email: nip...@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: nip...@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: nip...@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: nip...@wso2.com > Git hub profile: https://github.com/nipuni > Blog : http://nipunipererablog.blogspot.com/ > Mobile: +94 (71) 5626680