logging-log4j-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ralph Goers <ralph.go...@dslextreme.com>
Subject Re: Custom appender not identified in OSGi environment
Date Thu, 04 Feb 2016 18:30:02 GMT
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


Mime
View raw message