Index: src/main/org/tigris/subversion/svnant/commands/Log.java
===================================================================
--- src/main/org/tigris/subversion/svnant/commands/Log.java	(revision 4147)
+++ src/main/org/tigris/subversion/svnant/commands/Log.java	(working copy)
@@ -59,11 +59,16 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
+import java.nio.charset.Charset;
 import java.text.SimpleDateFormat;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.TimeZone;
 
 import org.tigris.subversion.svnant.SvnAntException;
 import org.tigris.subversion.svnant.SvnAntValidationException;
 import org.tigris.subversion.svnclientadapter.ISVNLogMessage;
+import org.tigris.subversion.svnclientadapter.ISVNLogMessageChangePath;
 import org.tigris.subversion.svnclientadapter.SVNRevision;
 import org.tigris.subversion.svnclientadapter.SVNUrl;
 
@@ -76,6 +81,9 @@
 	/** destination file. */ 
 	private File destFile = null;
 
+	/** file encoding */
+	private String encoding = "UTF-8";
+
 	/** url */
 	private SVNUrl url = null;
 	
@@ -85,6 +93,9 @@
     /** the stop-on-copy flag */
     private boolean stopOnCopy = true;
 
+    /** the verbose flag */
+    private boolean verbose = false;
+
     /** the --xml flag */
     private boolean asXml = true;
     
@@ -102,9 +113,9 @@
         ISVNLogMessage[] logMessages = null;
 		try {
             if (path != null) {
-            	logMessages = svnClient.getLogMessages(path, startRevision, stopRevision, stopOnCopy, false, limit);
+            	logMessages = svnClient.getLogMessages(path, startRevision, stopRevision, stopOnCopy, verbose, limit);
             } else {
-            	logMessages = svnClient.getLogMessages(url, startRevision, startRevision, stopRevision, stopOnCopy, false, limit);
+            	logMessages = svnClient.getLogMessages(url, startRevision, startRevision, stopRevision, stopOnCopy, verbose, limit);
             }
             writeLogMessages(logMessages);
 		} catch (Exception e) {
@@ -116,7 +127,7 @@
 	{		
 		BufferedWriter writer = null;
 		try {
-			writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(destFile)));
+			writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(destFile), Charset.forName(encoding)));
             
             if (asXml) {
             	writeXmlHeader(writer);
@@ -179,8 +190,15 @@
 	public void setDestFile(File destFile) {
 		this.destFile = destFile;
 	}
-	
+
 	/**
+	 * @param encoding the encoding to set
+	 */
+	public void setEncoding(String encoding) {
+		this.encoding = encoding;
+	}
+
+	/**
 	 * @param startRevision the startRevision to set
 	 */
 	public void setStartRevision(String startRevision) {
@@ -200,8 +218,15 @@
 	public void setStopOnCopy(boolean stopOnCopy) {
 		this.stopOnCopy = stopOnCopy;
 	}
-	
+
 	/**
+	 * @param verbose the verbose to set
+	 */
+	public void setVerbose(boolean verbose) {
+		this.verbose = verbose;
+	}
+
+	/**
 	 * @param asXml the asXml to set
 	 */
 	public void setAsXml(boolean asXml) {
@@ -267,6 +292,26 @@
 //		if (.length > 1) {
 //			writer.write('s');
 //		}
+		if (verbose) {
+			ISVNLogMessageChangePath[] paths = logMessage.getChangedPaths();
+			writer.newLine();
+			writer.write("Changed paths:");
+			for (int i = 0, l = paths.length; i < l; i++) {
+				ISVNLogMessageChangePath path = paths[i];
+				writer.newLine();
+				writer.write("   ");
+				writer.write(path.getAction());
+				writer.write(" ");
+				writer.write(path.getPath());
+				if (path.getCopySrcPath() != null && path.getCopySrcPath().length() > 0) {
+					writer.write(" (from ");
+					writer.write(path.getCopySrcPath());
+					writer.write(":");
+					writer.write(String.valueOf(path.getCopySrcRevision().getNumber()));
+					writer.newLine();
+				}
+			}
+		}
 		writer.newLine();
 		writer.newLine();
 		writer.write(logMessage.getMessage());
@@ -332,7 +377,9 @@
 //		</logentry>
 //		</log>
 
-		writer.write("<logentry revision=\"");
+		writer.write("<logentry");
+		writer.newLine();
+		writer.write("   revision=\"");
 		writer.write(logMessage.getRevision().toString());
 		writer.write("\">");
 		writer.newLine();
@@ -341,9 +388,42 @@
 		writer.write("</author>");
 		writer.newLine();
 		writer.write("<date>");
-		writer.write(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").format(logMessage.getDate()));
+		// writer.write(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").format(logMessage.getDate()));
+		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S'000Z'");
+		df.setTimeZone(TimeZone.getTimeZone("UTC"));
+		writer.write(df.format(logMessage.getDate()));
 		writer.write("</date>");
 		writer.newLine();
+		
+		if (verbose) {
+			writer.write("<paths>");
+			writer.newLine();
+			ISVNLogMessageChangePath[] paths = logMessage.getChangedPaths();
+			for (int i = 0, l = paths.length; i < l; i++) {
+				ISVNLogMessageChangePath path = paths[i];
+				writer.write("<path");
+				writer.newLine();
+				if (path.getCopySrcPath() != null && path.getCopySrcPath().length() > 0) {
+					writer.write("copyfrom-path=\"");
+					writer.write(path.getCopySrcPath());
+					writer.write("\"");
+					writer.newLine();
+					
+					writer.write("copyfrom-rev=\"");
+					writer.write(String.valueOf(path.getCopySrcRevision().getNumber()));
+					writer.write("\"");
+				}
+				writer.write("   action=\"");
+				writer.write(path.getAction());
+				writer.write("\">");
+				writer.write(path.getPath());
+				writer.write("</path>");
+				writer.newLine();
+			}
+			writer.write("</paths>");
+			writer.newLine();
+		}
+		
 		writer.write("<msg>");
 		writer.write(logMessage.getMessage());
 		writer.write("</msg>");
@@ -354,7 +434,7 @@
 
 	private void writeXmlHeader(BufferedWriter writer) throws IOException
 	{
-		writer.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
+		writer.write("<?xml version=\"1.0\" encoding=\"" + encoding + "\"?>");
 		writer.newLine();
 		writer.write("<log>");
 		writer.newLine();
