8247907: XMLDsig logging does not work
Reviewed-by: mullan
This commit is contained in:
parent
5bd6e9d790
commit
927a7287b7
@ -78,6 +78,8 @@ grant codeBase "jrt:/java.sql.rowset" {
|
|||||||
|
|
||||||
|
|
||||||
grant codeBase "jrt:/java.xml.crypto" {
|
grant codeBase "jrt:/java.xml.crypto" {
|
||||||
|
permission java.lang.RuntimePermission
|
||||||
|
"getStackWalkerWithClassReference";
|
||||||
permission java.lang.RuntimePermission
|
permission java.lang.RuntimePermission
|
||||||
"accessClassInPackage.sun.security.util";
|
"accessClassInPackage.sun.security.util";
|
||||||
permission java.util.PropertyPermission "*", "read";
|
permission java.util.PropertyPermission "*", "read";
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -24,9 +24,28 @@
|
|||||||
*/
|
*/
|
||||||
package com.sun.org.slf4j.internal;
|
package com.sun.org.slf4j.internal;
|
||||||
|
|
||||||
|
import java.security.AccessController;
|
||||||
|
import java.security.PrivilegedAction;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
// Bridge to java.util.logging.
|
// Bridge to java.util.logging.
|
||||||
public class Logger {
|
public class Logger {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* StackWalker to find out the caller of this class so that it can be
|
||||||
|
* shown in the log output. The multiple private log0() methods below
|
||||||
|
* skip exactly 2 frames -- one log0() itself, the other one of the
|
||||||
|
* public debug()/warn()/error()/trace() methods in this class --
|
||||||
|
* to find the caller.
|
||||||
|
*/
|
||||||
|
private static final StackWalker WALKER;
|
||||||
|
static {
|
||||||
|
final PrivilegedAction<StackWalker> action =
|
||||||
|
() -> StackWalker.getInstance(StackWalker.Option
|
||||||
|
.RETAIN_CLASS_REFERENCE);
|
||||||
|
WALKER = AccessController.doPrivileged(action);
|
||||||
|
}
|
||||||
|
|
||||||
private final java.util.logging.Logger impl;
|
private final java.util.logging.Logger impl;
|
||||||
|
|
||||||
public Logger(String name) {
|
public Logger(String name) {
|
||||||
@ -34,46 +53,92 @@ public class Logger {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isDebugEnabled() {
|
public boolean isDebugEnabled() {
|
||||||
return impl.isLoggable(java.util.logging.Level.FINE);
|
return impl.isLoggable(Level.FINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isTraceEnabled() {
|
public boolean isTraceEnabled() {
|
||||||
return impl.isLoggable(java.util.logging.Level.FINE);
|
return impl.isLoggable(Level.FINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void debug(String s) {
|
public void debug(String s) {
|
||||||
impl.log(java.util.logging.Level.FINE, s);
|
log0(Level.FINE, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void debug(String s, Throwable e) {
|
public void debug(String s, Throwable e) {
|
||||||
impl.log(java.util.logging.Level.FINE, s, e);
|
log0(Level.FINE, s, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void debug(String s, Object... o) {
|
public void debug(String s, Object... o) {
|
||||||
impl.log(java.util.logging.Level.FINE, s, o);
|
log0(Level.FINE, s, o);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void trace(String s) {
|
public void trace(String s) {
|
||||||
impl.log(java.util.logging.Level.FINE, s);
|
log0(Level.FINE, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void error(String s) {
|
public void error(String s) {
|
||||||
impl.log(java.util.logging.Level.SEVERE, s);
|
log0(Level.SEVERE, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void error(String s, Throwable e) {
|
public void error(String s, Throwable e) {
|
||||||
impl.log(java.util.logging.Level.SEVERE, s, e);
|
log0(Level.SEVERE, s, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void error(String s, Object... o) {
|
public void error(String s, Object... o) {
|
||||||
impl.log(java.util.logging.Level.SEVERE, s, o);
|
log0(Level.SEVERE, s, o);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void warn(String s) {
|
public void warn(String s) {
|
||||||
impl.log(java.util.logging.Level.WARNING, s);
|
log0(Level.WARNING, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void warn(String s, Throwable e) {
|
public void warn(String s, Throwable e) {
|
||||||
impl.log(java.util.logging.Level.WARNING, s, e);
|
log0(Level.WARNING, s, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void log0(Level level, String s) {
|
||||||
|
if (impl.isLoggable(level)) {
|
||||||
|
var sf = WALKER.walk(f -> f.skip(2).findFirst()).get();
|
||||||
|
impl.logp(Level.FINE, sf.getClassName(), sf.getMethodName(), s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void log0(Level level, String s, Throwable e) {
|
||||||
|
if (impl.isLoggable(level)) {
|
||||||
|
var sf = WALKER.walk(f -> f.skip(2).findFirst()).get();
|
||||||
|
impl.logp(Level.FINE, sf.getClassName(), sf.getMethodName(), s, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void log0(Level level, String s, Object... o) {
|
||||||
|
if (impl.isLoggable(level)) {
|
||||||
|
var sf = WALKER.walk(f -> f.skip(2).findFirst()).get();
|
||||||
|
impl.logp(Level.FINE, sf.getClassName(), sf.getMethodName(),
|
||||||
|
addIndex(s), o);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Translate the log4j message format "Hello {}, {}" to the
|
||||||
|
* java.util.logging format "Hello {0}, {1}".
|
||||||
|
*/
|
||||||
|
private static String addIndex(String s) {
|
||||||
|
int start = 0;
|
||||||
|
int index = 0;
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
while (true) {
|
||||||
|
int pos = s.indexOf("{}", start);
|
||||||
|
if (pos < 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
sb.append(s, start, pos + 1).append(index++);
|
||||||
|
start = pos + 1;
|
||||||
|
}
|
||||||
|
if (index == 0) {
|
||||||
|
return s;
|
||||||
|
} else {
|
||||||
|
sb.append(s, start, s.length());
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
58
test/jdk/javax/xml/crypto/dsig/LogParameters.java
Normal file
58
test/jdk/javax/xml/crypto/dsig/LogParameters.java
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import jdk.test.lib.hexdump.HexPrinter;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.util.logging.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @bug 8247907
|
||||||
|
* @library /test/lib
|
||||||
|
* @modules java.xml.crypto/com.sun.org.slf4j.internal
|
||||||
|
*/
|
||||||
|
public class LogParameters {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
ByteArrayOutputStream bout = new ByteArrayOutputStream();
|
||||||
|
Logger.getLogger(String.class.getName()).setLevel(Level.ALL);
|
||||||
|
Handler h = new StreamHandler(bout, new SimpleFormatter());
|
||||||
|
h.setLevel(Level.ALL);
|
||||||
|
Logger.getLogger(String.class.getName()).addHandler(h);
|
||||||
|
|
||||||
|
com.sun.org.slf4j.internal.Logger log =
|
||||||
|
com.sun.org.slf4j.internal.LoggerFactory.getLogger(String.class);
|
||||||
|
log.debug("I have {} {}s.", 10, "apple");
|
||||||
|
|
||||||
|
h.flush();
|
||||||
|
|
||||||
|
byte[] data = bout.toByteArray();
|
||||||
|
String s = new String(data);
|
||||||
|
if (!s.contains("LogParameters main")
|
||||||
|
|| !s.contains("FINE: I have 10 apples.")) {
|
||||||
|
HexPrinter.simple().format(data);
|
||||||
|
throw new RuntimeException("Unexpected log output: " + s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user