< prev index next >

src/java.base/share/classes/java/lang/System.java

Print this page

        

*** 1577,1593 **** --- 1577,1599 ---- * * @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,1634 **** --- 1623,1646 ---- * @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 >