Log4j - configuring AsyncAppender in log4j.properties - log4j

I've seen tons of materials on how to use AsyncAppender in log4j.xml. However, I can't use a xml configuration, as I'm using Jboss Fuse - and this technology only allows .properties configuration.
Is there a way to translate the following configuration to .properties?
<appender name="async" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="500"/>
<appender-ref ref="console"/>
</appender>
I'd imagine that a solution looks somewhat like that:
log4j.appender.async=org.apache.log4j.AsyncAppender
log4j.appender.async.appenders=console

According to documentation, this is not possible in property configurer:
https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PropertyConfigurator.html
However, as I'm using Jboss Fuse and Jboss Fuse is using ops4j pax-logging, it has been solved and the configuration I submitted
log4j.appender.async.appenders=console
does work in Jboss Fuse

Related

Utility to convert log4j.xml to log4j2.xml

I am looking for the utility to convert log4j.xml to log4j2.xml syntax is there any utility available
At first I was going to respond that this cannot be done but it might be somewhat possible.
Log4j 2.13.0 added experimental support for using Log4j 1.x configuration files. If your configuration is compatible, in theory you could start up an application using a Log4j 1.x configuration and then call getRootNode() on the AbstractConfiguration. The root node is very similar to a DOM tree so walking it and converting it to XML wouldn't be too hard. However, Log4j doesn't have a tool provided to do this. Contributions are welcome!

Migrate from log4j1 to log4j2 using Log4j Bridge

I am starting to migrate an existing project from log4j1 to log4j2, i added the following maven dependencies
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
I also deleted all logj1 jar like they say on the offical migration guide, i don't know if i have to replace all log4j.xml configuration files with log4j2.xml and change the configuration to the new syntax?
If it's the case, how i can do with third parties that use log4j and configure it with log4j.xml ?
First, there can only be a single logging configuration per application. If a third party is providing a logging configuration in a jar to be included in your app that is an issue. If it is a separate third party app then I don't understand why you are porting it from Log4j 1 to Log4j 2. That should be their problem.
Yes, your dependencies are correct. As for whether to use a log4j 1 format configuration or log4j 2 I would always recommend using the log4j 2 format if you can do the work. You can certainly try to use the log4j 1 configurations by following http://logging.apache.org/log4j/2.x/manual/compatibility.html.

Convert <log4j:configuration> (in log4j 1.x) to <Configuration> (in log4j 2.x)

I need to migrate log4j 1.x XML configuration to log4j 2.x configuration XML. I couldn't find log4j2 equivalent configurations to some of the log4j1 configuration attributes. I have following line in log4j1 XML:
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" threshold="trace" reset="true" debug="false">
I want to have an equivalent log4j2 configuration, something like:
<Configuration>
I know status="debug" would enable extensive logging of log4j2 internals. But by default it is turned off as I need. Could anyone suggest the equivalent configurations for threshold="trace" and reset="true" in log4j2 XML?
Log4j2 does not support either of those attributes.

Websphere 8.5.3, SLF4j Log4j, Multiple EARs, multiple log files not generating

I have two EARs deployed to Websphere 8.5.3 with different log4j configurations. But the server is only generating one log file. If I deploy the EARs individually, the server is generating the log file , but when both the EARs are deployed only one log file is being generated by the server. I have the slf4j-log4j jars on the class path and one lo4j.properties in each EAR's WAR module.
Can anyone please help me understand whats going on with the Websphere JVM or if I am doing something wrong
log4j.rootLogger=INFO
log4j.logger.com.code.first=INFO,appOne
log4j.appender.appOne=org.apache.log4j.RollingFileAppender
log4j.appender.appOne.Name=ApplicationLogAppender
log4j.appender.appOne.File=/logPath/AppOneLog.log
log4j.appender.appOne.layout=org.apache.log4j.PatternLayout
log4j.appender.appOne.MaxFileSize=10MB
log4j.appender.appOne.MaxBackupIndex=10
log4j.appender.appOne.layout.ConversionPattern=%d %-5p %t - %m%n
log4j.appender.appOne.Threshold=DEBUG
log4j.appender.appOne.Append=false
log4j.rootLogger=INFO
log4j.logger.com.code.second=INFO,appTwo
log4j.appender.appTwo=org.apache.log4j.RollingFileAppender
log4j.appender.appTwo.Name=ApplicationLogAppender
log4j.appender.appTwo.File=/logPath/AppTwolog.log
log4j.appender.appTwo.layout=org.apache.log4j.PatternLayout
log4j.appender.appTwo.MaxFileSize=10MB
log4j.appender.appTwo.MaxBackupIndex=10
log4j.appender.appTwo.layout.ConversionPattern=%d %-5p %t - %m%n
log4j.appender.appTwo.Threshold=DEBUG
log4j.appender.appTwo.Append=false
This:
I have the slf4j-log4j jars on the class path
Does that mean the same log4j JAR is shared between the applications? There may be a problem that the log4j classes are loaded just once and shared between the applications. Can you try putting the log4j JAR in each web module WEB-INF/lib folder? That will give each of the web modules its own load of the log4j classes and may resolve the problem. (Also, since log4j classes are also used by the server, make sure to have the web modules load classes from themselves first.)
Thomas Bitonti, IBM WebSphere Application Server Development

Common.Logging for custom built log4net

How can i configure the Common.Logging->log4net which log4net built with a different .snk file?
when i want to build the Project it looks for log4net that has a PublicKeyToken=1b44e1d426115821, but mine is different. I tried to identify my log4net assembly as below. that doesn't work.
<configSections>
<sectionGroup name="common">
<section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
</sectionGroup>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net,Version=1.2.10.0, Culture=neutral, PublicKeyToken=XXXXXXXXXXXX"/>
thanks
Have you made Common.Logging reference your version of log4net and then rebuilt it (Common.Logging)?
I suspect that you will have to open the Common.Logging.Log4Net project and change the reference to log4net from the log4net that Common.Logging redistributes to your log4net. I think that you should then be able to rebuild Common.Logging and you should also be able to reference your version of log4net in the configuration.
UPDATE...
Another idea would be to write your own log4net factory adapter. Just use the exact source code from Commom.Logging's log4net factory adapter project. There is not really much code there. In your project, reference your own log4net. Configure Common.Logging to use your factory adapter. I don't know that this option is any more or less attractive than rebuilding Commom.Logging with your version of log4net, but I thought I would mention it anyway.

Resources