Community
Participate
Working Groups
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)
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> =======================================
We should apply the suggested changes to simplify the automated build setup.
+1
pushed to master
Closing all bugs that were set to RESOLVED before Neon.0