Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 351460 - EclipseLogAppender is not fail safe in standalone execution
Summary: EclipseLogAppender is not fail safe in standalone execution
Status: CLOSED FIXED
Alias: None
Product: TMF
Classification: Modeling
Component: Xtext (show other bugs)
Version: 2.0.0   Edit
Hardware: PC Mac OS X - Carbon (unsup.)
: P3 normal (vote)
Target Milestone: SR2   Edit
Assignee: Project Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-07-07 10:55 EDT by Karsten Thoms CLA
Modified: 2017-09-19 18:08 EDT (History)
3 users (show)

See Also:
sebastian.zarnekow: indigo+


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Karsten Thoms CLA 2011-07-07 10:55:52 EDT
When executing an Xtext workflow in standalone Java mode and with org.eclipse.xtext.logging on the classpath (screnario: Maven with Tycho and Fornax Workflow Plugin), the logging properties from the logging fragment are taken and the EclipseLogAppender used.

Since it is standalone mode, Platform.getBundles() will return null, which is not checked in the getLog() method.

I propose to check for null and also improve the error message:
--------------------------------------------
   Bundle[] bundles = Platform.getBundles(ORG_APACHE_LOG4J,"1.2.15");
   if (bundles==null || bundles.length==0)
      throw new IllegalStateException("Host bundle "+ORG_APACHE_LOG4J+" 1.2.15 not found!");
--------------------------------------------

Also isDoLog() should check 'log==null'

--------------------------------------------
private boolean isDoLog(Level level) {
  return log!=null && (level.toInt() >= Priority.WARN_INT);
}
--------------------------------------------


Stacktrace:
--------------------------------------------
java.lang.NullPointerException
[WARNING]       at org.eclipse.xtext.logging.EclipseLogAppender.getLog(EclipseLogAppender.java:33)
[WARNING]       at org.eclipse.xtext.logging.EclipseLogAppender.append(EclipseLogAppender.java:46)
[WARNING]       at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
[WARNING]       at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
[WARNING]       at org.apache.log4j.Category.callAppenders(Category.java:206)
[WARNING]       at org.apache.log4j.Category.forcedLog(Category.java:391)
[WARNING]       at org.apache.log4j.Category.log(Category.java:856)
[WARNING]       at org.apache.commons.logging.impl.Log4JLogger.warn(Log4JLogger.java:222)
[WARNING]       at org.eclipse.emf.mwe.utils.GenModelHelper.registerGenModel(GenModelHelper.java:70)
[WARNING]       at org.eclipse.xtext.generator.ecore.EcoreGeneratorFragment.getSaveAndReconcileGenModel(EcoreGeneratorFragment.java:587)
[WARNING]       at org.eclipse.xtext.generator.ecore.EcoreGeneratorFragment.generate(EcoreGeneratorFragment.java:182)
[WARNING]       at org.eclipse.xtext.generator.CompositeGeneratorFragment.generate(CompositeGeneratorFragment.java:81)
[WARNING]       at org.eclipse.xtext.generator.LanguageConfig.generate(LanguageConfig.java:69)
[WARNING]       at org.eclipse.xtext.generator.Generator.generate(Generator.java:351)
[WARNING]       at org.eclipse.xtext.generator.Generator.invokeInternal(Generator.java:125)
[WARNING]       at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:126)
[WARNING]       at org.eclipse.emf.mwe.core.lib.Mwe2Bridge.invoke(Mwe2Bridge.java:34)
[WARNING]       at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:201)
[WARNING]       at org.eclipse.emf.mwe2.runtime.workflow.AbstractCompositeWorkflowComponent.invoke(AbstractCompositeWorkflowComponent.java:35)
[WARNING]       at org.eclipse.emf.mwe2.runtime.workflow.Workflow.run(Workflow.java:19)
[WARNING]       at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:97)
[WARNING]       at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:73)
[WARNING]       at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.run(Mwe2Launcher.java:76)
[WARNING]       at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.main(Mwe2Launcher.java:35)
Comment 1 Karsten Thoms CLA 2011-09-05 13:31:27 EDT
Workaround:
- add log4j.properties without EclipseLogAppender to the project
- configure with system property log4j.configuration

Example log4j.properties file:
=======================================
# Root logger configuration. Don't change this.
log4j.rootLogger=DEBUG, default

# This appender will write to the stdout console
log4j.appender.default=org.apache.log4j.ConsoleAppender
log4j.appender.default.layout=org.apache.log4j.PatternLayout
log4j.appender.default.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

# This appender will write to the Eclipse error log. It will ONLY log ERROR and FATAL messages.
log4j.appender.eclipse=org.eclipse.xtext.logging.EclipseLogAppender
log4j.appender.eclipse.layout=org.apache.log4j.PatternLayout
log4j.appender.eclipse.layout.ConversionPattern=%c %x - %m%n

# Configure your log categories below:
log4j.logger.org.eclipse=WARN
log4j.logger.org.eclipse.xtext=WARN
log4j.logger.org.eclipse.xtext.ui.editor.outline=WARN
log4j.logger.org.eclipse.xtext.ui.editor.contentassist.antlr.internal=WARN
=======================================


Example configuration in Maven:
=======================================
<plugin>
  <groupId>org.fornax.toolsupport</groupId>
  <artifactId>fornax-oaw-m2-plugin</artifactId>
  <executions>
    <execution>
      <id>xtext</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>run-workflow</goal>
      </goals>
      <configuration>
        <workflowEngine>mwe2</workflowEngine>
        <workflowDescriptor>org.xspray.xtext.GenerateXspray</workflowDescriptor>
        <timestampFileName>xtext-generator.timestamp</timestampFileName>
        <jvmSettings>
          <fork>true</fork>
          <jvmArgs>
            <jvmArg>-Xms100m</jvmArg>
            <jvmArg>-Xmx700m</jvmArg>
            <jvmArg>-XX:MaxPermSize=128m</jvmArg>
            <jvmArg>-Dlog4j.configuration=file:${basedir}/log4j.properties</jvmArg>
          </jvmArgs>
        </jvmSettings>
      </configuration>
    </execution>
  </executions>
</plugin>

=======================================
Comment 2 Sebastian Zarnekow CLA 2011-09-30 04:34:53 EDT
We should apply the suggested changes to simplify the automated build setup.
Comment 3 Holger Schill CLA 2011-09-30 04:38:17 EDT
+1
Comment 4 Sven Efftinge CLA 2011-10-17 04:59:15 EDT
pushed to master
Comment 5 Karsten Thoms CLA 2017-09-19 17:58:12 EDT
Closing all bugs that were set to RESOLVED before Neon.0
Comment 6 Karsten Thoms CLA 2017-09-19 18:08:58 EDT
Closing all bugs that were set to RESOLVED before Neon.0