LoggerI.java
// Copyright (c) ZeroC, Inc.
package com.zeroc.Ice;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
class LoggerI implements Logger {
private final String _prefix;
private final String _formattedPrefix;
private final String _lineSeparator;
private final DateFormat _date;
private final SimpleDateFormat _time;
LoggerI(String prefix) {
_prefix = prefix;
if (!prefix.isEmpty()) {
_formattedPrefix = prefix + ": ";
} else {
_formattedPrefix = "";
}
_lineSeparator = System.getProperty("line.separator");
_date = DateFormat.getDateInstance(DateFormat.SHORT);
_time = new SimpleDateFormat(" HH:mm:ss:SSS");
}
@Override
public void print(String message) {
StringBuilder s = new StringBuilder(256);
s.append(message);
write(s, false);
}
@Override
public void trace(String category, String message) {
StringBuilder s = new StringBuilder(256);
s.append("-- ");
synchronized (this) {
Date date = new Date();
s.append(_date.format(date));
s.append(_time.format(date));
}
s.append(' ');
s.append(_formattedPrefix);
s.append(category);
s.append(": ");
s.append(message);
write(s, true);
}
@Override
public void warning(String message) {
StringBuilder s = new StringBuilder(256);
s.append("-! ");
synchronized (this) {
s.append(_date.format(new Date()));
s.append(_time.format(new Date()));
}
s.append(' ');
s.append(_formattedPrefix);
s.append("warning: ");
s.append(Thread.currentThread().getName());
s.append(": ");
s.append(message);
write(s, true);
}
@Override
public void error(String message) {
StringBuilder s = new StringBuilder(256);
s.append("!! ");
synchronized (this) {
s.append(_date.format(new Date()));
s.append(_time.format(new Date()));
}
s.append(' ');
s.append(_formattedPrefix);
s.append("error: ");
s.append(Thread.currentThread().getName());
s.append(": ");
s.append(message);
write(s, true);
}
@Override
public String getPrefix() {
return _prefix;
}
@Override
public Logger cloneWithPrefix(String prefix) {
return new LoggerI(prefix);
}
// Writes the message to the output stream.
protected void writeMessage(String message) {
System.err.print(message);
}
private void write(StringBuilder message, boolean indent) {
if (indent) {
int idx = 0;
while ((idx = message.indexOf("\n", idx)) != -1) {
message.insert(idx + 1, " ");
++idx;
}
}
message.append(_lineSeparator);
writeMessage(message.toString());
}
}