Skip to content

Commit 69fb5f5

Browse files
committed
implement bridge
1 parent 4ae5d4f commit 69fb5f5

File tree

6 files changed

+71
-17
lines changed

6 files changed

+71
-17
lines changed

openhtmltopdf-core/src/main/java/com/openhtmltopdf/util/Diagnostic.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,28 @@ public class Diagnostic {
1414
this.args = args;
1515
this.error = hasError ? (Throwable) args[args.length - 1] : null;
1616
}
17+
18+
public LogMessageId getLogMessageId() {
19+
return logMessageId;
20+
}
21+
22+
public Level getLevel() {
23+
return level;
24+
}
25+
26+
public boolean hasError() {
27+
return error != null;
28+
}
29+
30+
public Throwable getError() {
31+
return error;
32+
}
33+
34+
public String getFormattedMessage() {
35+
return String.format(logMessageId.getMessageFormat().replaceAll("\\{\\}", "%s"), args);
36+
}
37+
38+
public Object[] getArgs() {
39+
return args;
40+
}
1741
}

openhtmltopdf-core/src/main/java/com/openhtmltopdf/util/JDKXRLogger.java

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -119,14 +119,14 @@ private static Properties retrieveLoggingProperties() {
119119
}
120120

121121
private static void initializeJDKLogManager(final Properties fsLoggingProperties) throws IOException {
122-
final List loggers = retrieveLoggers();
122+
final List<Logger> loggers = retrieveLoggers();
123123

124124
configureLoggerHandlerForwarding(fsLoggingProperties, loggers);
125125

126126
// load our properties into our log manager
127127
Enumeration keys = fsLoggingProperties.keys();
128-
Map handlers = new HashMap();
129-
Map handlerFormatterMap = new HashMap();
128+
Map<String, Logger> handlers = new HashMap<>();
129+
Map<String, String> handlerFormatterMap = new HashMap<>();
130130
while (keys.hasMoreElements()) {
131131
String key = (String) keys.nextElement();
132132
String prop = fsLoggingProperties.getProperty(key);
@@ -149,14 +149,10 @@ private static void initializeJDKLogManager(final Properties fsLoggingProperties
149149
}
150150
}
151151

152-
private static void configureLoggerHandlerForwarding(Properties fsLoggingProperties, List loggers) {
152+
private static void configureLoggerHandlerForwarding(Properties fsLoggingProperties, List<Logger> loggers) {
153153
String val = fsLoggingProperties.getProperty("use-parent-handler");
154-
155154
boolean flag = val == null ? false : Boolean.valueOf(val).booleanValue();
156-
for (Iterator it = loggers.iterator(); it.hasNext();) {
157-
Logger logger = (Logger) it.next();
158-
logger.setUseParentHandlers(flag);
159-
}
155+
loggers.forEach(l -> l.setUseParentHandlers(flag));
160156
}
161157

162158
private static void assignFormatter(Map handlers, String handlerClassName, String formatterClassName) {
@@ -183,12 +179,12 @@ private static void assignFormatter(Map handlers, String handlerClassName, Strin
183179
* Returns a List of all Logger instances used by Flying Saucer from the JDK LogManager; these will
184180
* be automatically created if they aren't already available.
185181
*/
186-
private static List retrieveLoggers() {
187-
List loggerNames = XRLog.listRegisteredLoggers();
188-
List loggers = new ArrayList(loggerNames.size());
189-
Iterator it = loggerNames.iterator();
182+
private static List<Logger> retrieveLoggers() {
183+
List<String> loggerNames = XRLog.listRegisteredLoggers();
184+
List<Logger> loggers = new ArrayList<>(loggerNames.size());
185+
Iterator<String> it = loggerNames.iterator();
190186
while (it.hasNext()) {
191-
final String ln = (String) it.next();
187+
final String ln = it.next();
192188
loggers.add(Logger.getLogger(ln));
193189
}
194190
return loggers;

openhtmltopdf-core/src/main/java/com/openhtmltopdf/util/ThreadCtx.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public static ThreadData get() {
2222
return data.get();
2323
}
2424

25-
public static void addDiagnostic(Diagnostic diagnostic) {
25+
static void addDiagnostic(Diagnostic diagnostic) {
2626
Consumer<Diagnostic> consumer = diagnosticConsumer.get();
2727
if (consumer != null) {
2828
consumer.accept(diagnostic);

openhtmltopdf-core/src/main/java/com/openhtmltopdf/util/XRLog.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ private static void log(Level level, LogMessageId logMessageId, boolean hasError
9999
}
100100
if (isLoggingEnabled()) {
101101
Diagnostic diagnostic = new Diagnostic(level, logMessageId, hasError, args);
102-
//loggerImpl.log(where, level, msg); FIXME: how to bridge with the logger in a retrocompatible way?
102+
loggerImpl.log(diagnostic);
103103
ThreadCtx.addDiagnostic(diagnostic);
104104
}
105105
}

openhtmltopdf-core/src/main/java/com/openhtmltopdf/util/XRLogger.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,19 @@ public interface XRLogger {
2828
void log(String where, Level level, String msg);
2929
void log(String where, Level level, String msg, Throwable th);
3030
void setLevel(String logger, Level level);
31+
32+
/**
33+
* Default slow (!) implementation for logging a Diagnostic object.
34+
*
35+
* Concrete implementation must/should override it.
36+
*
37+
* @param diagnostic
38+
*/
39+
default void log(Diagnostic diagnostic) {
40+
if (diagnostic.hasError()) {
41+
log(diagnostic.getLogMessageId().getWhere(), diagnostic.getLevel(), diagnostic.getFormattedMessage(), diagnostic.getError());
42+
} else {
43+
log(diagnostic.getLogMessageId().getWhere(), diagnostic.getLevel(), diagnostic.getFormattedMessage());
44+
}
45+
}
3146
}

openhtmltopdf-slf4j/src/main/java/com/openhtmltopdf/slf4j/Slf4jLogger.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.Map;
2424
import java.util.logging.Level;
2525

26+
import com.openhtmltopdf.util.Diagnostic;
2627
import org.slf4j.Logger;
2728
import org.slf4j.LoggerFactory;
2829

@@ -52,7 +53,25 @@ public class Slf4jLogger implements XRLogger {
5253

5354
private String _defaultLoggerName = DEFAULT_LOGGER_NAME;
5455
private Map<String, String> _loggerNameMap = LOGGER_NAME_MAP;
55-
56+
57+
@Override
58+
public void log(Diagnostic diagnostic) {
59+
Logger logger = LoggerFactory.getLogger(getLoggerName(diagnostic.getLogMessageId().getWhere()));
60+
Level level = diagnostic.getLevel();
61+
String msg = diagnostic.getLogMessageId().getMessageFormat();
62+
Object[] args = diagnostic.getArgs();
63+
if (level == Level.SEVERE)
64+
logger.error(msg, args);
65+
else if (level == Level.WARNING)
66+
logger.warn(msg, args);
67+
else if (level == Level.INFO || level == Level.CONFIG)
68+
logger.info(msg, args);
69+
else if (level == Level.FINE || level == Level.FINER || level == Level.FINEST)
70+
logger.debug(msg, args);
71+
else
72+
logger.info(msg, args);
73+
}
74+
5675
@Override
5776
public void log(String where, Level level, String msg) {
5877
Logger logger = LoggerFactory.getLogger(getLoggerName(where));

0 commit comments

Comments
 (0)