Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Archived » BIRT » Troubles with setting java.util.logging.Logger for BIRT Runtime(How to pass java.util.logging.Logger in ngineConfig, IReportEngine, IRunTask, IRenderTask correctly)
icon4.gif  Troubles with setting java.util.logging.Logger for BIRT Runtime [message #1273725] Thu, 20 March 2014 12:47
David Basilashvili is currently offline David BasilashviliFriend
Messages: 6
Registered: February 2014
Junior Member
Hello!

In our project we use BIRT Runtime (with maven, Spring):
<dependency>
	<groupId>org.eclipse.birt.runtime</groupId>
	<artifactId>org.eclipse.birt.runtime</artifactId>
	<version>4.3.1</version>
</dependency>


I want to use log4j. For this I wrote Log4jHandler (extends Handler) which handle java.util.logging.Logger's events. Now I try to set new java.util.logging.Logger(<className>) in EngineConfig, IReportEngine, IRunTask, IRenderTask:

@Service
public class BirtPlatform implements InitializingBean, DisposableBean {
    private static final Logger LOGGER = Logger.getLogger(BirtPlatform.class.getName());//Logger.getLogger("org.eclipse.birt");

    private EngineConfig engineConfig;

    @Autowired
    Log4jHandler log4jHandler;

    @Override
    public void afterPropertiesSet() throws Exception {
        RegistryProviderFactory.releaseDefault();
        engineConfig = new EngineConfig();

        LOGGER.setLevel(Level.ALL);
        System.out.println("EngineLogger.isValidLogger(LOGGER) = " + EngineLogger.isValidLogger(LOGGER));
        LOGGER.addHandler(log4jHandler);
        engineConfig.setLogger(LOGGER);
        Platform.startup(engineConfig);
    }

    public EngineConfig getEngineConfig() {
        return engineConfig;
    }

    @Override
    public void destroy() throws Exception {
        Platform.shutdown();
        RegistryProviderFactory.releaseDefault();
    }
}


@Service
public class BirtEngine implements ReportEngine, InitializingBean, DisposableBean {
    private static final Logger LOGGER = Logger.getLogger(BirtEngine.class.getName());

    @Autowired
    Log4jHandler log4jHandler;

    @Autowired
    BirtPlatform birtPlatform;

    @Override
    public String getInfo() {
        return null;
    }

    IReportEngine reportEngine;

    @Override
    public void afterPropertiesSet() throws Exception {
        IReportEngineFactory reportEngineFactory = (IReportEngineFactory) Platform.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
        reportEngine = reportEngineFactory.createReportEngine(birtPlatform.getEngineConfig());
        LOGGER.setLevel(Level.ALL);
        LOGGER.addHandler(log4jHandler);
        reportEngine.setLogger(LOGGER);
    }

    @Override
    public void generateReport(ReportParameters reportParameters, Connection connection) throws ReportException {
        ...
        IRunTask runTask = reportEngine.createRunTask(reportRunnable);
        System.out.println("!EngineLogger.isValidLogger(LOGGER)=" + !EngineLogger.isValidLogger(LOGGER));
        runTask.setLogger(LOGGER);
        ...
        IRenderTask renderTask = reportEngine.createRenderTask(reportDocument);
        renderTask.setLogger(LOGGER);
        ...
    }

    @Override
    public void destroy() throws Exception {
        reportEngine.destroy();
    }
}


But i got warnings for EngineConfig, IReportEngine and errors for IRunTask, IRenderTask:
...
EngineLogger.isValidLogger(LOGGER) = false
20.03.2014 13:44:46 org.eclipse.birt.report.engine.api.impl.EngineLogger startEngineLogging
2014-03-20 13:44:53,161 [RMI TCP Connection(4)-127.0.0.1] WARN  [com.sbt.report.reestrbk.report_generator.engine.birt.Log4jHandler.publish(Log4jHandler.java:19)] the logger can't be the child of org.eclipse.birt
WARNING: the logger can't be the child of org.eclipse.birt
2014-03-20 13:44:53,623 [RMI TCP Connection(4)-127.0.0.1] WARN  [com.sbt.report.reestrbk.report_generator.engine.birt.Log4jHandler.publish(Log4jHandler.java:19)] the logger can't be the child of org.eclipse.birt
20.03.2014 13:44:53 org.eclipse.birt.report.engine.api.impl.EngineLogger setLogger
WARNING: the logger can't be the child of org.eclipse.birt
...
Exception in thread "Timer-0" java.lang.IllegalArgumentException: the logger can not be NULL or children or in namespace of org.eclipse.birt
            at org.eclipse.birt.report.engine.api.impl.EngineTask.setLogger(EngineTask.java:2394)
            at com.sbt.report.reestrbk.report_generator.engine.birt.BirtEngine.generateReport(BirtEngine.java:71)
            at com.sbt.report.reestrbk.report_generator.ReportGenerator$1.doInConnection(ReportGenerator.java:79)
            at com.sbt.report.reestrbk.report_generator.ReportGenerator$1.doInConnection(ReportGenerator.java:75)
            at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:342)
            at com.sbt.report.reestrbk.report_generator.ReportGenerator.generateReportInConnection(ReportGenerator.java:75)
            at com.sbt.report.reestrbk.report_generator.ReportGenerator.generateReport(ReportGenerator.java:68)
            at com.sbt.report.reestrbk.service.ReestrbkRptBuilder.build(ReestrbkRptBuilder.java:72)
            at com.sbt.report.reestrbk.service.sched.SchedulableTask.run(SchedulableTask.java:26)
            at java.util.TimerThread.mainLoop(Timer.java:512)
            at java.util.TimerThread.run(Timer.java:462)
