< prev index next >
src/java.base/share/classes/java/lang/System.java
Print this page
@@ -1577,17 +1577,23 @@
*
* @param name the name of the logger.
* @return an instance of {@link Logger} that can be used by the calling
* class.
* @throws NullPointerException if {@code name} is {@code null}.
+ * @throws IllegalCallerException if there is no caller frame, i.e.
+ * when this {@code getLogger} method is called from JNI
+ * and there is no Java frame on the stack.
*
* @since 9
*/
@CallerSensitive
public static Logger getLogger(String name) {
Objects.requireNonNull(name);
final Class<?> caller = Reflection.getCallerClass();
+ if (caller == null) {
+ throw new IllegalCallerException("no caller frame");
+ }
return LazyLoggers.getLogger(name, caller.getModule());
}
/**
* Returns a localizable instance of {@link Logger
@@ -1617,18 +1623,24 @@
* @param bundle a resource bundle.
* @return an instance of {@link Logger} which will use the provided
* resource bundle for message localization.
* @throws NullPointerException if {@code name} is {@code null} or
* {@code bundle} is {@code null}.
+ * @throws IllegalCallerException if there is no caller frame, i.e.
+ * when this {@code getLogger} method is called from JNI
+ * and there is no Java frame on the stack.
*
* @since 9
*/
@CallerSensitive
public static Logger getLogger(String name, ResourceBundle bundle) {
final ResourceBundle rb = Objects.requireNonNull(bundle);
Objects.requireNonNull(name);
final Class<?> caller = Reflection.getCallerClass();
+ if (caller == null) {
+ throw new IllegalCallerException("no caller frame");
+ }
final SecurityManager sm = System.getSecurityManager();
// We don't use LazyLoggers if a resource bundle is specified.
// Bootstrap sensitive classes in the JDK do not use resource bundles
// when logging. This could be revisited later, if it needs to.
if (sm != null) {
< prev index next >