Commit d32e678f authored by Andrey Filippov's avatar Andrey Filippov

continue previous commit

parent 1e93c781
......@@ -4,7 +4,6 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
/**
......@@ -21,9 +20,6 @@ public final class LogTee {
private static volatile PrintStream fileStream = null;
private static volatile Path sceneLogPath = null;
private static volatile boolean installed = false;
// codex 2026-01-25: optional console/file noise filter
private static volatile boolean filterEnabled = false;
private static volatile String[] filterSubstrings = null;
private LogTee() {
}
......@@ -31,7 +27,6 @@ public final class LogTee {
public static void install() {
synchronized (LOCK) {
if (installed) return;
configureFilterFromProperty();
System.setOut(new PrintStream(new TeeStream(ORIGINAL_OUT), true));
System.setErr(new PrintStream(new TeeStream(ORIGINAL_ERR), true));
installed = true;
......@@ -62,55 +57,6 @@ public final class LogTee {
return sceneLogPath;
}
// codex 2026-01-25: set filters via -Delphel.logtee.filter
// Values:
// "ome" -> built-in OME/Bio-Formats noise filters
// "none" -> disable filtering
// comma-separated substrings to drop lines containing any of them
private static void configureFilterFromProperty() {
String value = System.getProperty("elphel.logtee.filter");
if (value == null || value.trim().isEmpty()) {
filterEnabled = false;
filterSubstrings = null;
return;
}
String trimmed = value.trim();
if ("none".equalsIgnoreCase(trimmed)) {
filterEnabled = false;
filterSubstrings = null;
return;
}
if ("ome".equalsIgnoreCase(trimmed)) {
filterEnabled = true;
filterSubstrings = new String[] {
"Loaded properties from: services.properties",
"Added interface interface ome.codecs.services.JAIIIOService",
"Checking comment style",
"Expected positive value for PhysicalSize",
"Parsing TIFF EXIF data",
"Populating OME metadata",
"Reading IFDs"
};
return;
}
String[] parts = trimmed.split(",");
filterEnabled = parts.length > 0;
filterSubstrings = parts;
}
private static boolean shouldFilterLine(String line) {
if (!filterEnabled || filterSubstrings == null || line == null) {
return false;
}
for (String token : filterSubstrings) {
if (token == null) continue;
String t = token.trim();
if (t.isEmpty()) continue;
if (line.contains(t)) return true;
}
return false;
}
private static void closeFileStream() {
if (fileStream != null) {
fileStream.flush();
......@@ -120,7 +66,6 @@ public final class LogTee {
private static final class TeeStream extends OutputStream {
private final PrintStream console;
private final StringBuilder buffer = new StringBuilder();
private TeeStream(PrintStream console) {
this.console = console;
......@@ -128,55 +73,23 @@ public final class LogTee {
@Override
public void write(int b) throws IOException {
if (!filterEnabled) {
console.write(b);
PrintStream fs = fileStream;
if (fs != null) fs.write(b);
return;
}
buffer.append((char) b);
if (b == '\n') {
flushBuffer();
}
console.write(b);
PrintStream fs = fileStream;
if (fs != null) fs.write(b);
}
@Override
public void write(byte[] b, int off, int len) throws IOException {
if (!filterEnabled) {
console.write(b, off, len);
PrintStream fs = fileStream;
if (fs != null) fs.write(b, off, len);
return;
}
String chunk = new String(b, off, len, StandardCharsets.UTF_8);
for (int i = 0; i < chunk.length(); i++) {
char c = chunk.charAt(i);
buffer.append(c);
if (c == '\n') {
flushBuffer();
}
}
console.write(b, off, len);
PrintStream fs = fileStream;
if (fs != null) fs.write(b, off, len);
}
@Override
public void flush() throws IOException {
if (filterEnabled && buffer.length() > 0) {
flushBuffer();
}
console.flush();
PrintStream fs = fileStream;
if (fs != null) fs.flush();
}
private void flushBuffer() {
String line = buffer.toString();
buffer.setLength(0);
if (shouldFilterLine(line)) {
return;
}
console.print(line);
PrintStream fs = fileStream;
if (fs != null) fs.print(line);
}
}
}
......@@ -90,7 +90,6 @@ public class EyesisTiff {
private static ClassList<IFormatReader> defaultClasses;
private static final Logger LOGGER =
LoggerFactory.getLogger(ClassList.class);
// codex 2026-01-25: reuse ServiceFactory/OMEXMLService to avoid repeated service init
private static ServiceFactory SERVICE_FACTORY = null;
private static OMEXMLService OME_XML_SERVICE = null;
public static ClassList<IFormatReader> getCustomReaderClasses() {
......@@ -132,7 +131,9 @@ public class EyesisTiff {
String inId = null;
inId = path;
OMEXMLService service = getOmexmlService();
OMEXMLService service = useOmexmlSingleton()
? getOmexmlService()
: createOmexmlService();
IMetadata omeMeta = null;
if (service != null) {
......@@ -256,6 +257,30 @@ public class EyesisTiff {
return OME_XML_SERVICE;
}
private static OMEXMLService createOmexmlService() {
ServiceFactory factory = null;
try {
factory = new ServiceFactory();
} catch (DependencyException e) {
e.printStackTrace();
return null;
}
try {
return factory.getInstance(OMEXMLService.class);
} catch (DependencyException e) {
e.printStackTrace();
return null;
}
}
private static boolean useOmexmlSingleton() {
String value = System.getProperty("elphel.ome.singleton");
if (value == null || value.isEmpty()) {
return false;
}
return Boolean.parseBoolean(value);
}
/*
* image width getSizeX()
image height getSizeY()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment