You are viewing a plain text version of this content. The canonical link for it is here.
Posted to general@logging.apache.org by sd...@apache.org on 2011/08/17 09:13:43 UTC

svn commit: r1158546 - in /logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw: LogFilePatternLayoutBuilder.java LogUI.java vfs/VFSLogFilePatternReceiver.java

Author: sdeboy
Date: Wed Aug 17 07:13:43 2011
New Revision: 1158546

URL: http://svn.apache.org/viewvc?rev=1158546&view=rev
Log:
Fix case sensitivity in configuration parsing
Fix VFS tailing, particularly with sftp (the filesystem needed to be closed)

Modified:
    logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogFilePatternLayoutBuilder.java
    logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java
    logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiver.java

Modified: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogFilePatternLayoutBuilder.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogFilePatternLayoutBuilder.java?rev=1158546&r1=1158545&r2=1158546&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogFilePatternLayoutBuilder.java (original)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogFilePatternLayoutBuilder.java Wed Aug 17 07:13:43 2011
@@ -32,6 +32,7 @@ import javax.xml.parsers.DocumentBuilder
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 
+import org.apache.log4j.chainsaw.messages.MessageCenter;
 import org.apache.log4j.helpers.OptionConverter;
 import org.apache.log4j.pattern.ClassNamePatternConverter;
 import org.apache.log4j.pattern.DatePatternConverter;
