我很确定你不能单独使用日志(log)属性来完成这个任务. 但是,您可以编写自己的Formatter类:
import java.time.ZonedDateTime;
import java.time.ZoneId;
import java.io.StringWriter;
import java.io.PrintWriter;
import java.util.IllegalFormatException;
import java.util.logging.LogManager;
import java.util.logging.LogRecord;
import java.util.logging.SimpleFormatter;
public class NoPackageFormatter
extends SimpleFormatter {
private static final String FORMAT_PROPERTY =
"java.util.logging.SimpleFormatter.format";
private static final String DEFAULT_FORMAT = "%4$s %2$s%6$s%n";
// Java SE's default for US English locale
//private static final String DEFAULT_FORMAT =
// "%1$tb %1$td, %1$tY %1$tl:%1$tM:%1$tS %1$Tp %2$s%n%4$s: %5$s%6$s%n";
private static final ZoneId ZONE = ZoneId.systemDefault();
private static String stripPackage(String name) {
return name.substring(name.lastIndexOf('.') + 1);
}
@Override
public String format(LogRecord record) {
String formatString = System.getProperty(FORMAT_PROPERTY);
if (formatString == null) {
formatString =
LogManager.getLogManager().getProperty(FORMAT_PROPERTY);
}
if (formatString == null) {
formatString = DEFAULT_FORMAT;
}
String name = record.getLoggerName();
name = stripPackage(name);
String sourceClass = record.getSourceClassName();
String sourceMethod = record.getSourceMethodName();
String source = sourceClass != null && sourceMethod != null ?
stripPackage(sourceClass) + ' ' + sourceMethod : name;
String stackTrace = "";
if (record.getThrown() != null) {
StringWriter writer = new StringWriter();
record.getThrown().printStackTrace(new PrintWriter(writer));
stackTrace = System.lineSeparator() + writer;
}
Object[] args = {
record.getInstant().atZone(ZONE),
source,
name,
record.getLevel().getLocalizedName(),
formatMessage(record),
stackTrace
};
try {
return String.format(formatString, args);
} catch (IllegalFormatException e) {
return String.format(DEFAULT_FORMAT, args);
}
}
}
要使用它,您可以在日志(log)属性中引用它:
java.util.logging.ConsoleHandler.formatter: com.example.NoPackageFormatter
java.util.logging.FileHandler.formatter: com.example.NoPackageFormatter
java.util.logging.SocketHandler.formatter: com.example.NoPackageFormatter
或者,您可以通过编程方式设置它:
private static final Logger logger;
static {
logger = Logger.getLogger(MyApplication.class.getName());
Formatter formatter = new NoPackageFormatter();
for (Logger l = logger; l != null; l = l.getParent()) {
for (Handler handler : l.getHandlers()) {
handler.setFormatter(formatter);
}
}
}