...


Message "the logger can't be the child of org.eclipse.birt" I found in source code (grepcode.com/file/repo1.maven.org/maven2/org.eclipse.birt.runtime/org.eclipse.birt.runtime/4.3.1/org/eclipse/birt/report/engine/api/impl/EngineLogger.java#EngineLogger:)

85     if ( logger != null )
86 		{
87 			if ( !isValidLogger( logger ) )
88 			{
89 				logger.log( Level.WARNING,
90 						"the logger can't be the child of org.eclipse.birt" );
91 			}
92 			else
93 			{
94 				AdapterHandler adapter = getAdapterHandler( );
95 				adapter.setUserLogger( logger );
96 			}
97 		}


Message "the logger can not be NULL or children or in namespace of org.eclipse.birt" I found in source (grepcode.com/file/repo1.maven.org/maven2/org.eclipse.birt.runtime/org.eclipse.birt.runtime/4.3.1/org/eclipse/birt/report/engine/api/impl/EngineTask.java?av=f:
)
2390	public void More ...setLogger( Logger logger )
2391	{
2392		if ( logger == null || !EngineLogger.isValidLogger( logger ) )
2393		{
2394			throw new IllegalArgumentException(
2395					"the logger can not be NULL or children or in namespace of org.eclipse.birt" );
2396		}
2397		EngineLogger.setThreadLogger( logger );
2398		this.log = logger;
2399		this.executionContext.setLogger( logger );
2400	}


Function isValidLogger:
145	public static boolean More ...isValidLogger( Logger logger )
146	{
147		while ( logger != null )
148		{
149			for ( Logger rootlogger : ROOT_LOGGERS )
150			{
151				if ( logger == rootlogger )
152				{
153					return true;
154				}
155			}
156			logger = logger.getParent( );
157		}
158		return false;
159	}


When I set Logger.getLogger(BirtPlatform.class.getName()), I got "EngineLogger.isValidLogger(LOGGER) = false" and warnings "the logger can't be the child of org.eclipse.birt".

When I set Logger.getLogger("org.eclipse.birt"), I got "EngineLogger.isValidLogger(LOGGER) = true" without warnings.

How to pass java.util.logging.Logger in ngineConfig, IReportEngine, IRunTask, IRenderTask correctly?

Help me please!

Previous Topic:How to Show Image with a dynamic Image (MIME-String)?
Next Topic:birt and tnsnames
Goto Forum:
  


Current Time: Fri Apr 26 21:12:43 GMT 2024

Powered by FUDForum. Page generated in 0.02838 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top