Libraries:
in C:\Oracle\Middleware\Oracle_OSB1\lib\external\log4j_1.2.8.jar you find the libraries
OSB Logger code:
package com.acme.osb; public class OSBLogger { static java.util.logging.Logger loggerJava = java.util.logging.Logger.getLogger(OSBLogger.class.getName()); static org.apache.log4j.Logger loggerLog4j = org.apache.log4j.Logger.getLogger(OSBLogger.class.getName()); public static String logMessage(String message) { String messageout = "the message is " + message; System.out.println(messageout); loggerJava.log(java.util.logging.Level.SEVERE, messageout); loggerLog4j.debug("log4j" + messageout); return messageout; } public static String reloadConfiguration(String configFilename) throws Exception { String messageout = "reloading configuration from " + configFilename; System.out.println(messageout); URL url = Thread.currentThread().getContextClassLoader().getResource(configFilename); if (url == null) { throw new IllegalArgumentException("unable to locate resource " + configFilename); } String file = url.getFile(); System.out.println("file=" + file); BufferedReader in = new BufferedReader(new FileReader(file)); String text = ""; while (in.ready()) { text = in.readLine(); System.out.println(text); } //LogManager.resetConfiguration(); PropertyConfigurator.configure(url); PropertyConfigurator.configureAndWatch(file); System.out.println("done reloading"); return messageout; } }
Extra configuration:
put your log4j.xml file in $DOMAIN_HOME/config/osb
(another example here)
Log4j 1.2.13 source here
http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PropertyConfigurator.html
"The hierarchy will be reset before configuration when log4j.reset=true is present in the properties file. " but this is available only for log4j 1.2.15
http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd
This great post on logging best practices
See http://forums.oracle.com/forums/thread.jspa?threadID=932901
My conclusion: configureAndWatch doesn't simply work. I am fed up investigating on this issue. Probably upgrading to the latest version of log4j would help.
I had to add an extra logger:
<logger name="org.apache.commons" additivity="false">
<level value="WARN"/>
<appender-ref ref="FILEAPACHE"/>
</logger>
to avoid my own log file being cluttered by org.apache.commons messages (no clue why they end up in my own com.acme.osb logger).
Appendix: custom xpath definitions:
<?xml version="1.0" encoding="UTF-8"?> <xpf:xpathFunctions xmlns:xpf="http://www.bea.com/wli/sb/xpath/config"> <xpf:category id="logMessage"> <xpf:function> <xpf:name>logMessage</xpf:name> <xpf:comment>logMessage</xpf:comment> <xpf:namespaceURI>http://www.bea.com/xquery/xquery-functions</xpf:namespaceURI> <xpf:className>com.acme.osb.OSBLogger</xpf:className> <xpf:method>java.lang.String logMessage(java.lang.String)</xpf:method> <xpf:isDeterministic>true</xpf:isDeterministic> <xpf:scope>Pipeline</xpf:scope> <xpf:scope>SplitJoin</xpf:scope> </xpf:function> <xpf:function> <xpf:name>reloadConfiguration</xpf:name> <xpf:comment>reloadConfiguration</xpf:comment> <xpf:namespaceURI>http://www.bea.com/xquery/xquery-functions</xpf:namespaceURI> <xpf:className>com.acme.osb.OSBLogger</xpf:className> <xpf:method>java.lang.String reloadConfiguration(java.lang.String)</xpf:method> <xpf:isDeterministic>true</xpf:isDeterministic> <xpf:scope>Pipeline</xpf:scope> <xpf:scope>SplitJoin</xpf:scope> </xpf:function> </xpf:category> </xpf:xpathFunctions>
No comments:
Post a Comment