I have defined a in Wildfly 8.1 because I need to log SQL statements from Hibernate 4.3.6.
here is the relevant standalone.xml part:
<logging-profiles>
<logging-profile name="myprofile">
<console-handler name="CONSOLE">
<level name="INFO"/>
<formatter>
<named-formatter name="COLOR-PATTERN"/>
</formatter>
</console-handler>
<custom-handler name="DB" class="it.x.y.jbosseapsqllogger.Oracle10SqlLogger" module="it.x.y.jbosseapsqllogger">
<level name="DEBUG"/>
<properties>
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xx"/>
<property name="username" value="xx"/>
<property name="password" value="xx"/>
</properties>
</custom-handler>
<periodic-rotating-file-handler name="FILE" autoflush="true">
<formatter>
<named-formatter name="PATTERN"/>
</formatter>
<file relative-to="jboss.server.log.dir" path="server.log"/>
<suffix value=".yyyy-MM-dd"/>
<append value="true"/>
</periodic-rotating-file-handler>
<logger category="org.hibernate.type.descriptor.sql.BasicBinder" use-parent-handlers="false">
<level name="TRACE"/>
<handlers>
<handler name="DB"/>
<handler name="FILE"/>
</handlers>
</logger>
<logger category="org.hibernate.SQL" use-parent-handlers="false">
<level name="DEBUG"/>
<handlers>
<handler name="CONSOLE"/>
<handler name="FILE"/>
</handlers>
</logger>
<root-logger>
<level name="INFO"/>
<handlers>
<handler name="CONSOLE"/>
<handler name="FILE"/>
</handlers>
</root-logger>
<formatter name="PATTERN">
<pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
</formatter>
<formatter name="COLOR-PATTERN">
<pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
</formatter>
</logging-profile>
</logging-profiles>
I correctly get the binding parameters from the org.hibernate.type.descriptor.sql.BasicBinder category but cannot see SQL statements themselves; this tells me that I am correctly referencing the profile from MANIFEST.MF:
Logging-Profile: myprofile
Notice that if I move the org.hibernate.type.descriptor.sql.BasicBinder and org.hibernate.SQL loggers out of the logging-profile to the main section, everything works as expected (but of course for every deployed app, that is what I need to avoid).
I tried and debug Hibernate and the Wildfly logging subsystem but with little results. The thing I noticed is that, org.hibernate.SQL is not a class but is a hard-coded category in SqlStatementLogger.java:
public class SqlStatementLogger {
private static final Logger LOG = CoreLogging.logger( "org.hibernate.SQL" );
private boolean logToStdout;
private boolean format;
[...]
any ideas? thanks a lot
Dependencies added by the server will not use logging-profiles or per-deployment logging configurations. All server dependencies use the system level (default) logging configuration.
A logger like this is a perfect example of why this would not work. Since dependencies are shared across all deployments a static logger would be configured based on the first deployment that invoked a log statement with that logger.