The FileHandler doesn't support generating file names by package name from the LogManager. The com.sun.enterprise.server.logging.GFFileHandler doesn't seen to support it either.
If you want to generate a file name per each package you can create a custom Handler that will create and close a FileHandler on each publish.
public class PackageNameFileHandler extends Handler {
@Override
public synchronized void publish(LogRecord r) {
if (isLoggable(r)) {
try {
FileHandler h = new FileHandler(fileName(r), Integer.MAX_VALUE, 1, true);
try {
h.setLevel(getLevel());
h.setEncoding(getEncoding());
h.setFilter(null);
h.setFormatter(getFormatter());
h.setErrorManager(getErrorManager());
h.publish(r);
} finally {
h.close();
}
} catch (IOException | SecurityException jm) {
this.reportError(null, jm, ErrorManager.WRITE_FAILURE);
}
}
}
@Override
public void flush() {
}
@Override
public void close() {
super.setLevel(Level.OFF);
}
private String fileName(LogRecord r) {
try {
String cn = r.getSourceClassName();
if (cn == null) {
cn = String.valueOf(r.getLoggerName());
}
//Find package name.
int index = cn.lastIndexOf('.');
if (index > -1) {
cn = cn.substring(0, index);
}
return new File(cn).getCanonicalPath();
} catch (IOException invalidFileName) {
return "unknown.log";
}
}}
A much faster version would create a pool of handlers on demand but, this is easier to write up.