@@ -255,14 +256,14 @@ public class LogFilePatternLayoutBuilder
               Node appenderChild = appenderChildren.item(j);
               if (appenderChild.getNodeName().equals("param") && appenderChild.hasAttributes()) {
                 Node fileNameNode = appenderChild.getAttributes().getNamedItem("name");
-                if (fileNameNode != null && fileNameNode.getNodeValue().equals("file")) {
+                if (fileNameNode != null && fileNameNode.getNodeValue().toLowerCase().equals("file")) {
                   Node fileValueNode = appenderChild.getAttributes().getNamedItem("value");
                   if (fileValueNode != null) {
                     entry.put("file", fileValueNode.getNodeValue());
                   }
                 }
               }
-              if (appenderChild.getNodeName().equals("layout") && appenderChild.hasAttributes()) {
+              if (appenderChild.getNodeName().toLowerCase().equals("layout") && appenderChild.hasAttributes()) {
                 NamedNodeMap layoutAttributes = appenderChild.getAttributes();
                 Node layoutNode = layoutAttributes.getNamedItem("class");
                 if (layoutNode != null && layoutNode.getNodeValue() != null && layoutNode.getNodeValue().equals("org.apache.log4j.PatternLayout")) {
@@ -271,7 +272,7 @@ public class LogFilePatternLayoutBuilder
                     Node layoutChild = layoutChildren.item(k);
                     if (layoutChild.getNodeName().equals("param") && layoutChild.hasAttributes()) {
                       Node layoutName = layoutChild.getAttributes().getNamedItem("name");
-                      if (layoutName != null && layoutName.getNodeValue() != null && layoutName.getNodeValue().equals("ConversionPattern")) {
+                      if (layoutName != null && layoutName.getNodeValue() != null && layoutName.getNodeValue().toLowerCase().equals("conversionpattern")) {
                         Node conversionValue = layoutChild.getAttributes().getNamedItem("value");
                         if (conversionValue != null) {
                           entry.put("conversion", conversionValue.getNodeValue());
@@ -289,6 +290,7 @@ public class LogFilePatternLayoutBuilder
     } finally {
       stream.close();
     }
+    MessageCenter.getInstance().getLogger().info("getXMLFileAppenderConfiguration for file: " + file + ", result: " + result);
     return result;
   }
 }

Modified: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java?rev=1158546&r1=1158545&r2=1158546&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java (original)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java Wed Aug 17 07:13:43 2011
@@ -1427,7 +1427,7 @@ public class LogUI extends JFrame implem
   }
 
   /**
-   * Displays a dialog which will provide options for selecting a configuratino
+   * Displays a dialog which will provide options for selecting a configuration
    */
   private void showReceiverConfigurationPanel() {
     SwingUtilities.invokeLater(

Modified: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiver.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiver.java?rev=1158546&r1=1158545&r2=1158546&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiver.java (original)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiver.java Wed Aug 17 07:13:43 2011
@@ -314,9 +314,8 @@ public class VFSLogFilePatternReceiver e
           }
           vfsReader = new VFSReader();
           new Thread(vfsReader).start();
-        }
+        } else if (oldURL != null && oldURL.indexOf("://") > -1) {
         //starts with protocol://
-        if (oldURL != null && oldURL.indexOf("://") > -1) {
             int index = oldURL.indexOf("://");
             String lastPart = oldURL.substring(index + "://".length());
             int passEndIndex = lastPart.indexOf("@");
@@ -403,6 +402,7 @@ public class VFSLogFilePatternReceiver e
 
                         //fileobject was created above, release it and construct a new one
                         if (fileObject != null) {
+                            fileObject.getFileSystem().getFileSystemManager().closeFileSystem(fileObject.getFileSystem());
                             fileObject.close();
                             fileObject = null;
                         }
@@ -435,15 +435,6 @@ public class VFSLogFilePatternReceiver e
                                 rac.close();
                             }
                             try {
-                                //release file so it can be externally deleted/renamed if necessary
-                                fileObject.close();
-                                fileObject = null;
-                            }
-                            catch (IOException e)
-                            {
-                                getLogger().debug(getPath() + " - unable to close fileobject", e);
-                            }
-                            try {
                                 if (reader != null) {
                                     reader.close();
                                     reader = null;



Re: svn commit: r1158546 - in /logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw: LogFilePatternLayoutBuilder.java LogUI.java vfs/VFSLogFilePatternReceiver.java

Posted by Stefan Bodewig <bo...@apache.org>.
On 2011-08-17, Scott Deboy wrote:

> Any suggestions for where startsWith, endsWith or contains are used?

In Ant we explicitly use toLowerCase(Locale.ENGLISH) in this case.

Stefan

Re: svn commit: r1158546 - in /logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw: LogFilePatternLayoutBuilder.java LogUI.java vfs/VFSLogFilePatternReceiver.java

Posted by Curt Arnold <ca...@apache.org>.
XML is case-sensitive by design driven at least in part of the cultural variance in character equivalences. There would be no expectation that if the documentation for a schema says "file", that you could get away with "FILE" or some other variation.

Seems to be an expensive way to get a check of an attribute if that is what you are trying to do in the context.  Typically it would be done like "file".Equals(appenderChild.getAttribute("name")).




On Aug 17, 2011, at 2:54 AM, Scott Deboy wrote:

> Any suggestions for where startsWith, endsWith or contains are used?
> 
> On Wed, Aug 17, 2011 at 12:44 AM, Scott Deboy <sc...@gmail.com> wrote:
> Thanks Stefan, I'll take care of it..
> 
> 
> On Wed, Aug 17, 2011 at 12:26 AM, Stefan Bodewig <bo...@apache.org> wrote:
> Hi Scott,
> 
> I don't know why commit mails go to the general list, but this one
> caught my eye:
> 
> On 2011-08-17, <sd...@apache.org> wrote:
> 
> >                  Node fileNameNode = appenderChild.getAttributes().getNamedItem("name");
> > -                if (fileNameNode != null && fileNameNode.getNodeValue().equals("file")) {
> > +                If (fileNameNode != null && fileNameNode.getNodeValue().toLowerCase().equals("file")) {
> 
> this is a locale sensitive comparison which is likely to cause problems
> in the famous Turkish/Azeri locale case ("I".toLowerCase() != "i"
> there).
> 
> You may want to use fileNameNode.getNodeValue().equalsIgnoreCase("file")
> instead, which is safe.
> 
> Stefan
> 
> 


Re: svn commit: r1158546 - in /logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw: LogFilePatternLayoutBuilder.java LogUI.java vfs/VFSLogFilePatternReceiver.java

Posted by Scott Deboy <sc...@gmail.com>.
Any suggestions for where startsWith, endsWith or contains are used?

On Wed, Aug 17, 2011 at 12:44 AM, Scott Deboy <sc...@gmail.com> wrote:

> Thanks Stefan, I'll take care of it..
>
>
> On Wed, Aug 17, 2011 at 12:26 AM, Stefan Bodewig <bo...@apache.org>wrote:
>
>> Hi Scott,
>>
>> I don't know why commit mails go to the general list, but this one
>> caught my eye:
>>
>> On 2011-08-17, <sd...@apache.org> wrote:
>>
>> >                  Node fileNameNode =
>> appenderChild.getAttributes().getNamedItem("name");
>> > -                if (fileNameNode != null &&
>> fileNameNode.getNodeValue().equals("file")) {
>> > +                If (fileNameNode != null &&
>> fileNameNode.getNodeValue().toLowerCase().equals("file")) {
>>
>> this is a locale sensitive comparison which is likely to cause problems
>> in the famous Turkish/Azeri locale case ("I".toLowerCase() != "i"
>> there).
>>
>> You may want to use fileNameNode.getNodeValue().equalsIgnoreCase("file")
>> instead, which is safe.
>>
>> Stefan
>>
>
>

Re: svn commit: r1158546 - in /logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw: LogFilePatternLayoutBuilder.java LogUI.java vfs/VFSLogFilePatternReceiver.java

Posted by Scott Deboy <sc...@gmail.com>.
Thanks Stefan, I'll take care of it..

On Wed, Aug 17, 2011 at 12:26 AM, Stefan Bodewig <bo...@apache.org> wrote:

> Hi Scott,
>
> I don't know why commit mails go to the general list, but this one
> caught my eye:
>
> On 2011-08-17, <sd...@apache.org> wrote:
>
> >                  Node fileNameNode =
> appenderChild.getAttributes().getNamedItem("name");
> > -                if (fileNameNode != null &&
> fileNameNode.getNodeValue().equals("file")) {
> > +                If (fileNameNode != null &&
> fileNameNode.getNodeValue().toLowerCase().equals("file")) {
>
> this is a locale sensitive comparison which is likely to cause problems
> in the famous Turkish/Azeri locale case ("I".toLowerCase() != "i"
> there).
>
> You may want to use fileNameNode.getNodeValue().equalsIgnoreCase("file")
> instead, which is safe.
>
> Stefan
>

Re: svn commit: r1158546 - in /logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw: LogFilePatternLayoutBuilder.java LogUI.java vfs/VFSLogFilePatternReceiver.java

Posted by Stefan Bodewig <bo...@apache.org>.
Hi Scott,

I don't know why commit mails go to the general list, but this one
caught my eye:

On 2011-08-17, <sd...@apache.org> wrote:

>                  Node fileNameNode = appenderChild.getAttributes().getNamedItem("name");
> -                if (fileNameNode != null && fileNameNode.getNodeValue().equals("file")) {
> +                If (fileNameNode != null && fileNameNode.getNodeValue().toLowerCase().equals("file")) {

this is a locale sensitive comparison which is likely to cause problems
in the famous Turkish/Azeri locale case ("I".toLowerCase() != "i"
there).

You may want to use fileNameNode.getNodeValue().equalsIgnoreCase("file")
instead, which is safe.

Stefan