Hi,<br />
<br />
I found some docs regarding logging with JDK and log4j in BIRT, but I somehow did not find some summarizing documentation about it and still did'nt get it to work as I need it to.<br />
Maybe this thread can summarize some issues about the logging for further reference as well.<br />
<br />
<br />
<strong class='bbc'>S)</strong> First I like to state my situation which may be very common amongst BIRT developers:<br />
My report with many queries and nested tables takes a very long time, but all I can see is this in the logs (using the cmdline BIRT API - genRep.sh ; the birt output starts after " - birt call: " ... this is due to a nested call ANT->Java->exec(...)):<br />
<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>
[exec] 2010-09-03 13:10:19,092 WARN Streams:139 - birt call: Sep 3, 2010 1:10:18 PM org.eclipse.birt.report.data.adapter.impl.ModelAdapter adaptDataSet
[exec] 2010-09-03 13:10:19,093 WARN Streams:139 - birt call: WARNING: handle type: org.eclipse.birt.report.model.api.OdaDataSetHandle
[exec] 2010-09-03 13:10:19,094 WARN Streams:139 - birt call: Sep 3, 2010 1:10:19 PM org.eclipse.birt.report.data.adapter.impl.ModelAdapter adaptDataSet
[exec] 2010-09-03 13:10:19,094 WARN Streams:139 - birt call: WARNING: handle type: org.eclipse.birt.report.model.api.OdaDataSetHandle
[exec] 2010-09-03 13:10:19,094 WARN Streams:139 - birt call: Sep 3, 2010 1:10:19 PM org.eclipse.birt.report.data.adapter.impl.ModelAdapter adaptDataSet
[exec] 2010-09-03 13:10:19,095 WARN Streams:139 - birt call: WARNING: handle type: org.eclipse.birt.report.model.api.OdaDataSetHandle
[exec] 2010-09-03 13:10:19,095 WARN Streams:139 - birt call: Sep 3, 2010 1:10:19 PM org.eclipse.birt.report.data.adapter.impl.ModelAdapter adaptDataSet
[exec] 2010-09-03 13:10:19,096 WARN Streams:139 - birt call: WARNING: handle type: org.eclipse.birt.report.model.api.OdaDataSetHandle
[exec] 2010-09-03 13:10:19,096 WARN Streams:139 - birt call: Sep 3, 2010 1:10:19 PM org.eclipse.birt.report.data.adapter.impl.ModelAdapter adaptDataSet
[exec] 2010-09-03 13:10:19,097 WARN Streams:139 - birt call: WARNING: handle type: org.eclipse.birt.report.model.api.OdaDataSetHandle
[exec] 2010-09-03 13:10:19,097 WARN Streams:139 - birt call: Sep 3, 2010 1:10:19 PM org.eclipse.birt.report.data.adapter.impl.ModelAdapter adaptDataSet
[exec] 2010-09-03 13:10:19,097 WARN Streams:139 - birt call: WARNING: handle type: org.eclipse.birt.report.model.api.OdaDataSetHandle
[exec] 2010-09-03 13:10:19,098 WARN Streams:139 - birt call: Sep 3, 2010 1:10:19 PM org.eclipse.birt.report.data.adapter.impl.ModelAdapter adaptDataSet
[exec] 2010-09-03 13:10:19,098 WARN Streams:139 - birt call: WARNING: handle type: org.eclipse.birt.report.model.api.OdaDataSetHandle
[exec] 2010-09-03 13:10:19,099 WARN Streams:139 - birt call: Sep 3, 2010 1:10:19 PM org.eclipse.birt.report.data.adapter.impl.ModelAdapter adaptDataSet
[exec] 2010-09-03 13:10:19,099 WARN Streams:139 - birt call: WARNING: handle type: org.eclipse.birt.report.model.api.OdaDataSetHandle
[exec] 2010-09-03 13:10:19,100 WARN Streams:139 - birt call: Sep 3, 2010 1:10:19 PM org.eclipse.birt.report.data.adapter.impl.ModelAdapter adaptDataSet
[exec] 2010-09-03 13:10:19,100 WARN Streams:139 - birt call: WARNING: handle type: org.eclipse.birt.report.model.api.OdaDataSetHandle
[exec] 2010-09-03 13:10:19,100 WARN Streams:139 - birt call: Sep 3, 2010 1:10:19 PM org.eclipse.birt.report.data.adapter.impl.ModelAdapter adaptDataSet
[exec] 2010-09-03 13:10:19,101 WARN Streams:139 - birt call: WARNING: handle type: org.eclipse.birt.report.model.api.OdaDataSetHandle
[exec] 2010-09-03 13:10:19,101 WARN Streams:139 - birt call: Sep 3, 2010 1:10:19 PM org.eclipse.birt.report.data.adapter.impl.ModelAdapter adaptDataSet
[exec] 2010-09-03 13:10:19,102 WARN Streams:139 - birt call: WARNING: handle type: org.eclipse.birt.report.model.api.OdaDataSetHandle
[exec] 2010-09-03 13:10:19,102 WARN Streams:139 - birt call: Sep 3, 2010 1:10:19 PM org.eclipse.birt.report.data.adapter.impl.ModelAdapter adaptDataSet
[exec] 2010-09-03 13:10:19,102 WARN Streams:139 - birt call: WARNING: handle type: org.eclipse.birt.report.model.api.OdaDataSetHandle
[exec] 2010-09-03 13:10:19,103 WARN Streams:139 - birt call: Sep 3, 2010 1:10:19 PM org.eclipse.birt.report.data.adapter.impl.ModelAdapter adaptDataSet
[exec] 2010-09-03 13:10:19,103 WARN Streams:139 - birt call: WARNING: handle type: org.eclipse.birt.report.model.api.OdaDataSetHandle
[exec] 2010-09-03 13:10:19,104 WARN Streams:139 - birt call: Sep 3, 2010 1:10:19 PM org.eclipse.birt.report.data.adapter.impl.ModelAdapter adaptDataSet
[exec] 2010-09-03 13:10:19,104 WARN Streams:139 - birt call: WARNING: handle type: org.eclipse.birt.report.model.api.OdaDataSetHandle
[exec] 2010-09-03 13:10:19,105 WARN Streams:139 - birt call: Sep 3, 2010 1:10:19 PM org.eclipse.birt.report.data.adapter.impl.ModelAdapter adaptDataSet
[exec] 2010-09-03 13:10:19,105 WARN Streams:139 - birt call: WARNING: handle type: org.eclipse.birt.report.model.api.OdaDataSetHandle
[exec] 2010-09-03 13:10:19,105 WARN Streams:139 - birt call: Sep 3, 2010 1:10:19 PM org.eclipse.birt.report.data.adapter.impl.ModelAdapter adaptDataSet
[exec] 2010-09-03 13:10:19,106 WARN Streams:139 - birt call: WARNING: handle type: org.eclipse.birt.report.model.api.OdaDataSetHandle
[exec] 2010-09-03 13:10:19,106 WARN Streams:139 - birt call: Sep 3, 2010 1:10:19 PM org.eclipse.birt.report.data.adapter.impl.ModelAdapter adaptDataSet
[exec] 2010-09-03 13:10:19,107 WARN Streams:139 - birt call: WARNING: handle type: org.eclipse.birt.report.model.api.OdaDataSetHandle
[exec] 2010-09-03 13:10:19,107 WARN Streams:139 - birt call: Sep 3, 2010 1:10:19 PM org.eclipse.birt.report.data.adapter.impl.ModelAdapter adaptDataSet
[exec] 2010-09-03 13:10:19,108 WARN Streams:139 - birt call: WARNING: handle type: org.eclipse.birt.report.model.api.OdaDataSetHandle
[exec] 2010-09-03 13:10:19,108 WARN Streams:139 - birt call: Sep 3, 2010 1:10:19 PM org.eclipse.birt.report.data.adapter.impl.ModelAdapter adaptDataSet
[exec] 2010-09-03 13:10:19,108 WARN Streams:139 - birt call: WARNING: handle type: org.eclipse.birt.report.model.api.OdaDataSetHandle
[exec] 2010-09-03 13:10:21,811 WARN Streams:139 - birt call: Sep 3, 2010 1:10:21 PM org.eclipse.birt.report.engine.ir.DimensionType parserUnit
[exec] 2010-09-03 13:10:21,812 WARN Streams:139 - birt call: SEVERE: The value "auto" is invalid with the type "dimension".
[exec] 2010-09-03 13:10:22,017 WARN Streams:139 - birt call: Sep 3, 2010 1:10:21 PM org.eclipse.birt.report.engine.ir.DimensionType parserUnit
[exec] 2010-09-03 13:10:22,017 WARN Streams:139 - birt call: SEVERE: The value "auto" is invalid with the type "dimension".
[exec] 2010-09-03 13:10:22,017 WARN Streams:139 - birt call: Sep 3, 2010 1:10:21 PM org.eclipse.birt.report.engine.ir.DimensionType parserUnit
[exec] 2010-09-03 13:10:22,017 WARN Streams:139 - birt call: SEVERE: The value "auto" is invalid with the type "dimension".
[exec] 2010-09-03 13:10:22,120 WARN Streams:139 - birt call: Sep 3, 2010 1:10:22 PM org.eclipse.birt.report.engine.ir.DimensionType parserUnit
[exec] 2010-09-03 13:10:22,120 WARN Streams:139 - birt call: SEVERE: The value "auto" is invalid with the type "dimension".
[exec] 2010-09-03 13:10:22,120 WARN Streams:139 - birt call: Sep 3, 2010 1:10:22 PM org.eclipse.birt.report.engine.ir.DimensionType parserUnit
[exec] 2010-09-03 13:10:22,120 WARN Streams:139 - birt call: SEVERE: The value "auto" is invalid with the type "dimension".
[exec] 2010-09-03 13:10:41,723 WARN Streams:139 - birt call: Sep 3, 2010 1:10:41 PM org.eclipse.birt.report.engine.ir.DimensionType parserUnit
[exec] 2010-09-03 13:10:41,724 WARN Streams:139 - birt call: SEVERE: The value "auto" is invalid with the type "dimension".
[exec] 2010-09-03 13:11:47,239 WARN Streams:139 - birt call: Sep 3, 2010 1:11:47 PM org.eclipse.birt.chart.internal.datafeed.ResultSetWrapper initializeMeta
[exec] 2010-09-03 13:11:47,239 WARN Streams:139 - birt call: WARNING: Unable to determine data types from resultset
</pre>
<br />
Now I would like to know (from the logs)<br />
<br />
<strong class='bbc'>S.a</strong> ) which report items (e.g. names of tables) are processed and when => thus one could see how long a query runs<br />
<br />
<strong class='bbc'>S.b</strong> ) or even have a look at the SQL that is actually run against the database<br />
(e.g. I still don't know how BIRT internally works regarding the various query filters you can set: 1. on the SQL itself through scripting; 2. on the DataSet; 3. on the report items; ...)<br />
(or how it calculates row counts - extra query towards the database or retrieving and counting all dataset rows or ...?)<br />
<br />
<br />
<strong class='bbc'>K)</strong> These are known sources to me for configuring the logging, but it does not give me the big picture:<br />
<br />
<br />
<strong class='bbc'>K.1)</strong> Now here's something general about how to <strong class='bbc'>configure the JDK logging</strong> with <strong class='bbc'>"-Djava.util.logging.config.file=<logger.properties path>"</strong> and a <strong class='bbc'>sample logger.properties</strong> file:<br />
<a class='bbc_url' href='
http://www.javapractices.com/topic/TopicAction.do?Id=143'>http://www.javapractices.com/topic/TopicAction.do?Id=143</a><br />
- this did not help so much to produce more output (I could saw some uninteresting loglines, but that was it)<br />
- I guess a lot of the settings below are overwritten by BIRT (XMLOutputter or levels are basically ignored)<br />
<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>
# Specify the handlers to create in the root logger
# (all loggers are children of the root logger)
# The following creates two handlers
handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler
# Set the default logging level for the root logger
.level=FINEST
# Set the default logging level for new ConsoleHandler instances
java.util.logging.ConsoleHandler.level=FINEST
#java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.ConsoleHandler.formatter=java.util.logging.XMLFormatter
# Set the default logging level for new FileHandler instances
java.util.logging.FileHandler.level=FINEST
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
# Set the default formatter for new ConsoleHandler instances
# Set the default logging level for the logger named com.mycompany
org.eclipse.birt.report.model.api.level = FINEST
</pre>
<br />
<br />
<strong class='bbc'>K.2)</strong> now looking at the content of the <strong class='bbc'>BIRT</strong> distribution I could find some <strong class='bbc'>.option files</strong> that looked a bit more promising, but I was not able to produce some result with my modifications here (basically setting the default "false" values to "true" or "FINEST":<br />
<br />
- e.g. looking at birt-runtime-2_5_2/ReportEngine/plugins/eclipse-birt-core_2.5.2....jar!/.options<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>org.eclipse.birt.core/debug=true</pre>
<br />
- or e.g. modifying birt-runtime-2_5_2/ReportEngine/plugins/org.eclipse.report.data.oda.jdbc_2.5.2.../.options<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>
org.eclipse.birt.report.data.oda.jdbc/debug = true
org.eclipse.birt.report.data.oda.jdbc/traceLogging/logLevel = FINEST
org.eclipse.birt.report.data.oda.jdbc/traceLogging/logFormatterClass = java.util.logging.SimpleFormatter
org.eclipse.birt.report.data.oda.jdbc/traceLogging/logFileNamePrefix = org.eclipse.birt.report.data.oda.jdbc-log
org.eclipse.birt.report.data.oda.jdbc/traceLogging/logDirectory = .
org.eclipse.birt.report.data.oda.jdbc/JDBCDriverManager=true
org.eclipse.birt.report.data.oda.jdbc/OdaJdbcDriver=true
org.eclipse.birt.report.data.oda.jdbc/Connection=true
org.eclipse.birt.report.data.oda.jdbc/Statement=true
</pre>
<br />
<br />
<strong class='bbc'>K.3)</strong> this is an interesting source if you are wondering why <strong class='bbc'>JDK logging</strong> (SimpleFormatter) uses two lines per log record, no class path ... and how to resolve it (it's only possible using this provided class or write an own <strong class='bbc'>pattern-based</strong> one):<br />
<a class='bbc_url' href='
http://mytechrantings.blogspot.com/2007/04/pattern-formatter-for-javautillogging.html'>http://mytechrantings.blogspot.com/2007/04/pattern-formatter-for-javautillogging.html</a><br />
<br />
<br />
<strong class='bbc'>K.4)</strong> Here is some hint how one could use <strong class='bbc'>log4j</strong> for logging by writing a JDK-logging <strong class='bbc'>handler</strong> for it:<br />
<a class='bbc_url' href='
http://wiki.eclipse.org/BIRT/FAQ/Deployment#Q:_Can_I_use_Log4j_with_BIRT.3F'>http://wiki.eclipse.org/BIRT/FAQ/Deployment#Q:_Can_I_use_Log4j_with_BIRT.3F</a><br />
<br />
- I did not try it out, but will it solve the problem I have? (I only use log4j for now and know it well, but would be glad if I e.g. just had to supply a logging.properties file (JDK logging))<br />
<br />
<br />
Thanks for any help on the issues<br />
Andreas :-)