You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by kk...@apache.org on 2011/07/11 18:46:28 UTC

svn commit: r1145237 - in /tomcat/trunk: java/org/apache/catalina/valves/AccessLogValve.java java/org/apache/catalina/valves/LocalStrings.properties java/org/apache/juli/FileHandler.java webapps/docs/changelog.xml

Author: kkolinko
Date: Mon Jul 11 16:46:28 2011
New Revision: 1145237

URL: http://svn.apache.org/viewvc?rev=1145237&view=rev
Log:
* JULI FileHandler, AccessLogValve:
Create a directory automatically when it is specified as a part of the file name, e.g. in the prefix attribute. Earlier this happened only if it was specified with the directory attribute.
* AccessLogValve:
Log a failure if access log file cannot be opened.

Modified:
    tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java
    tomcat/trunk/java/org/apache/catalina/valves/LocalStrings.properties
    tomcat/trunk/java/org/apache/juli/FileHandler.java
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java?rev=1145237&r1=1145236&r2=1145237&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java (original)
+++ tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java Mon Jul 11 16:46:28 2011
@@ -1008,36 +1008,44 @@ public class AccessLogValve extends Valv
         }
 
         // Open the current log file
-        try {
-            String pathname;
-            // If no rotate - no need for dateStamp in fileName
-            if (rotatable) {
-                pathname = dir.getAbsolutePath() + File.separator + prefix
-                        + dateStamp + suffix;
-            } else {
-                pathname = dir.getAbsolutePath() + File.separator + prefix
-                        + suffix;
-            }
-            Charset charset = null;
-            if (encoding != null) {
-                try {
-                    charset = B2CConverter.getCharset(encoding);
-                } catch (UnsupportedEncodingException ex) {
-                    log.error(sm.getString(
-                            "accessLogValve.unsupportedEncoding", encoding), ex);
-                }
+        File pathname;
+        // If no rotate - no need for dateStamp in fileName
+        if (rotatable) {
+            pathname = new File(dir.getAbsoluteFile(), prefix + dateStamp
+                    + suffix);
+        } else {
+            pathname = new File(dir.getAbsoluteFile(), prefix + suffix);
+        }
+        File parent = pathname.getParentFile();
+        if (!parent.exists()) {
+            if (!parent.mkdirs()) {
+                log.error(sm.getString("accessLogValve.openDirFail", parent));
             }
-            if (charset == null) {
-                charset = Charset.defaultCharset();
+        }
+
+        Charset charset = null;
+        if (encoding != null) {
+            try {
+                charset = B2CConverter.getCharset(encoding);
+            } catch (UnsupportedEncodingException ex) {
+                log.error(sm.getString(
+                        "accessLogValve.unsupportedEncoding", encoding), ex);
             }
+        }
+        if (charset == null) {
+            charset = Charset.defaultCharset();
+        }
+
+        try {
             writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
                     new FileOutputStream(pathname, true), charset), 128000),
                     false);
 
-            currentLogFile = new File(pathname);
+            currentLogFile = pathname;
         } catch (IOException e) {
             writer = null;
             currentLogFile = null;
+            log.error(sm.getString("accessLogValve.openFail", pathname), e);
         }
     }
  

Modified: tomcat/trunk/java/org/apache/catalina/valves/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/LocalStrings.properties?rev=1145237&r1=1145236&r2=1145237&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/valves/LocalStrings.properties (original)
+++ tomcat/trunk/java/org/apache/catalina/valves/LocalStrings.properties Mon Jul 11 16:46:28 2011
@@ -22,7 +22,8 @@ cometConnectionManagerValve.event=Except
 cometConnectionManagerValve.listenerEvent=Exception processing session listener event
 
 # Access log valve
-accessLogValve.closeFail=Failed to close log file
+accessLogValve.openFail=Failed to open access log file [{0}]
+accessLogValve.closeFail=Failed to close access log file
 accessLogValve.openDirFail=Failed to create directory [{0}] for access logs
 accessLogValve.rotateFail=Failed to rotate access log
 accessLogValve.invalidLocale=Failed to set locale to [{0}]

Modified: tomcat/trunk/java/org/apache/juli/FileHandler.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/juli/FileHandler.java?rev=1145237&r1=1145236&r2=1145237&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/juli/FileHandler.java (original)
+++ tomcat/trunk/java/org/apache/juli/FileHandler.java Mon Jul 11 16:46:28 2011
@@ -367,8 +367,12 @@ public class FileHandler
         // Open the current log file
         writerLock.writeLock().lock();
         try {
-            String pathname = dir.getAbsolutePath() + File.separator +
-                prefix + (rotatable ? date : "") + suffix;
+            File pathname = new File(dir.getAbsoluteFile(), prefix
+                    + (rotatable ? date : "") + suffix);
+            File parent = pathname.getParentFile();
+            if (!parent.exists()) {
+                parent.mkdirs();
+            }
             String encoding = getEncoding();
             FileOutputStream fos = new FileOutputStream(pathname, true);
             OutputStream os = bufferSize>0?new BufferedOutputStream(fos,bufferSize):fos;

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1145237&r1=1145236&r2=1145237&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Mon Jul 11 16:46:28 2011
@@ -79,6 +79,15 @@
         When generating access logs for errors, log at the Context/Host level if
         a Context or Host can be identified for the failed request. (markt)
       </fix>
+      <update>
+        In JULI FileHandler and in AccessLogValve create a directory
+        automatically when it is specified as a part of the file name, e.g. in
+        the <code>prefix</code> attribute. Earlier this happened only if it was
+        specified with the <code>directory</code> attribute. (kkolinko)
+      </update>
+      <fix>
+        Log a failure if access log file cannot be opened. (kkolinko)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Coyote">
@@ -109,7 +118,7 @@
   <subsection name="Cluster">
     <changelog>
       <update>
-        Remove unnecessary serverl.xml parsing code for old cluster
+        Remove unnecessary server.xml parsing code for old cluster
         implementation that does not ship as part of Tomcat 7. (markt)
       </update>
     </changelog>



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org