I'm using java.util.logging on GlassFish 4.
I'm defining my own class to initialize the LogManager
by defining the System property:
-Djava.util.logging.config.class
.
My class loads the logging.properties
file, merges it with some other property file and does some custom replacement.
The following is the relevant part of my logging.properties
file:
java.util.logging.FileHandler.pattern=C:/Work/server/glassfish/domains/domain1/logs/JMSFileHandler%g.log
java.util.logging.FileHandler.limit=2000000
java.util.logging.FileHandler.count=20
java.util.logging.FileHandler.append=true
java.util.logging.FileHandler.level=ALL
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%1$tY:%1$tm:%1$td %1$tH:%1$tM:%1$tS|%4$s: %2$s%n%5$s%n%6$s%n
I'm using the standard FileHandler
and configuring it to use the SimpleFormatter
as the formatter.
But the java.util.logging.SimpleFormatter.format
String is being totally ignored. Instead SimpleFormatter uses its default format.
Where did I go wrong?
From the SimpleFormatter docs you have to test for the following conditions:
Here is a sample test case that you can convert and run under GlassFish.
You also need to check if GlassFish replaced your SimpleFormatter with the 'com.sun.enterprise.server.logging.UniformLogFormatter'.
If you need to check access when the system properties are set you can install a security manager with the -Djava.security.debug=access,stack options to trace when the property is set.
I was assuming that the System Property
java.util.logging.config.file
is set by GF from the beginning. This is not the case.After some investigation I realized that the
LogManager
is initialized two times. In the first time that property doesn't exist, the second time it does.I was getting an error on the first initialization because I was counting on that property, therefore I didn't initialize the
LogManager
properly, causing theSimpleFormatter
to use the default format.I fixed this by changing my code and no longer counting on that System property. This solved the issue.
GF still sets the System property
java.util.logging.config.file
later.I had a similar problem, but it is fixed. I was running my code from an Ant build.xml, and my java.util.logging.FileHandler.formatter.format property was not being applied from my myLogging.properties file, although other properties were read and applied.
Are you using a JRE version < 1.6.32? Java Bug 55052 indicates that the java.util.logging.FileHandler.formatter.format property is not properly read from the properties file and applied for earlier versions of the JRE.
See: https://issues.apache.org/bugzilla/show_bug.cgi?id=55052
I still compile that project with JDK 1.6.24, but run it with JDK 1.7.0.6, and the formatting is properly read and applied to my logger.