Commit a47597db authored by Pakulin's avatar Pakulin
Browse files

Added logging to a file

parent fc83b600
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ public class DiffErrorHandler implements ErrorHandler {
		errors.add(err);
		appendDescripion(err);
		hasErrors = true;
		XmlDiff.logger.warning("Fatal error while parsing: ", err.getMessage());
	}

	@Override
@@ -49,6 +50,7 @@ public class DiffErrorHandler implements ErrorHandler {
		errors.add(err);
		appendDescripion(err);
		hasErrors = true;
		XmlDiff.logger.warning("Error while parsing: ", err.getMessage());
	}

	private synchronized void appendDescripion(Throwable err) {
@@ -59,6 +61,7 @@ public class DiffErrorHandler implements ErrorHandler {
	@Override
	public void warning(SAXParseException warn) throws SAXException {
		warnings.add(warn);
		XmlDiff.logger.warning("Error while parsing: ", warn.getMessage());
	}

	/************************************************************
+63 −0
Original line number Diff line number Diff line
package org.etsi.mts.ttcn.part9.xmldiff;

import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;

public class LogUtil {
	public final Logger logger;

	public LogUtil(Logger logger) {
		super();
		this.logger = logger;
	}

	private void _log(Level lvl, Object... args) {
		if (!logger.isLoggable(lvl)) return;
		
		StringBuilder msg = new StringBuilder();
		StackTraceElement[] trace = Thread.currentThread().getStackTrace();
		StackTraceElement caller = null;
		if (trace.length > 3) {
			caller = trace[3];
		}
		if (caller != null) {
			msg.append(caller.getFileName()).append(':');
			msg.append(caller.getLineNumber()).append(':');
//			msg.append(caller.getClassName()).append(':');
//			msg.append(caller.getMethodName()).append(':');
		}
		
		for (Object arg : args) {
			msg.append(arg);
		}
		LogRecord record = new LogRecord(lvl, msg.toString());
		if (caller != null) {
			record.setSourceClassName(caller.getClassName());
			record.setSourceMethodName(caller.getMethodName());
		}
		logger.log(record);
	}
	
	public void severe(Object... args) {
		_log(Level.SEVERE, args);
	}
	public void warning(Object... args) {
		_log(Level.WARNING, args);
	}
	public void config(Object... args) {
		_log(Level.CONFIG, args);
	}
	public void info(Object... args) {
		_log(Level.INFO, args);
	}
	public void debug(Object... args) {
		_log(Level.FINE, args);
	}
	public void debug2(Object... args) {
		_log(Level.FINER, args);
	}
	public void debug3(Object... args) {
		_log(Level.FINEST, args);
	}
}
+42 −2
Original line number Diff line number Diff line
@@ -12,6 +12,9 @@ import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -39,6 +42,20 @@ import org.xml.sax.SAXException;
 *
 */
public class XmlDiff {
	public static LogUtil logger = null;
	static {
		logger = new LogUtil(Logger.getLogger("org.etsi.mts.ttcn.part9.xmldiff"));
		try {
			FileHandler fh = new FileHandler("XmlDiff.log", true);
			fh.setLevel(Level.INFO);
			logger.logger.addHandler(fh);
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static class IgnoreSchemePrefix implements DifferenceListener {
		@Override
	    public int differenceFound(Difference difference) {
@@ -46,8 +63,12 @@ public class XmlDiff {
			if (id == DifferenceEngine.NAMESPACE_PREFIX_ID /*||
				id == DifferenceEngine.NAMESPACE_URI_ID */
					) {
				logger.debug3("Difference ignored: Namespace prefix ID", 
						difference.getDescription());
	    		return RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL;
	    	}
			logger.debug3("Difference accepted: Namespace prefix ID", 
					difference.getDescription());
	    	return RETURN_ACCEPT_DIFFERENCE;
	    }
	    
@@ -94,9 +115,11 @@ public class XmlDiff {
	public XmlDiff(File file, String[] xsdFileNames, String[] xsdSearchPath) {
		this.referenceXmlFile = file;
		if (!this.referenceXmlFile.exists()) {
			logger.severe("No such file: ", this.referenceXmlFile.getAbsolutePath());
			throw new IllegalArgumentException("No such file: " + this.referenceXmlFile.getAbsolutePath());
		}
		if (!this.referenceXmlFile.canRead()) {
			logger.severe("Can't read: ", this.referenceXmlFile.getAbsolutePath());
			throw new IllegalArgumentException("Can't read: " + this.referenceXmlFile.getAbsolutePath());
		}

@@ -110,6 +133,7 @@ public class XmlDiff {
		
		missing = findXsdFiles(xsdFileNames, xsdSearchPath);
		if (missing != null) {
			logger.severe("Missing XSD files " + missing + " in search path " + Arrays.toString(xsdSearchPath));
			throw new IllegalArgumentException("Missing XSD files " + missing + " in search path " + Arrays.toString(xsdSearchPath));
		}
		
@@ -125,18 +149,32 @@ public class XmlDiff {
	 * @throws XmlDiffError if an error occurs before or during diffing
	 */
	public boolean diff(String input, StringBuilder diffDetails) throws XmlDiffError {
		logger.debug("Looking for difference: reference file ", referenceXmlFile, ", input {", input, "}");
		InputStream stream;
		try {
			stream = new FileInputStream(referenceXmlFile);
		} catch (FileNotFoundException e) {
			logger.severe("File not found: ", referenceXmlFile.getAbsolutePath());
			throw new XmlDiffError(e); 
		}
		Reader rd = new InputStreamReader(stream, StandardCharsets.UTF_8);
		StringReader inputReader = new StringReader(input);
		return diff(rd, inputReader, diffDetails);
		boolean v = diff(rd, inputReader, diffDetails);
		if (!v) {
			logger.info("Compared reference file ", referenceXmlFile, " with input {", input, "}, found differences ", diffDetails);
		} else {
			logger.debug("No differences found between reference file ", referenceXmlFile, " and input {", input, "}");
		}
		return v;
	}

	public boolean diff(Reader input, StringBuilder diffDetails) throws XmlDiffError {
	/** Created for debugging purposes
	 * @param input
	 * @param diffDetails
	 * @return
	 * @throws XmlDiffError
	 */
	boolean diff(Reader input, StringBuilder diffDetails) throws XmlDiffError {
		InputStream stream;
		try {
			stream = new FileInputStream(referenceXmlFile);
@@ -246,9 +284,11 @@ public class XmlDiff {

	private Document parseXml(Reader inReader, String kind) throws SAXException, IOException, XmlDiffError {
		DocumentBuilder parser;
		logger.debug2("Parse ", kind);
		try {
			parser = xmlParserFactory.newDocumentBuilder();
		} catch (ParserConfigurationException e) {
			logger.severe("Failed to setup a parser for ", kind, ": ", e.getMessage());
			throw new RuntimeException("Internal error: failed to create an XML parser", e);
		}
		parser.setErrorHandler(errorHandler);