This is an automated email from the ASF dual-hosted git repository.

remm pushed a commit to branch 8.5.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/8.5.x by this push:
     new c3e62032d5 Localization for debug strings
c3e62032d5 is described below

commit c3e62032d5928b8951b0742ca02eb87d9a546b9b
Author: remm <r...@apache.org>
AuthorDate: Mon Feb 12 11:19:54 2024 +0100

    Localization for debug strings
    
    Since debug is now more significant.
---
 .../catalina/authenticator/AuthenticatorBase.java  | 33 +++++++++---------
 .../catalina/authenticator/FormAuthenticator.java  | 40 +++++++++++-----------
 .../catalina/authenticator/LocalStrings.properties | 12 +++++++
 .../authenticator/NonLoginAuthenticator.java       |  4 +--
 .../catalina/authenticator/SSLAuthenticator.java   |  8 ++---
 .../apache/catalina/connector/CoyoteAdapter.java   |  4 +--
 java/org/apache/catalina/core/ContainerBase.java   |  2 +-
 .../apache/catalina/core/LocalStrings.properties   |  6 ++++
 .../catalina/core/NamingContextListener.java       | 16 +++++----
 .../core/ThreadLocalLeakPreventionListener.java    |  4 ++-
 .../catalina/filters/CsrfPreventionFilter.java     | 40 ++++++++++------------
 .../catalina/filters/LocalStrings.properties       |  4 +++
 .../catalina/ha/session/ClusterManagerBase.java    |  4 ++-
 .../catalina/ha/session/LocalStrings.properties    |  2 ++
 .../apache/catalina/ha/tcp/LocalStrings.properties |  3 ++
 .../apache/catalina/ha/tcp/SimpleTcpCluster.java   |  8 ++---
 .../mbeans/GlobalResourcesLifecycleListener.java   |  2 +-
 .../apache/catalina/mbeans/LocalStrings.properties |  1 +
 .../catalina/realm/JAASMemoryLoginModule.java      |  2 +-
 java/org/apache/catalina/realm/JNDIRealm.java      |  8 ++---
 .../apache/catalina/realm/LocalStrings.properties  |  2 ++
 java/org/apache/catalina/realm/RealmBase.java      |  2 +-
 java/org/apache/catalina/session/FileStore.java    |  2 +-
 .../catalina/session/LocalStrings.properties       |  3 ++
 java/org/apache/catalina/session/ManagerBase.java  |  8 ++---
 .../apache/catalina/session/StandardManager.java   |  4 +--
 java/org/apache/catalina/startup/Catalina.java     |  6 ++--
 .../org/apache/catalina/startup/ContextConfig.java |  7 ++--
 .../startup/CopyParentClassLoaderRule.java         |  4 +--
 java/org/apache/catalina/startup/HostConfig.java   |  4 +--
 .../catalina/startup/LocalStrings.properties       |  4 +++
 .../group/interceptors/LocalStrings.properties     |  1 +
 .../group/interceptors/TcpFailureDetector.java     |  2 +-
 .../group/interceptors/TcpPingInterceptor.java     |  4 +--
 .../tribes/membership/LocalStrings.properties      |  6 ++++
 .../tribes/membership/McastServiceImpl.java        | 18 ++++++----
 .../tribes/tipis/AbstractReplicatedMap.java        | 12 +++----
 .../catalina/tribes/tipis/LocalStrings.properties  |  6 +++-
 .../catalina/tribes/tipis/ReplicatedMap.java       |  2 +-
 .../tribes/transport/LocalStrings.properties       |  1 +
 .../catalina/tribes/transport/ReceiverBase.java    |  2 +-
 .../tribes/transport/nio/LocalStrings.properties   |  3 ++
 .../catalina/tribes/transport/nio/NioReceiver.java | 10 +++---
 .../tribes/transport/nio/NioReplicationTask.java   |  2 +-
 .../apache/catalina/valves/ErrorReportValve.java   |  2 +-
 .../catalina/valves/ExtendedAccessLogValve.java    |  4 +--
 .../catalina/valves/JsonErrorReportValve.java      |  2 +-
 .../catalina/valves/LoadBalancerDrainingValve.java |  5 ++-
 .../apache/catalina/valves/LocalStrings.properties |  7 ++++
 .../catalina/valves/ProxyErrorReportValve.java     |  2 +-
 .../catalina/valves/StuckThreadDetectionValve.java |  2 +-
 .../valves/rewrite/LocalStrings.properties         |  2 ++
 .../catalina/valves/rewrite/RewriteValve.java      |  7 ++--
 java/org/apache/coyote/AbstractProcessor.java      |  2 +-
 java/org/apache/coyote/LocalStrings.properties     |  1 +
 java/org/apache/coyote/ajp/AjpProcessor.java       |  4 +--
 java/org/apache/coyote/ajp/LocalStrings.properties |  2 ++
 .../coyote/http11/filters/GzipOutputFilter.java    |  4 ++-
 .../coyote/http11/filters/LocalStrings.properties  |  2 ++
 java/org/apache/jasper/JspC.java                   | 11 +++---
 java/org/apache/jasper/compiler/AntCompiler.java   |  3 +-
 java/org/apache/jasper/compiler/Compiler.java      |  3 +-
 java/org/apache/jasper/compiler/JDTCompiler.java   |  3 +-
 java/org/apache/jasper/compiler/JspReader.java     |  2 +-
 .../optimizations/ELInterpreterTagSetters.java     | 19 +++++-----
 .../jasper/resources/LocalStrings.properties       |  9 +++++
 .../apache/tomcat/util/buf/LocalStrings.properties |  3 ++
 java/org/apache/tomcat/util/buf/StringCache.java   |  6 ++--
 .../tomcat/util/http/LocalStrings.properties       |  1 +
 .../tomcat/util/http/Rfc6265CookieProcessor.java   |  2 +-
 .../tomcat/util/threads/LocalStrings.properties    |  2 ++
 .../org/apache/tomcat/util/threads/TaskThread.java |  4 ++-
 72 files changed, 262 insertions(+), 172 deletions(-)

diff --git a/java/org/apache/catalina/authenticator/AuthenticatorBase.java 
b/java/org/apache/catalina/authenticator/AuthenticatorBase.java
index 5c4f533eca..b4eb94ebfd 100644
--- a/java/org/apache/catalina/authenticator/AuthenticatorBase.java
+++ b/java/org/apache/catalina/authenticator/AuthenticatorBase.java
@@ -442,8 +442,8 @@ public abstract class AuthenticatorBase extends ValveBase 
implements Authenticat
     @Override
     public void invoke(Request request, Response response) throws IOException, 
ServletException {
 
-        if (log.isDebugEnabled()) {
-            log.debug("Security checking request " + request.getMethod() + " " 
+ request.getRequestURI());
+        if (log.isTraceEnabled()) {
+            log.trace("Security checking request " + request.getMethod() + " " 
+ request.getRequestURI());
         }
 
         // Have we got a cached authenticated Principal to record?
@@ -454,8 +454,8 @@ public abstract class AuthenticatorBase extends ValveBase 
implements Authenticat
                 if (session != null) {
                     principal = session.getPrincipal();
                     if (principal != null) {
-                        if (log.isDebugEnabled()) {
-                            log.debug("We have cached auth type " + 
session.getAuthType() + " for principal " +
+                        if (log.isTraceEnabled()) {
+                            log.trace("We have cached auth type " + 
session.getAuthType() + " for principal " +
                                     principal);
                         }
                         request.setAuthType(session.getAuthType());
@@ -477,8 +477,8 @@ public abstract class AuthenticatorBase extends ValveBase 
implements Authenticat
         }
 
         if (constraints == null && !context.getPreemptiveAuthentication() && 
!authRequired) {
-            if (log.isDebugEnabled()) {
-                log.debug("Not subject to any constraint");
+            if (log.isTraceEnabled()) {
+                log.trace("Not subject to any constraint");
             }
             getNext().invoke(request, response);
             return;
@@ -504,7 +504,7 @@ public abstract class AuthenticatorBase extends ValveBase 
implements Authenticat
             }
             if (!realm.hasUserDataPermission(request, response, constraints)) {
                 if (log.isDebugEnabled()) {
-                    log.debug("Failed hasUserDataPermission() test");
+                    
log.debug(sm.getString("authenticator.userDataPermissionFail"));
                 }
                 /*
                  * ASSERT: Authenticator already set the appropriate HTTP 
status code, so we do not have to do anything
@@ -543,7 +543,7 @@ public abstract class AuthenticatorBase extends ValveBase 
implements Authenticat
 
         if ((authRequired || constraints != null) && 
allowCorsPreflightBypass(request)) {
             if (log.isDebugEnabled()) {
-                log.debug("CORS Preflight request bypassing authentication");
+                log.debug(sm.getString("authenticator.corsBypass"));
             }
             getNext().invoke(request, response);
             return;
@@ -564,7 +564,7 @@ public abstract class AuthenticatorBase extends ValveBase 
implements Authenticat
             if (jaspicProvider == null && !doAuthenticate(request, response) ||
                     jaspicProvider != null && !authenticateJaspic(request, 
response, jaspicState, false)) {
                 if (log.isDebugEnabled()) {
-                    log.debug("Failed authenticate() test");
+                    
log.debug(sm.getString("authenticator.authenticationFail"));
                 }
                 /*
                  * ASSERT: Authenticator already set the appropriate HTTP 
status code, so we do not have to do anything
@@ -581,7 +581,7 @@ public abstract class AuthenticatorBase extends ValveBase 
implements Authenticat
             }
             if (!realm.hasResourcePermission(request, response, constraints, 
this.context)) {
                 if (log.isDebugEnabled()) {
-                    log.debug("Failed accessControl() test");
+                    log.debug(sm.getString("authenticator.userPermissionFail", 
request.getUserPrincipal().getName()));
                 }
                 /*
                  * ASSERT: AccessControl method has already set the 
appropriate HTTP status code, so we do not have to
@@ -814,8 +814,8 @@ public abstract class AuthenticatorBase extends ValveBase 
implements Authenticat
 
         if (authStatus == AuthStatus.SUCCESS) {
             GenericPrincipal principal = getPrincipal(client);
-            if (log.isDebugEnabled()) {
-                log.debug("Authenticated user: " + principal);
+            if (log.isTraceEnabled()) {
+                log.trace("Authenticated user: " + principal);
             }
             if (principal == null) {
                 request.setUserPrincipal(null);
@@ -976,8 +976,7 @@ public abstract class AuthenticatorBase extends ValveBase 
implements Authenticat
             associate(ssoId, request.getSessionInternal(true));
 
             if (log.isDebugEnabled()) {
-                log.debug("Reauthenticated cached principal '" + 
request.getUserPrincipal().getName() +
-                        "' with auth type '" + request.getAuthType() + "'");
+                log.debug(sm.getString("authenticator.reauthentication", 
request.getUserPrincipal().getName(), request.getAuthType()));
             }
         }
 
@@ -1019,7 +1018,7 @@ public abstract class AuthenticatorBase extends ValveBase 
implements Authenticat
 
         if (log.isDebugEnabled()) {
             String name = (principal == null) ? "none" : principal.getName();
-            log.debug("Authenticated '" + name + "' with type '" + authType + 
"'");
+            log.debug(sm.getString("authenticator.authentication", name, 
authType));
         }
 
         // Cache the authentication information in our request
@@ -1219,9 +1218,9 @@ public abstract class AuthenticatorBase extends ValveBase 
implements Authenticat
         }
         if (log.isDebugEnabled()) {
             if (sso != null) {
-                log.debug("Found SingleSignOn Valve at " + sso);
+                log.debug(sm.getString("authenticator.sso", sso));
             } else {
-                log.debug("No SingleSignOn Valve is present");
+                log.trace("No SingleSignOn Valve is present");
             }
         }
 
diff --git a/java/org/apache/catalina/authenticator/FormAuthenticator.java 
b/java/org/apache/catalina/authenticator/FormAuthenticator.java
index 52b76ea398..fc449abd5f 100644
--- a/java/org/apache/catalina/authenticator/FormAuthenticator.java
+++ b/java/org/apache/catalina/authenticator/FormAuthenticator.java
@@ -165,14 +165,14 @@ public class FormAuthenticator extends AuthenticatorBase {
         // Have we authenticated this user before but have caching disabled?
         if (!cache) {
             session = request.getSessionInternal(true);
-            if (log.isDebugEnabled()) {
-                log.debug("Checking for reauthenticate in session " + session);
+            if (log.isTraceEnabled()) {
+                log.trace("Checking for reauthenticate in session " + session);
             }
             String username = (String) 
session.getNote(Constants.SESS_USERNAME_NOTE);
             String password = (String) 
session.getNote(Constants.SESS_PASSWORD_NOTE);
             if (username != null && password != null) {
-                if (log.isDebugEnabled()) {
-                    log.debug("Reauthenticating username '" + username + "'");
+                if (log.isTraceEnabled()) {
+                    log.trace("Reauthenticating username '" + username + "'");
                 }
                 principal = context.getRealm().authenticate(username, 
password);
                 if (principal != null) {
@@ -182,7 +182,7 @@ public class FormAuthenticator extends AuthenticatorBase {
                     }
                 }
                 if (log.isDebugEnabled()) {
-                    log.debug("Reauthentication failed, proceed normally");
+                    log.debug(sm.getString("formAuthenticator.reauthFailed"));
                 }
             }
         }
@@ -191,17 +191,17 @@ public class FormAuthenticator extends AuthenticatorBase {
         // authentication? If so, forward the *original* request instead.
         if (matchRequest(request)) {
             session = request.getSessionInternal(true);
-            if (log.isDebugEnabled()) {
-                log.debug("Restore request from session '" + 
session.getIdInternal() + "'");
+            if (log.isTraceEnabled()) {
+                log.trace("Restore request from session '" + 
session.getIdInternal() + "'");
             }
             if (restoreRequest(request, session)) {
-                if (log.isDebugEnabled()) {
-                    log.debug("Proceed to restored request");
+                if (log.isTraceEnabled()) {
+                    log.trace("Proceed to restored request");
                 }
                 return true;
             } else {
                 if (log.isDebugEnabled()) {
-                    log.debug("Restore of original request failed");
+                    log.debug(sm.getString("formAuthenticator.restoreFailed"));
                 }
                 response.sendError(HttpServletResponse.SC_BAD_REQUEST);
                 return false;
@@ -240,13 +240,13 @@ public class FormAuthenticator extends AuthenticatorBase {
             }
 
             session = request.getSessionInternal(true);
-            if (log.isDebugEnabled()) {
-                log.debug("Save request in session '" + 
session.getIdInternal() + "'");
+            if (log.isTraceEnabled()) {
+                log.trace("Save request in session '" + 
session.getIdInternal() + "'");
             }
             try {
                 saveRequest(request, session);
             } catch (IOException ioe) {
-                log.debug("Request body too big to save during 
authentication");
+                log.debug(sm.getString("authenticator.requestBodyTooBig"));
                 response.sendError(HttpServletResponse.SC_FORBIDDEN, 
sm.getString("authenticator.requestBodyTooBig"));
                 return false;
             }
@@ -263,8 +263,8 @@ public class FormAuthenticator extends AuthenticatorBase {
         }
         String username = request.getParameter(Constants.FORM_USERNAME);
         String password = request.getParameter(Constants.FORM_PASSWORD);
-        if (log.isDebugEnabled()) {
-            log.debug("Authenticating username '" + username + "'");
+        if (log.isTraceEnabled()) {
+            log.trace("Authenticating username '" + username + "'");
         }
         principal = realm.authenticate(username, password);
         if (principal == null) {
@@ -272,8 +272,8 @@ public class FormAuthenticator extends AuthenticatorBase {
             return false;
         }
 
-        if (log.isDebugEnabled()) {
-            log.debug("Authentication of '" + username + "' was successful");
+        if (log.isTraceEnabled()) {
+            log.trace("Authentication of '" + username + "' was successful");
         }
 
         if (session == null) {
@@ -292,7 +292,7 @@ public class FormAuthenticator extends AuthenticatorBase {
         }
         if (session == null) {
             if (containerLog.isDebugEnabled()) {
-                containerLog.debug("User took so long to log on the session 
expired");
+                
containerLog.debug(sm.getString("formAuthenticator.sessionExpired"));
             }
             if (landingPage == null) {
                 response.sendError(HttpServletResponse.SC_REQUEST_TIMEOUT,
@@ -316,8 +316,8 @@ public class FormAuthenticator extends AuthenticatorBase {
         // Redirect the user to the original request URI (which will cause
         // the original request to be restored)
         requestURI = savedRequestURL(session);
-        if (log.isDebugEnabled()) {
-            log.debug("Redirecting to original '" + requestURI + "'");
+        if (log.isTraceEnabled()) {
+            log.trace("Redirecting to original '" + requestURI + "'");
         }
         if (requestURI == null) {
             if (landingPage == null) {
diff --git a/java/org/apache/catalina/authenticator/LocalStrings.properties 
b/java/org/apache/catalina/authenticator/LocalStrings.properties
index d66d2f2492..4909ee1967 100644
--- a/java/org/apache/catalina/authenticator/LocalStrings.properties
+++ b/java/org/apache/catalina/authenticator/LocalStrings.properties
@@ -13,12 +13,15 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+authenticator.authentication=Authenticated principal [{0}] with authentication 
type [{1}]
+authenticator.authenticationFail=User authentication failure
 authenticator.certificates=No client certificate chain in this request
 authenticator.changeSessionId=Session ID changed on authentication from [{0}] 
to [{1}]
 authenticator.check.authorize=User name [{0}] obtained from the Connector and 
trusted to be valid. Obtaining roles for this user from the Tomcat Realm.
 authenticator.check.authorizeFail=Realm did not recognise user [{0}]. Creating 
a Principal with that name and no roles.
 authenticator.check.found=Already authenticated [{0}]
 authenticator.check.sso=Not authenticated but SSO session ID [{0}] found. 
Attempting re-authentication.
+authenticator.corsBypass=CORS Preflight request bypassing authentication
 authenticator.formlogin=Invalid direct reference to form login page
 authenticator.jaspicCleanSubjectFail=Failed to clean JASPIC subject
 authenticator.jaspicSecureResponseFail=Failed to secure response during JASPIC 
processing
@@ -27,10 +30,14 @@ authenticator.loginFail=Login failed
 authenticator.manager=Exception initializing trust managers
 authenticator.noAuthHeader=No authorization header sent by client
 authenticator.notContext=Configuration error:  Must be attached to a Context
+authenticator.reauthentication=Reauthenticated cached principal [{0}] with 
authentication type [{1}]
 authenticator.requestBodyTooBig=The request body was too large to be cached 
during the authentication process
 authenticator.sessionExpired=The time allowed for the login process has been 
exceeded. If you wish to continue you must either click back twice and re-click 
the link you requested or close and re-open your browser
+authenticator.sso=Found SSO [{0}]
 authenticator.tomcatPrincipalLogoutFail=Logout with TomcatPrincipal instance 
has failed
 authenticator.unauthorized=Cannot authenticate with the provided credentials
+authenticator.userDataPermissionFail=User data does not comply with the 
constraints of the resource
+authenticator.userPermissionFail=User [{0}] does not have authorization to 
access the resource
 
 basicAuthenticator.invalidAuthorization=Invalid Authorization: [{0}]
 basicAuthenticator.invalidCharset=The only permitted values are null, the 
empty string or UTF-8
@@ -47,6 +54,9 @@ formAuthenticator.forwardLogin=Forwarding request for [{0}] 
made with method [{1
 formAuthenticator.forwardLoginFail=Unexpected error forwarding to login page
 formAuthenticator.noErrorPage=No error page was defined for FORM 
authentication in context [{0}]
 formAuthenticator.noLoginPage=No login page was defined for FORM 
authentication in context [{0}]
+formAuthenticator.reauthFailed=Reauthentication failed, proceeding with 
regular authentication
+formAuthenticator.restoreFailed=Restoring the original request failed
+formAuthenticator.sessionExpired=Client inactivity caused the session to 
expire during authentication
 formAuthenticator.sessionIdMismatch=Current session ID is [{0}] but FORM 
authenticator was expecting [{1}]
 
 singleSignOn.debug.associate=SSO associating application session [{1}] with 
SSO session [{0}]
@@ -79,4 +89,6 @@ spnegoAuthenticator.serviceLoginFail=Unable to login as the 
service principal
 spnegoAuthenticator.ticketValidateFail=Failed to validate client supplied 
ticket
 
 sslAuthenticatorValve.http2=The context [{0}] in virtual host [{1}] is 
configured to use CLIENT-CERT authentication and [{2}] is configured to support 
HTTP/2. Use of CLIENT-CERT authentication is not compatible with the use of 
HTTP/2.
+sslAuthenticatorValve.noCertificates=No certificates are included with this 
request
+sslAuthenticatorValve.authFailed=Authentication with the provided certificates 
failed
 sslAuthenticatorValve.tls13=The context [{0}] in virtual host [{1}] is 
configured to use CLIENT-CERT authentication and [{2}] is configured to support 
TLS 1.3 using JSSE. Use of CLIENT-CERT authentication is not compatible with 
the use of TLS 1.3 and JSSE.
diff --git a/java/org/apache/catalina/authenticator/NonLoginAuthenticator.java 
b/java/org/apache/catalina/authenticator/NonLoginAuthenticator.java
index ba836c20e9..2d31b7432d 100644
--- a/java/org/apache/catalina/authenticator/NonLoginAuthenticator.java
+++ b/java/org/apache/catalina/authenticator/NonLoginAuthenticator.java
@@ -90,8 +90,8 @@ public final class NonLoginAuthenticator extends 
AuthenticatorBase {
         // to say the user is now authenticated because access to
         // protected resources will only be allowed with a matching role.
         // i.e. SC_FORBIDDEN (403 status) will be generated later.
-        if (containerLog.isDebugEnabled()) {
-            containerLog.debug("User authenticated without any roles");
+        if (containerLog.isTraceEnabled()) {
+            containerLog.trace("User authenticated without any roles");
         }
         return true;
     }
diff --git a/java/org/apache/catalina/authenticator/SSLAuthenticator.java 
b/java/org/apache/catalina/authenticator/SSLAuthenticator.java
index ba2e11ca70..bb47775eff 100644
--- a/java/org/apache/catalina/authenticator/SSLAuthenticator.java
+++ b/java/org/apache/catalina/authenticator/SSLAuthenticator.java
@@ -73,15 +73,15 @@ public class SSLAuthenticator extends AuthenticatorBase {
         }
 
         // Retrieve the certificate chain for this client
-        if (containerLog.isDebugEnabled()) {
-            containerLog.debug(" Looking up certificates");
+        if (containerLog.isTraceEnabled()) {
+            containerLog.trace(" Looking up certificates");
         }
 
         X509Certificate certs[] = getRequestCertificates(request);
 
         if ((certs == null) || (certs.length < 1)) {
             if (containerLog.isDebugEnabled()) {
-                containerLog.debug("  No certificates included with this 
request");
+                
containerLog.debug(sm.getString("sslAuthenticatorValve.noCertificates"));
             }
             response.sendError(HttpServletResponse.SC_UNAUTHORIZED, 
sm.getString("authenticator.certificates"));
             return false;
@@ -91,7 +91,7 @@ public class SSLAuthenticator extends AuthenticatorBase {
         Principal principal = context.getRealm().authenticate(certs);
         if (principal == null) {
             if (containerLog.isDebugEnabled()) {
-                containerLog.debug("  Realm.authenticate() returned false");
+                
containerLog.debug(sm.getString("sslAuthenticatorValve.authFailed"));
             }
             response.sendError(HttpServletResponse.SC_UNAUTHORIZED, 
sm.getString("authenticator.unauthorized"));
             return false;
diff --git a/java/org/apache/catalina/connector/CoyoteAdapter.java 
b/java/org/apache/catalina/connector/CoyoteAdapter.java
index 49ddf7c8c1..b781cf61e2 100644
--- a/java/org/apache/catalina/connector/CoyoteAdapter.java
+++ b/java/org/apache/catalina/connector/CoyoteAdapter.java
@@ -1017,8 +1017,8 @@ public class CoyoteAdapter implements Adapter {
                     
request.setRequestedSessionId(scookie.getValue().toString());
                     request.setRequestedSessionCookie(true);
                     request.setRequestedSessionURL(false);
-                    if (log.isDebugEnabled()) {
-                        log.debug(" Requested cookie session id is " + 
request.getRequestedSessionId());
+                    if (log.isTraceEnabled()) {
+                        log.trace(" Requested cookie session id is " + 
request.getRequestedSessionId());
                     }
                 } else {
                     if (!request.isRequestedSessionIdValid()) {
diff --git a/java/org/apache/catalina/core/ContainerBase.java 
b/java/org/apache/catalina/core/ContainerBase.java
index d767e30fce..62dd863d7b 100644
--- a/java/org/apache/catalina/core/ContainerBase.java
+++ b/java/org/apache/catalina/core/ContainerBase.java
@@ -691,7 +691,7 @@ public abstract class ContainerBase extends 
LifecycleMBeanBase implements Contai
     private void addChildInternal(Container child) {
 
         if (log.isDebugEnabled()) {
-            log.debug("Add child " + child + " " + this);
+            log.debug(sm.getString("containerBase.child.add", child, this));
         }
 
         synchronized (children) {
diff --git a/java/org/apache/catalina/core/LocalStrings.properties 
b/java/org/apache/catalina/core/LocalStrings.properties
index 2be22cd18b..b37ba91370 100644
--- a/java/org/apache/catalina/core/LocalStrings.properties
+++ b/java/org/apache/catalina/core/LocalStrings.properties
@@ -118,6 +118,7 @@ containerBase.backgroundProcess.error=Exception processing 
background thread
 containerBase.backgroundProcess.realm=Exception processing realm [{0}] 
background process
 containerBase.backgroundProcess.unexpectedThreadDeath=Unexpected death of 
background thread [{0}]
 containerBase.backgroundProcess.valve=Exception processing valve [{0}] 
background process
+containerBase.child.add=Add container child [{0}] to container [{1}]
 containerBase.child.destroy=Error destroying child
 containerBase.child.notUnique=Child name [{0}] is not unique
 containerBase.child.start=Error starting child
@@ -163,6 +164,11 @@ listener.notServer=This listener must only be nested 
within Server elements, but
 
 naming.addEnvEntry=Adding environment entry [{0}]
 naming.addResourceEnvRef=Adding resource env ref [{0}]
+naming.addResourceLink=Adding resource link [{0}]
+naming.addResourceRef=Adding resource reference [{0}] at [{1}]
+naming.addService=Adding service reference [{0}] at [{1}]
+naming.addSlash=Changing service URL to [/{0}]
+naming.bind=Bind naming context to container [{0}]
 naming.bindFailed=Failed to bind object: [{0}]
 naming.invalidEnvEntryType=Environment entry [{0}] has an invalid type
 naming.invalidEnvEntryValue=Environment entry [{0}] has an invalid value
diff --git a/java/org/apache/catalina/core/NamingContextListener.java 
b/java/org/apache/catalina/core/NamingContextListener.java
index d9a1e4dd88..c638c65947 100644
--- a/java/org/apache/catalina/core/NamingContextListener.java
+++ b/java/org/apache/catalina/core/NamingContextListener.java
@@ -230,7 +230,7 @@ public class NamingContextListener implements 
LifecycleListener, ContainerListen
                 ContextAccessController.setSecurityToken(container, token);
                 ContextBindings.bindContext(container, namingContext, token);
                 if (log.isDebugEnabled()) {
-                    log.debug("Bound " + container);
+                    log.debug(sm.getString("naming.bind", container));
                 }
 
                 // Configure write when read-only behaviour
@@ -844,7 +844,9 @@ public class NamingContextListener implements 
LifecycleListener, ContainerListen
                 if (wsdlURL == null) {
                     try {
                         wsdlURL = ((Context) 
container).getServletContext().getResource("/" + service.getWsdlfile());
-                        log.debug("  Changing service ref wsdl file for /" + 
service.getWsdlfile());
+                        if (log.isDebugEnabled()) {
+                            log.debug(sm.getString("naming.addSlash", 
service.getWsdlfile()));
+                        }
                     } catch (MalformedURLException e) {
                         log.error(sm.getString("naming.wsdlFailed", e));
                     }
@@ -877,7 +879,9 @@ public class NamingContextListener implements 
LifecycleListener, ContainerListen
                     try {
                         jaxrpcURL = ((Context) container).getServletContext()
                                 .getResource("/" + 
service.getJaxrpcmappingfile());
-                        log.debug("  Changing service ref jaxrpc file for /" + 
service.getJaxrpcmappingfile());
+                        if (log.isDebugEnabled()) {
+                            log.debug(sm.getString("naming.addSlash", 
service.getJaxrpcmappingfile()));
+                        }
                     } catch (MalformedURLException e) {
                         log.error(sm.getString("naming.wsdlFailed", e));
                     }
@@ -935,7 +939,7 @@ public class NamingContextListener implements 
LifecycleListener, ContainerListen
 
         try {
             if (log.isDebugEnabled()) {
-                log.debug("  Adding service ref " + service.getName() + "  " + 
ref);
+                log.debug(sm.getString("naming.addService", ref, 
service.getName()));
             }
             createSubcontexts(envCtx, service.getName());
             envCtx.bind(service.getName(), ref);
@@ -970,7 +974,7 @@ public class NamingContextListener implements 
LifecycleListener, ContainerListen
 
         try {
             if (log.isDebugEnabled()) {
-                log.debug("  Adding resource ref " + resource.getName() + "  " 
+ ref);
+                log.debug(sm.getString("naming.addResourceRef", ref, 
resource.getName()));
             }
             createSubcontexts(envCtx, resource.getName());
             envCtx.bind(resource.getName(), ref);
@@ -1054,7 +1058,7 @@ public class NamingContextListener implements 
LifecycleListener, ContainerListen
         javax.naming.Context ctx = 
"UserTransaction".equals(resourceLink.getName()) ? compCtx : envCtx;
         try {
             if (log.isDebugEnabled()) {
-                log.debug("  Adding resource link " + resourceLink.getName());
+                log.debug(sm.getString("naming.addResourceLink", 
resourceLink.getName()));
             }
             createSubcontexts(envCtx, resourceLink.getName());
             ctx.bind(resourceLink.getName(), ref);
diff --git 
a/java/org/apache/catalina/core/ThreadLocalLeakPreventionListener.java 
b/java/org/apache/catalina/core/ThreadLocalLeakPreventionListener.java
index d342b558c4..aba84f1ff1 100644
--- a/java/org/apache/catalina/core/ThreadLocalLeakPreventionListener.java
+++ b/java/org/apache/catalina/core/ThreadLocalLeakPreventionListener.java
@@ -175,7 +175,9 @@ public class ThreadLocalLeakPreventionListener implements 
LifecycleListener, Con
 
         if (!(context instanceof StandardContext) ||
                 !((StandardContext) 
context).getRenewThreadsWhenStoppingContext()) {
-            log.debug("Not renewing threads when the context is stopping. " + 
"It is not configured to do it.");
+            if (log.isTraceEnabled()) {
+                log.trace("Not renewing threads when the context is stopping. 
It is not configured to do it.");
+            }
             return;
         }
 
diff --git a/java/org/apache/catalina/filters/CsrfPreventionFilter.java 
b/java/org/apache/catalina/filters/CsrfPreventionFilter.java
index 6640c1c3a5..6e74617aee 100644
--- a/java/org/apache/catalina/filters/CsrfPreventionFilter.java
+++ b/java/org/apache/catalina/filters/CsrfPreventionFilter.java
@@ -358,17 +358,16 @@ public class CsrfPreventionFilter extends 
CsrfPreventionFilterBase {
                 if (previousNonce == null) {
                     if (enforce(req, requestedPath)) {
                         if (log.isDebugEnabled()) {
-                            log.debug("Rejecting request for " + 
getRequestedPath(req) + ", session " +
-                                    (null == session ? "(none)" : 
session.getId()) +
-                                    " with no CSRF nonce found in request");
+                            
log.debug(sm.getString("csrfPrevention.rejectNoNonce", getRequestedPath(req),
+                                    (null == session ? "(null)" : 
session.getId())));
                         }
 
                         res.sendError(getDenyStatus());
                         return;
                     } else {
-                        if (log.isDebugEnabled()) {
-                            log.debug("Would have rejected request for " + 
getRequestedPath(req) + ", session " +
-                                    (null == session ? "(none)" : 
session.getId()) +
+                        if (log.isTraceEnabled()) {
+                            log.trace("Would have rejected request for " + 
getRequestedPath(req) + ", session " +
+                                    (null == session ? "(null)" : 
session.getId()) +
                                     " with no CSRF nonce found in request");
                         }
                     }
@@ -377,32 +376,31 @@ public class CsrfPreventionFilter extends 
CsrfPreventionFilterBase {
                     if (nonceCache == null) {
                         if (enforce(req, requestedPath)) {
                             if (log.isDebugEnabled()) {
-                                log.debug("Rejecting request for " + 
getRequestedPath(req) + ", session " +
-                                        (null == session ? "(none)" : 
session.getId()) + " due to empty / missing nonce cache");
+                                
log.debug(sm.getString("csrfPrevention.rejectNoCache", getRequestedPath(req),
+                                        (null == session ? "(null)" : 
session.getId())));
                             }
 
                             res.sendError(getDenyStatus());
                             return;
                         } else {
-                            if (log.isDebugEnabled()) {
-                                log.debug("Would have rejecting request for " 
+ getRequestedPath(req) + ", session " +
-                                        (null == session ? "(none)" : 
session.getId()) + " due to empty / missing nonce cache");
+                            if (log.isTraceEnabled()) {
+                                log.trace("Would have rejecting request for " 
+ getRequestedPath(req) + ", session " +
+                                        (null == session ? "(null)" : 
session.getId()) + " due to empty / missing nonce cache");
                             }
                         }
                     } else if (!nonceCache.contains(previousNonce)) {
                         if (enforce(req, requestedPath)) {
                             if (log.isDebugEnabled()) {
-                                log.debug("Rejecting request for " + 
getRequestedPath(req) + ", session " +
-                                        (null == session ? "(none)" : 
session.getId()) + " due to invalid nonce " +
-                                        previousNonce);
+                                
log.debug(sm.getString("csrfPrevention.rejectInvalidNonce", 
getRequestedPath(req),
+                                        (null == session ? "(null)" : 
session.getId()), previousNonce));
                             }
 
                             res.sendError(getDenyStatus());
                             return;
                         } else {
-                            if (log.isDebugEnabled()) {
-                                log.debug("Would have rejecting request for " 
+ getRequestedPath(req) + ", session " +
-                                        (null == session ? "(none)" : 
session.getId()) + " due to invalid nonce " +
+                            if (log.isTraceEnabled()) {
+                                log.trace("Would have rejecting request for " 
+ getRequestedPath(req) + ", session " +
+                                        (null == session ? "(null)" : 
session.getId()) + " due to invalid nonce " +
                                         previousNonce);
                             }
                         }
@@ -422,13 +420,13 @@ public class CsrfPreventionFilter extends 
CsrfPreventionFilterBase {
                 }
                 if (nonceCache == null) {
                     if (log.isDebugEnabled()) {
-                        log.debug("Creating new CSRF nonce cache with size=" + 
nonceCacheSize + " for session " +
-                                (null == session ? "(will create)" : 
session.getId()));
+                        log.debug(sm.getString("csrfPrevention.createCache", 
Integer.valueOf(nonceCacheSize),
+                                (null == session ? "(null)" : 
session.getId())));
                     }
 
                     if (session == null) {
-                        if (log.isDebugEnabled()) {
-                            log.debug("Creating new session to store CSRF 
nonce cache");
+                        if (log.isTraceEnabled()) {
+                            log.trace("Creating new session to store CSRF 
nonce cache");
                         }
 
                         session = req.getSession(true);
diff --git a/java/org/apache/catalina/filters/LocalStrings.properties 
b/java/org/apache/catalina/filters/LocalStrings.properties
index 5c5da1559e..be56650ae2 100644
--- a/java/org/apache/catalina/filters/LocalStrings.properties
+++ b/java/org/apache/catalina/filters/LocalStrings.properties
@@ -23,7 +23,11 @@ corsFilter.onlyHttp=CORS doesn't support non-HTTP request or 
response
 corsFilter.wrongType1=Expects an HttpServletRequest object of type [{0}]
 corsFilter.wrongType2=Expects an HttpServletRequest object of type [{0}] or 
[{1}]
 
+csrfPrevention.createCache=Creating new CSRF nonce cache with size [{0}] for 
session [{1}] (it will be created if null)
 csrfPrevention.invalidRandomClass=Unable to create Random source using class 
[{0}]
+csrfPrevention.rejectInvalidNonce=Rejecting request for [{0}] with session 
[{1}] due to invalid nonce [{2}]
+csrfPrevention.rejectNoCache=Rejecting request for [{0}] with session [{1}] 
due to empty or missing nonce cache
+csrfPrevention.rejectNoNonce=Rejecting request for [{0}] with session [{1}] 
because no CSRF nonce was found
 csrfPrevention.unsupportedPattern=Unsupported pattern [{0}]
 
 expiresFilter.exceptionProcessingParameter=Exception processing configuration 
parameter [{0}]:[{1}]
diff --git a/java/org/apache/catalina/ha/session/ClusterManagerBase.java 
b/java/org/apache/catalina/ha/session/ClusterManagerBase.java
index 4169f81c7e..b642178f4b 100644
--- a/java/org/apache/catalina/ha/session/ClusterManagerBase.java
+++ b/java/org/apache/catalina/ha/session/ClusterManagerBase.java
@@ -33,9 +33,11 @@ import org.apache.catalina.tribes.io.ReplicationStream;
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
 import org.apache.tomcat.util.collections.SynchronizedStack;
+import org.apache.tomcat.util.res.StringManager;
 
 public abstract class ClusterManagerBase extends ManagerBase implements 
ClusterManager {
 
+    protected static final StringManager sm = 
StringManager.getManager(ClusterManagerBase.class);
     private final Log log = LogFactory.getLog(ClusterManagerBase.class); // 
must not be static
 
     /**
@@ -191,7 +193,7 @@ public abstract class ClusterManagerBase extends 
ManagerBase implements ClusterM
                     } // for
 
                     if (replicationValve == null && log.isDebugEnabled()) {
-                        log.debug("no ReplicationValve found for CrossContext 
Support");
+                        log.debug(sm.getString("clusterManager.noValve"));
                     } // endif
                 } // end if
             } // endif
diff --git a/java/org/apache/catalina/ha/session/LocalStrings.properties 
b/java/org/apache/catalina/ha/session/LocalStrings.properties
index d894dd3c64..0b6a7b39fb 100644
--- a/java/org/apache/catalina/ha/session/LocalStrings.properties
+++ b/java/org/apache/catalina/ha/session/LocalStrings.properties
@@ -18,6 +18,8 @@ backupManager.startFailed=Failed to start BackupManager: [{0}]
 backupManager.startUnable=Unable to start BackupManager: [{0}]
 backupManager.stopped=Manager [{0}] is stopping
 
+clusterManager.noValve=No ReplicationValve found for cross context support
+
 clusterSessionListener.noManager=Context manager doesn''t exist:[{0}]
 
 deltaManager.createMessage.access=Manager [{0}]: create session access message 
for session [{1}]
diff --git a/java/org/apache/catalina/ha/tcp/LocalStrings.properties 
b/java/org/apache/catalina/ha/tcp/LocalStrings.properties
index 2214450e08..e8525482bb 100644
--- a/java/org/apache/catalina/ha/tcp/LocalStrings.properties
+++ b/java/org/apache/catalina/ha/tcp/LocalStrings.properties
@@ -31,10 +31,13 @@ ReplicationValve.stats=Average request time=[{0}] ms with 
cluster overhead time=
 
 simpleTcpCluster.clustermanager.cloneFailed=Unable to clone cluster manager, 
defaulting to org.apache.catalina.ha.session.DeltaManager
 simpleTcpCluster.clustermanager.notImplement=Manager [{0}] does not implement 
ClusterManager, addition to cluster has been aborted.
+simpleTcpCluster.createManager=Creating ClusterManager for context [{0}] using 
class [{1}]
 simpleTcpCluster.member.addFailed=Unable to connect to replication system.
 simpleTcpCluster.member.added=Replication member added:[{0}]
 simpleTcpCluster.member.disappeared=Received member disappeared:[{0}]
 simpleTcpCluster.member.removeFailed=Unable remove cluster node from 
replication system.
+simpleTcpCluster.noListener=Message [{0}] from type [{1}] transferred but no 
listener registered
+simpleTcpCluster.noMembers=No members in cluster, ignoring message [{0}]
 simpleTcpCluster.sendFailed=Unable to send message through cluster sender.
 simpleTcpCluster.start=Cluster is about to start
 simpleTcpCluster.startUnable=Unable to start cluster.
diff --git a/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java 
b/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java
index a33aff856c..883942f2ce 100644
--- a/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java
+++ b/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java
@@ -396,8 +396,7 @@ public class SimpleTcpCluster extends LifecycleMBeanBase
     @Override
     public synchronized Manager createManager(String name) {
         if (log.isDebugEnabled()) {
-            log.debug("Creating ClusterManager for context " + name + " using 
class " +
-                    getManagerTemplate().getClass().getName());
+            log.debug(sm.getString("simpleTcpCluster.createManager", name, 
getManagerTemplate().getClass().getName()));
         }
         ClusterManager manager = null;
         try {
@@ -697,7 +696,7 @@ public class SimpleTcpCluster extends LifecycleMBeanBase
                 if (destmembers.length > 0) {
                     channel.send(destmembers, msg, sendOptions);
                 } else if (log.isDebugEnabled()) {
-                    log.debug("No members in cluster, ignoring message:" + 
msg);
+                    log.debug(sm.getString("simpleTcpCluster.noMembers", msg));
                 }
             }
         } catch (Exception x) {
@@ -796,8 +795,7 @@ public class SimpleTcpCluster extends LifecycleMBeanBase
                 // Notify our interested LifecycleListeners
                 fireLifecycleEvent(RECEIVE_MESSAGE_FAILURE_EVENT, new 
SendMessageData(message, dest, null));
                 if (log.isDebugEnabled()) {
-                    log.debug("Message " + message.toString() + " from type " 
+ message.getClass().getName() +
-                            " transferred but no listener registered");
+                    log.debug(sm.getString("simpleTcpCluster.noListener", 
message, message.getClass().getName()));
                 }
             }
         }
diff --git 
a/java/org/apache/catalina/mbeans/GlobalResourcesLifecycleListener.java 
b/java/org/apache/catalina/mbeans/GlobalResourcesLifecycleListener.java
index 0c2b778aa9..a3e1cfab99 100644
--- a/java/org/apache/catalina/mbeans/GlobalResourcesLifecycleListener.java
+++ b/java/org/apache/catalina/mbeans/GlobalResourcesLifecycleListener.java
@@ -128,7 +128,7 @@ public class GlobalResourcesLifecycleListener implements 
LifecycleListener {
     protected void createMBeans(String prefix, Context context) throws 
NamingException {
 
         if (log.isDebugEnabled()) {
-            log.debug("Creating MBeans for Global JNDI Resources in Context '" 
+ prefix + "'");
+            log.debug(sm.getString("globalResources.create", prefix));
         }
 
         try {
diff --git a/java/org/apache/catalina/mbeans/LocalStrings.properties 
b/java/org/apache/catalina/mbeans/LocalStrings.properties
index 19ea1dc1c5..d9eb992b46 100644
--- a/java/org/apache/catalina/mbeans/LocalStrings.properties
+++ b/java/org/apache/catalina/mbeans/LocalStrings.properties
@@ -13,6 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+globalResources.create=Creating MBeans for Global JNDI Resources in Context 
[{0}]
 globalResources.createError=Exception processing global JNDI Resources
 globalResources.createError.operation=Operation not supported error creating 
MBeans
 globalResources.createError.runtime=Unexpected error creating MBeans
diff --git a/java/org/apache/catalina/realm/JAASMemoryLoginModule.java 
b/java/org/apache/catalina/realm/JAASMemoryLoginModule.java
index 91953b1c75..213a349a33 100644
--- a/java/org/apache/catalina/realm/JAASMemoryLoginModule.java
+++ b/java/org/apache/catalina/realm/JAASMemoryLoginModule.java
@@ -292,7 +292,7 @@ public class JAASMemoryLoginModule extends MemoryRealm 
implements LoginModule {
         }
 
         if (log.isDebugEnabled()) {
-            log.debug("login " + username + " " + principal);
+            log.debug(sm.getString("jaasMemoryLoginModule.login", username, 
principal));
         }
 
         // Report results based on success or failure
diff --git a/java/org/apache/catalina/realm/JNDIRealm.java 
b/java/org/apache/catalina/realm/JNDIRealm.java
index fd85bda078..c1895d3255 100644
--- a/java/org/apache/catalina/realm/JNDIRealm.java
+++ b/java/org/apache/catalina/realm/JNDIRealm.java
@@ -1208,8 +1208,8 @@ public class JNDIRealm extends RealmBase {
             closePooledConnections();
 
             // Return "not authenticated" for this request
-            if (containerLog.isDebugEnabled()) {
-                containerLog.debug("Returning null principal.");
+            if (containerLog.isTraceEnabled()) {
+                containerLog.trace("Returning null principal.");
             }
             return null;
         } finally {
@@ -1236,8 +1236,8 @@ public class JNDIRealm extends RealmBase {
             throws NamingException {
 
         if (username == null || username.equals("") || credentials == null || 
credentials.equals("")) {
-            if (containerLog.isDebugEnabled()) {
-                containerLog.debug("username null or empty: returning null 
principal.");
+            if (containerLog.isTraceEnabled()) {
+                containerLog.trace("username null or empty: returning null 
principal.");
             }
             return null;
         }
diff --git a/java/org/apache/catalina/realm/LocalStrings.properties 
b/java/org/apache/catalina/realm/LocalStrings.properties
index aeb49cde38..6ee36b31f5 100644
--- a/java/org/apache/catalina/realm/LocalStrings.properties
+++ b/java/org/apache/catalina/realm/LocalStrings.properties
@@ -38,6 +38,7 @@ jaasCallback.username=Returned username [{0}]
 
 jaasMemoryLoginModule.callbackHandlerError=Error invoking callback handler: 
[{0}]
 jaasMemoryLoginModule.invalidCredentials=User name or password is incorrect
+jaasMemoryLoginModule.login=Login for user [{0}] as principal [{1}]
 jaasMemoryLoginModule.noCallbackHandler=No CallbackHandler specified
 jaasMemoryLoginModule.noCatalinaBase=Unable to determine Catalina base to load 
file [{0}]
 jaasMemoryLoginModule.noConfig=Cannot load configuration file [{0}]
@@ -117,6 +118,7 @@ realmBase.hasRoleFailure=Username [{0}] does NOT have role 
[{1}]
 realmBase.hasRoleSuccess=Username [{0}] has role [{1}]
 realmBase.invalidDigestEncoding=Invalid digest encoding [{0}]
 realmBase.unknownAllRolesMode=Unknown mode [{0}], must be one of: strict, 
authOnly, strictAuthOnly
+realmBase.validity=Error checking certificate validity
 
 userDatabaseRealm.lookup=Exception looking up UserDatabase under key [{0}]
 userDatabaseRealm.noDatabase=No UserDatabase component found under key [{0}]
diff --git a/java/org/apache/catalina/realm/RealmBase.java 
b/java/org/apache/catalina/realm/RealmBase.java
index 952e558705..afd195d021 100644
--- a/java/org/apache/catalina/realm/RealmBase.java
+++ b/java/org/apache/catalina/realm/RealmBase.java
@@ -452,7 +452,7 @@ public abstract class RealmBase extends LifecycleMBeanBase 
implements org.apache
                     cert.checkValidity();
                 } catch (Exception e) {
                     if (log.isDebugEnabled()) {
-                        log.debug("  Validity exception", e);
+                        log.debug(sm.getString("realmBase.validity"), e);
                     }
                     return null;
                 }
diff --git a/java/org/apache/catalina/session/FileStore.java 
b/java/org/apache/catalina/session/FileStore.java
index c899a49190..45baefde3b 100644
--- a/java/org/apache/catalina/session/FileStore.java
+++ b/java/org/apache/catalina/session/FileStore.java
@@ -233,7 +233,7 @@ public final class FileStore extends StoreBase {
             return session;
         } catch (FileNotFoundException e) {
             if (contextLog.isDebugEnabled()) {
-                contextLog.debug("No persisted data file found");
+                contextLog.debug(sm.getString("fileStore.noFile", id, 
file.getAbsolutePath()));
             }
             return null;
         } finally {
diff --git a/java/org/apache/catalina/session/LocalStrings.properties 
b/java/org/apache/catalina/session/LocalStrings.properties
index 8f0e54e846..18657f83f7 100644
--- a/java/org/apache/catalina/session/LocalStrings.properties
+++ b/java/org/apache/catalina/session/LocalStrings.properties
@@ -33,6 +33,7 @@ fileStore.deleteFailed=Unable to delete file [{0}] which is 
preventing the creat
 fileStore.deleteSessionFailed=Unable to delete file [{0}] which is no longer 
required
 fileStore.invalid=Invalid persistence file [{0}] for session ID [{1}]
 fileStore.loading=Loading Session [{0}] from file [{1}]
+fileStore.noFile=Persistence file [{1}] for session ID [{0}] was not found
 fileStore.removing=Removing Session [{0}] at file [{1}]
 fileStore.saving=Saving Session [{0}] to file [{1}]
 
@@ -66,10 +67,12 @@ persistentManager.tooManyActive=Too many active sessions, 
[{0}], looking for idl
 persistentManager.unloading=Saving [{0}] persisted sessions
 
 standardManager.deletePersistedFileFail=Unable to delete [{0}] after reading 
the persisted sessions. The continued presence of this file may cause future 
attempts to persist sessions to fail.
+standardManager.expiringSessions=Expiring [{0}] persisted sessions
 standardManager.loading=Loading persisted sessions from [{0}]
 standardManager.loading.exception=Exception while loading persisted sessions
 standardManager.managerLoad=Exception loading sessions from persistent storage
 standardManager.managerUnload=Exception unloading sessions to persistent 
storage
+standardManager.noFile=Persisted data file [{0}] was not found
 standardManager.unloading=Saving persisted sessions to [{0}]
 standardManager.unloading.debug=Unloading persisted sessions
 standardManager.unloading.nosessions=No persisted sessions to unload
diff --git a/java/org/apache/catalina/session/ManagerBase.java 
b/java/org/apache/catalina/session/ManagerBase.java
index 3a58ac1a87..240d71f527 100644
--- a/java/org/apache/catalina/session/ManagerBase.java
+++ b/java/org/apache/catalina/session/ManagerBase.java
@@ -630,12 +630,12 @@ public abstract class ManagerBase extends 
LifecycleMBeanBase implements Manager
             ((Lifecycle) sessionIdGenerator).start();
         } else {
             // Force initialization of the random number generator
-            if (log.isDebugEnabled()) {
-                log.debug("Force random number initialization starting");
+            if (log.isTraceEnabled()) {
+                log.trace("Force random number initialization starting");
             }
             sessionIdGenerator.generateSessionId();
-            if (log.isDebugEnabled()) {
-                log.debug("Force random number initialization completed");
+            if (log.isTraceEnabled()) {
+                log.trace("Force random number initialization completed");
             }
         }
     }
diff --git a/java/org/apache/catalina/session/StandardManager.java 
b/java/org/apache/catalina/session/StandardManager.java
index be5a7dff27..67514fe1d7 100644
--- a/java/org/apache/catalina/session/StandardManager.java
+++ b/java/org/apache/catalina/session/StandardManager.java
@@ -230,7 +230,7 @@ public class StandardManager extends ManagerBase {
             }
         } catch (FileNotFoundException e) {
             if (log.isDebugEnabled()) {
-                log.debug("No persisted data file found");
+                log.debug(sm.getString("standardManager.noFile", 
file.getAbsolutePath()));
             }
             return;
         }
@@ -311,7 +311,7 @@ public class StandardManager extends ManagerBase {
 
         // Expire all the sessions we just wrote
         if (log.isDebugEnabled()) {
-            log.debug("Expiring " + list.size() + " persisted sessions");
+            log.debug(sm.getString("standardManager.expiringSessions", 
list.size()));
         }
         for (StandardSession session : list) {
             try {
diff --git a/java/org/apache/catalina/startup/Catalina.java 
b/java/org/apache/catalina/startup/Catalina.java
index 91c28ce3f5..991d2228c3 100644
--- a/java/org/apache/catalina/startup/Catalina.java
+++ b/java/org/apache/catalina/startup/Catalina.java
@@ -648,7 +648,7 @@ public class Catalina {
             try {
                 getServer().destroy();
             } catch (LifecycleException e1) {
-                log.debug("destroy() failed for failed Server ", e1);
+                log.debug(sm.getString("catalina.destroyFail"), e1);
             }
             return;
         }
@@ -772,14 +772,14 @@ public class Catalina {
             }
             System.setProperty(javax.naming.Context.URL_PKG_PREFIXES, value);
             if (log.isDebugEnabled()) {
-                log.debug("Setting naming prefix=" + value);
+                log.debug(sm.getString("catalina.namingPrefix", value));
             }
             value = 
System.getProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY);
             if (value == null) {
                 
System.setProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY,
                         "org.apache.naming.java.javaURLContextFactory");
             } else {
-                log.debug("INITIAL_CONTEXT_FACTORY already set " + value);
+                log.debug(sm.getString("catalina.initialContextFactory", 
value));
             }
         }
     }
diff --git a/java/org/apache/catalina/startup/ContextConfig.java 
b/java/org/apache/catalina/startup/ContextConfig.java
index 26c73d6a50..0fe0ea3983 100644
--- a/java/org/apache/catalina/startup/ContextConfig.java
+++ b/java/org/apache/catalina/startup/ContextConfig.java
@@ -476,7 +476,7 @@ public class ContextConfig implements LifecycleListener {
     protected void processContextConfig(Digester digester, URL contextXml) {
 
         if (log.isDebugEnabled()) {
-            log.debug("Processing context [" + context.getName() + "] 
configuration file [" + contextXml + "]");
+            log.debug(sm.getString("contextConfig.processContext", 
context.getName(), contextXml));
         }
 
         InputSource source = null;
@@ -680,8 +680,7 @@ public class ContextConfig implements LifecycleListener {
             antiLockingDocBase = antiLockingDocBase.getAbsoluteFile();
 
             if (log.isDebugEnabled()) {
-                log.debug("Anti locking context[" + context.getName() + "] 
setting docBase to " +
-                        antiLockingDocBase.getPath());
+                log.debug(sm.getString("contextConfig.antiLocking", 
context.getName(), antiLockingDocBase.getPath()));
             }
 
             // Cleanup just in case an old deployment is lying around
@@ -1315,7 +1314,7 @@ public class ContextConfig implements LifecycleListener {
             } else {
                 if (log.isDebugEnabled()) {
                     for (String urlPattern : 
jspPropertyGroup.getUrlPatterns()) {
-                        log.debug("Skipping " + urlPattern + " , no servlet " 
+ jspServletName);
+                        log.debug(sm.getString("contextConfig.noJsp", 
urlPattern, jspServletName));
                     }
                 }
             }
diff --git a/java/org/apache/catalina/startup/CopyParentClassLoaderRule.java 
b/java/org/apache/catalina/startup/CopyParentClassLoaderRule.java
index ddcf406535..ba9f43d730 100644
--- a/java/org/apache/catalina/startup/CopyParentClassLoaderRule.java
+++ b/java/org/apache/catalina/startup/CopyParentClassLoaderRule.java
@@ -56,8 +56,8 @@ public class CopyParentClassLoaderRule extends Rule {
     @Override
     public void begin(String namespace, String name, Attributes attributes) 
throws Exception {
 
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("Copying parent class loader");
+        if (digester.getLogger().isTraceEnabled()) {
+            digester.getLogger().trace("Copying parent class loader");
         }
         Container child = (Container) digester.peek(0);
         Object parent = digester.peek(1);
diff --git a/java/org/apache/catalina/startup/HostConfig.java 
b/java/org/apache/catalina/startup/HostConfig.java
index 246eadbb35..d001f9c0a5 100644
--- a/java/org/apache/catalina/startup/HostConfig.java
+++ b/java/org/apache/catalina/startup/HostConfig.java
@@ -1459,7 +1459,7 @@ public class HostConfig implements LifecycleListener {
             // host's configBase
             if (isDeletableResource(app, current)) {
                 if (log.isDebugEnabled()) {
-                    log.debug("Delete " + current);
+                    log.debug(sm.getString("hostConfig.delete", current));
                 }
                 ExpandWar.delete(current);
             }
@@ -1478,7 +1478,7 @@ public class HostConfig implements LifecycleListener {
                 // configBase
                 if (isDeletableResource(app, current)) {
                     if (log.isDebugEnabled()) {
-                        log.debug("Delete " + current);
+                        log.debug(sm.getString("hostConfig.delete", current));
                     }
                     ExpandWar.delete(current);
                 }
diff --git a/java/org/apache/catalina/startup/LocalStrings.properties 
b/java/org/apache/catalina/startup/LocalStrings.properties
index fdf5246f4e..1a5ef4774d 100644
--- a/java/org/apache/catalina/startup/LocalStrings.properties
+++ b/java/org/apache/catalina/startup/LocalStrings.properties
@@ -27,6 +27,7 @@ connector.noSetSSLImplementationName=Connector [{0}] does not 
support changing t
 
 contextConfig.altDDNotFound=alt-dd file [{0}] not found
 contextConfig.annotationsStackOverflow=Unable to complete the scan for 
annotations for web application [{0}] due to a StackOverflowError. Possible 
root causes include a too low setting for -Xss and illegal cyclic inheritance 
dependencies. The class hierarchy being processed was [{1}]
+contextConfig.antiLocking=Anti locking for context [{0}] setting docBase to 
[{1}]
 contextConfig.applicationMissing=Missing application web.xml, using defaults 
only
 contextConfig.applicationParse=Parse error in application web.xml file at [{0}]
 contextConfig.applicationPosition=Occurred at line [{0}] column [{1}]
@@ -60,9 +61,11 @@ contextConfig.jspFile.error=JSP file [{0}] must start with a 
''/''
 contextConfig.jspFile.warning=WARNING: JSP file [{0}] must start with a ''/'' 
in Servlet 2.4
 contextConfig.missingRealm=No Realm has been configured to authenticate against
 contextConfig.noAntiLocking=The value [{0}] configured for java.io.tmpdir does 
not point to a valid directory. The antiResourceLocking setting for the web 
application [{1}] will be ignored.
+contextConfig.noJsp=Skipping JSP property group for URL [{0}], no JSP Servlet 
found for name [{1}]
 contextConfig.processAnnotationsDir.debug=Scanning directory for class files 
with annotations [{0}]
 contextConfig.processAnnotationsJar.debug=Scanning jar file for class files 
with annotations [{0}]
 contextConfig.processAnnotationsWebDir.debug=Scanning web application 
directory for class files with annotations [{0}]
+contextConfig.processContext=Processing context [{0}] with configuration [{1}]
 contextConfig.resourceJarFail=Failed to process JAR found at URL [{0}] for 
static resources to be included in context with name [{1}]
 contextConfig.role.auth=Security role name [{0}] used in an <auth-constraint> 
without being defined in a <security-role>
 contextConfig.role.link=Security role name [{0}] used in a <role-link> without 
being defined in a <security-role>
@@ -98,6 +101,7 @@ hostConfig.cce=Lifecycle event data object [{0}] is not a 
Host
 hostConfig.context.remove=Error while removing context [{0}]
 hostConfig.context.restart=Error during context [{0}] restart
 hostConfig.createDirs=Unable to create directory for deployment: [{0}]
+hostConfig.delete=Delete resource [{0}] during application reload
 hostConfig.deploy.error=Exception while deploying web application directory 
[{0}]
 hostConfig.deployDescriptor=Deploying deployment descriptor [{0}]
 hostConfig.deployDescriptor.blocked=The web application with context path 
[{0}] was not deployed because it contained a deployment descriptor [{1}] which 
may include configuration necessary for the secure deployment of the 
application but processing of deployment descriptors is prevented by the 
deployXML setting of this host. An appropriate descriptor should be created at 
[{2}] to deploy this application.
diff --git 
a/java/org/apache/catalina/tribes/group/interceptors/LocalStrings.properties 
b/java/org/apache/catalina/tribes/group/interceptors/LocalStrings.properties
index 35c2f6c2c4..7f47ef2dba 100644
--- a/java/org/apache/catalina/tribes/group/interceptors/LocalStrings.properties
+++ b/java/org/apache/catalina/tribes/group/interceptors/LocalStrings.properties
@@ -59,6 +59,7 @@ tcpFailureDetector.heartbeat.failed=Unable to perform 
heartbeat on the TcpFailur
 tcpFailureDetector.member.disappeared=Verification complete. Member 
disappeared[{0}]
 tcpFailureDetector.memberDisappeared.verify=Received memberDisappeared[{0}] 
message. Will verify.
 tcpFailureDetector.performBasicCheck.memberAdded=Member added, even though we 
weren''t notified:[{0}]
+tcpFailureDetector.recievedPacket=Received a failure detector packet [{0}]
 tcpFailureDetector.still.alive=Verification complete. Member still alive[{0}]
 tcpFailureDetector.suspectMember.alive=Suspect member, confirmed alive.[{0}]
 tcpFailureDetector.suspectMember.dead=Suspect member, confirmed dead.[{0}]
diff --git 
a/java/org/apache/catalina/tribes/group/interceptors/TcpFailureDetector.java 
b/java/org/apache/catalina/tribes/group/interceptors/TcpFailureDetector.java
index 8c20b26965..fec2241032 100644
--- a/java/org/apache/catalina/tribes/group/interceptors/TcpFailureDetector.java
+++ b/java/org/apache/catalina/tribes/group/interceptors/TcpFailureDetector.java
@@ -113,7 +113,7 @@ public class TcpFailureDetector extends 
ChannelInterceptorBase implements TcpFai
         if ( process ) {
             super.messageReceived(msg);
         } else if ( log.isDebugEnabled() ) {
-            log.debug("Received a failure detector packet:"+msg);
+            log.debug(sm.getString("tcpFailureDetector.recievedPacket", msg));
         }
     }//messageReceived
 
diff --git 
a/java/org/apache/catalina/tribes/group/interceptors/TcpPingInterceptor.java 
b/java/org/apache/catalina/tribes/group/interceptors/TcpPingInterceptor.java
index e1a9302ba0..06a21c5540 100644
--- a/java/org/apache/catalina/tribes/group/interceptors/TcpPingInterceptor.java
+++ b/java/org/apache/catalina/tribes/group/interceptors/TcpPingInterceptor.java
@@ -179,8 +179,8 @@ public class TcpPingInterceptor extends 
ChannelInterceptorBase implements TcpPin
         //ignore the message, it doesn't have the flag set
         if ( process ) {
             super.messageReceived(msg);
-        } else if ( log.isDebugEnabled() ) {
-            log.debug("Received a TCP ping packet:"+msg);
+        } else if ( log.isTraceEnabled() ) {
+            log.trace("Received a TCP ping packet:" + msg);
         }
     }//messageReceived
 
diff --git a/java/org/apache/catalina/tribes/membership/LocalStrings.properties 
b/java/org/apache/catalina/tribes/membership/LocalStrings.properties
index 2142f878a1..94344ccc0e 100644
--- a/java/org/apache/catalina/tribes/membership/LocalStrings.properties
+++ b/java/org/apache/catalina/tribes/membership/LocalStrings.properties
@@ -26,9 +26,15 @@ mcastService.noStart=Multicast send is not started or 
enabled.
 mcastServiceImpl.bind=Attempting to bind the multicast socket to [{0}:{1}]
 mcastServiceImpl.bind.failed=Binding to multicast address, failed. Binding to 
port only.
 mcastServiceImpl.error.receiving=Error receiving mcast package. Sleeping 500ms
+mcastServiceImpl.error.receivingNoSleep=Error receiving multicast package
 mcastServiceImpl.invalid.startLevel=Invalid start level. Only acceptable 
levels are Channel.MBR_RX_SEQ and Channel.MBR_TX_SEQ
 mcastServiceImpl.invalid.stopLevel=Invalid stop level. Only acceptable levels 
are Channel.MBR_RX_SEQ and Channel.MBR_TX_SEQ
+mcastServiceImpl.invalidMemberPackage=Invalid member multicast package
+mcastServiceImpl.memberAdd=Add member [{0}]
 mcastServiceImpl.memberDisappeared.failed=Unable to process member disappeared 
message.
+mcastServiceImpl.memberExpire=Expire member [{0}]
+mcastServiceImpl.memberShutdown=Member [{0}] has shutdown
+mcastServiceImpl.messageError=Unable to decode message
 mcastServiceImpl.packet.tooLong=Multicast packet received was too long, 
dropping package:[{0}]
 mcastServiceImpl.receive.running=McastService.receive already running.
 mcastServiceImpl.recovery=Tribes membership running recovery thread. 
Multicasting is not functional.
diff --git a/java/org/apache/catalina/tribes/membership/McastServiceImpl.java 
b/java/org/apache/catalina/tribes/membership/McastServiceImpl.java
index fdaa140b01..e3f05d423d 100644
--- a/java/org/apache/catalina/tribes/membership/McastServiceImpl.java
+++ b/java/org/apache/catalina/tribes/membership/McastServiceImpl.java
@@ -401,7 +401,7 @@ public class McastServiceImpl {
         final Thread currentThread = Thread.currentThread();
         if (Arrays.equals(m.getCommand(), Member.SHUTDOWN_PAYLOAD)) {
             if (log.isDebugEnabled()) {
-                log.debug("Member has shutdown:" + m);
+                log.debug(sm.getString("mcastServiceImpl.memberShutdown", m));
             }
             membership.removeMember(m);
             t = new Runnable() {
@@ -418,7 +418,7 @@ public class McastServiceImpl {
             };
         } else if (membership.memberAlive(m)) {
             if (log.isDebugEnabled()) {
-                log.debug("Mcast add member " + m);
+                log.debug(sm.getString("mcastServiceImpl.memberAdd", m));
             }
             t = new Runnable() {
                 @Override
@@ -449,8 +449,8 @@ public class McastServiceImpl {
             for (int i=0; i<count; i++) {
                 try {
                     data[i] = buffer.extractPackage(true);
-                }catch (IllegalStateException ise) {
-                    log.debug("Unable to decode message.",ise);
+                } catch (IllegalStateException ise) {
+                    log.debug(sm.getString("mcastServiceImpl.messageError"), 
ise);
                 }
             }
             Runnable t = new Runnable() {
@@ -490,7 +490,7 @@ public class McastServiceImpl {
             Member[] expired = membership.expire(timeToExpiration);
             for (final Member member : expired) {
                 if (log.isDebugEnabled()) {
-                    log.debug("Mcast expire  member " + member);
+                    log.debug(sm.getString("mcastServiceImpl.memberExpire", 
member));
                 }
                 try {
                     Runnable t = new Runnable() {
@@ -594,13 +594,17 @@ public class McastServiceImpl {
                     //we can ignore this, as it means we have an invalid 
package
                     //but we will log it to debug
                     if ( log.isDebugEnabled() ) {
-                        log.debug("Invalid member mcast package.",ax);
+                        
log.debug(sm.getString("mcastServiceImpl.invalidMemberPackage"), ax);
                     }
                 } catch ( Exception x ) {
                     if (errorCounter==0 && doRunReceiver) {
                         
log.warn(sm.getString("mcastServiceImpl.error.receiving"),x);
                     } else if (log.isDebugEnabled()) {
-                        log.debug("Error receiving mcast 
package"+(doRunReceiver?". Sleeping 500ms":"."),x);
+                        if (doRunReceiver) {
+                            
log.debug(sm.getString("mcastServiceImpl.error.receiving"), x);
+                        } else {
+                            
log.warn(sm.getString("mcastServiceImpl.error.receivingNoSleep"), x);
+                        }
                     }
                     if (doRunReceiver) {
                         try {
diff --git a/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java 
b/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java
index 3b91ac0290..9e1b6f78b5 100644
--- a/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java
+++ b/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java
@@ -895,13 +895,13 @@ public abstract class AbstractReplicatedMap<K,V>
             removed = (mapMembers.remove(member) != null );
             if (!removed) {
                 if (log.isDebugEnabled()) {
-                    log.debug("Member["+member+"] disappeared, but was not 
present in the map.");
+                    
log.debug(sm.getString("replicatedMap.member.disappeared.unknown", member));
                 }
                 return; //the member was not part of our map.
             }
         }
         if (log.isInfoEnabled()) {
-            log.info(sm.getString("abstractReplicatedMap.member.disappeared", 
member));
+            log.info(sm.getString("replicatedMap.member.disappeared", member));
         }
         long start = System.currentTimeMillis();
         Iterator<Map.Entry<K,MapEntry<K,V>>> i = 
innerMap.entrySet().iterator();
@@ -913,7 +913,7 @@ public abstract class AbstractReplicatedMap<K,V>
             }
             if (entry.isPrimary() && inSet(member,entry.getBackupNodes())) {
                 if (log.isDebugEnabled()) {
-                    log.debug("[1] Primary choosing a new backup");
+                    log.debug(sm.getString("abstractReplicatedMap.newBackup"));
                 }
                 try {
                     Member[] backup = publishEntryInfo(entry.getKey(), 
entry.getValue());
@@ -924,7 +924,7 @@ public abstract class AbstractReplicatedMap<K,V>
                 }
             } else if (member.equals(entry.getPrimary())) {
                 if (log.isDebugEnabled()) {
-                    log.debug("[2] Primary disappeared");
+                    
log.debug(sm.getString("abstractReplicatedMap.primaryDisappeared"));
                 }
                 entry.setPrimary(null);
             } //end if
@@ -936,7 +936,7 @@ public abstract class AbstractReplicatedMap<K,V>
                  entry.getBackupNodes()[0].equals(member) ) {
                 //remove proxies that have no backup nor primaries
                 if (log.isDebugEnabled()) {
-                    log.debug("[3] Removing orphaned proxy");
+                    
log.debug(sm.getString("abstractReplicatedMap.removeOrphan"));
                 }
                 i.remove();
             } else if ( entry.getPrimary() == null &&
@@ -946,7 +946,7 @@ public abstract class AbstractReplicatedMap<K,V>
                         
entry.getBackupNodes()[0].equals(channel.getLocalMember(false)) ) {
                 try {
                     if (log.isDebugEnabled()) {
-                        log.debug("[4] Backup becoming primary");
+                        
log.debug(sm.getString("abstractReplicatedMap.newPrimary"));
                     }
                     entry.setPrimary(channel.getLocalMember(false));
                     entry.setBackup(false);
diff --git a/java/org/apache/catalina/tribes/tipis/LocalStrings.properties 
b/java/org/apache/catalina/tribes/tipis/LocalStrings.properties
index 604c31b899..b85b37c8a4 100644
--- a/java/org/apache/catalina/tribes/tipis/LocalStrings.properties
+++ b/java/org/apache/catalina/tribes/tipis/LocalStrings.properties
@@ -22,10 +22,13 @@ abstractReplicatedMap.leftOver.pingMsg=PING message has 
been received beyond the
 abstractReplicatedMap.mapMember.unavailable=Member[{0}] is not available yet.
 abstractReplicatedMap.mapMemberAdded.added=Map member added:[{0}]
 abstractReplicatedMap.mapMemberAdded.nullMember=Notified member is not 
registered in the membership:[{0}].
-abstractReplicatedMap.member.disappeared=Member[{0}] disappeared. Related map 
entries will be relocated to the new node.
+abstractReplicatedMap.newBackup=Primary choosing a new backup
+abstractReplicatedMap.newPrimary=Backup becoming primary
 abstractReplicatedMap.ping.stateTransferredMember=Member[{0}] is state 
transferred but not available yet.
 abstractReplicatedMap.ping.timeout=Member[{0}] in the Map[{1}] has timed-out 
in the ping processing.
+abstractReplicatedMap.primaryDisappeared=Primary disappeared
 abstractReplicatedMap.relocate.complete=Relocation of map entries was complete 
in [{0}] ms.
+abstractReplicatedMap.removeOrphan=Removing orphaned proxy
 abstractReplicatedMap.transferState.noReplies=Transfer state, 0 replies, 
probably a timeout.
 abstractReplicatedMap.unable.deserialize.MapMessage=Unable to deserialize 
MapMessage.
 abstractReplicatedMap.unable.diffObject=Unable to diff object. Will replicate 
the entire object instead.
@@ -48,6 +51,7 @@ mapMessage.deserialize.error.key=Failed to deserialize 
MapMessage key
 mapMessage.deserialize.error.value=Failed to deserialize MapMessage value
 
 replicatedMap.member.disappeared=Member[{0}] disappeared. Related map entries 
will be relocated to the new node.
+replicatedMap.member.disappeared.unknown=Member[{0}] disappeared, but was not 
present in the map.
 replicatedMap.relocate.complete=Relocation of map entries was complete in 
[{0}] ms.
 replicatedMap.unable.relocate=Unable to relocate[{0}] to a new backup node
 replicatedMap.unableReplicate.completely=Unable to replicate backup key:[{0}]. 
Success nodes:[{1}]. Failed nodes:[{2}].
diff --git a/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java 
b/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java
index ff4a867dfd..dfd3b959cf 100644
--- a/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java
+++ b/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java
@@ -191,7 +191,7 @@ public class ReplicatedMap<K,V> extends 
AbstractReplicatedMap<K,V> {
             removed = (mapMembers.remove(member) != null );
             if (!removed) {
                 if (log.isDebugEnabled()) {
-                    log.debug("Member["+member+"] disappeared, but was not 
present in the map.");
+                    
log.debug(sm.getString("replicatedMap.member.disappeared.unknown", member));
                 }
                 return; //the member was not part of our map.
             }
diff --git a/java/org/apache/catalina/tribes/transport/LocalStrings.properties 
b/java/org/apache/catalina/tribes/transport/LocalStrings.properties
index 2d09e7d751..e2d64970a2 100644
--- a/java/org/apache/catalina/tribes/transport/LocalStrings.properties
+++ b/java/org/apache/catalina/tribes/transport/LocalStrings.properties
@@ -19,6 +19,7 @@ pooledSender.closed.queue=Queue is closed
 
 receiverBase.bind.failed=Failed bind replication listener on address:[{0}]
 receiverBase.socket.bind=Receiver Server Socket bound to:[{0}]
+receiverBase.start=Starting replication listener on address [{0}]
 receiverBase.udp.bind=UDP Receiver Server Socket bound to:[{0}]
 receiverBase.unable.bind=Unable to bind server socket to:[{0}] throwing error.
 receiverBase.unable.bind.udp=Unable to bind UDP socket to:[{0}] throwing error.
diff --git a/java/org/apache/catalina/tribes/transport/ReceiverBase.java 
b/java/org/apache/catalina/tribes/transport/ReceiverBase.java
index efc194a172..507865cd7a 100644
--- a/java/org/apache/catalina/tribes/transport/ReceiverBase.java
+++ b/java/org/apache/catalina/tribes/transport/ReceiverBase.java
@@ -183,7 +183,7 @@ public abstract class ReceiverBase implements 
ChannelReceiver, ListenCallback, R
                     host = InetAddress.getLocalHost().getHostAddress();
                 }
                 if (log.isDebugEnabled()) {
-                    log.debug("Starting replication listener on address:"+ 
host);
+                    log.debug(sm.getString("receiverBase.start", host));
                 }
                 bind = InetAddress.getByName(host);
             } catch (IOException ioe) {
diff --git 
a/java/org/apache/catalina/tribes/transport/nio/LocalStrings.properties 
b/java/org/apache/catalina/tribes/transport/nio/LocalStrings.properties
index d59e0d77dc..31fda7d8d0 100644
--- a/java/org/apache/catalina/tribes/transport/nio/LocalStrings.properties
+++ b/java/org/apache/catalina/tribes/transport/nio/LocalStrings.properties
@@ -16,6 +16,9 @@
 nioReceiver.alreadyStarted=ServerSocketChannel already started
 nioReceiver.cleanup.fail=Unable to cleanup on selector close
 nioReceiver.clientDisconnect=Replication client disconnected, error when 
polling key. Ignoring client.
+nioReceiver.closeError=Close error
+nioReceiver.eventsError=Error processing events
+nioReceiver.noThread=No TcpReplicationThread available
 nioReceiver.requestError=Unable to process request in NioReceiver
 nioReceiver.run.fail=Unable to run replication listener
 nioReceiver.start.fail=Unable to start cluster receiver
diff --git a/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java 
b/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java
index 6660a57496..53ccc6d58b 100644
--- a/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java
+++ b/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java
@@ -191,16 +191,16 @@ public class NioReceiver extends ReceiverBase implements 
Runnable, NioReceiverMB
         key.attach(null);
         if (key.channel() instanceof SocketChannel) {
             try { ((SocketChannel)key.channel()).socket().close(); } catch 
(IOException e) { if (log.isDebugEnabled()) {
-                log.debug("", e);
+                log.debug(sm.getString("nioReceiver.closeError"), e);
             } }
         }
         if (key.channel() instanceof DatagramChannel) {
             try { ((DatagramChannel)key.channel()).socket().close(); } catch 
(Exception e) { if (log.isDebugEnabled()) {
-                log.debug("", e);
+                log.debug(sm.getString("nioReceiver.closeError"), e);
             } }
         }
         try { key.channel().close(); } catch (IOException e) { if 
(log.isDebugEnabled()) {
-            log.debug("", e);
+            log.debug(sm.getString("nioReceiver.closeError"), e);
         } }
 
     }
@@ -347,7 +347,7 @@ public class NioReceiver extends ReceiverBase implements 
Runnable, NioReceiverMB
                 datagramChannel.close();
             }catch (Exception iox) {
                 if (log.isDebugEnabled()) {
-                    log.debug("Unable to close datagram channel.",iox);
+                    log.debug(sm.getString("nioReceiver.closeError"), iox);
                 }
             }
             datagramChannel=null;
@@ -474,7 +474,7 @@ public class NioReceiver extends ReceiverBase implements 
Runnable, NioReceiverMB
             // thread becomes available, the thread pool itself has a waiting 
mechanism
             // so we will not wait here.
             if (log.isDebugEnabled()) {
-                log.debug("No TcpReplicationThread available");
+                log.debug(sm.getString("nioReceiver.noThread"));
             }
         } else {
             // invoking this wakes up the worker thread then returns
diff --git 
a/java/org/apache/catalina/tribes/transport/nio/NioReplicationTask.java 
b/java/org/apache/catalina/tribes/transport/nio/NioReplicationTask.java
index a354458158..7edf36b9ed 100644
--- a/java/org/apache/catalina/tribes/transport/nio/NioReplicationTask.java
+++ b/java/org/apache/catalina/tribes/transport/nio/NioReplicationTask.java
@@ -110,7 +110,7 @@ public class NioReplicationTask extends AbstractRxTask {
             } else if ( e instanceof IOException ) {
                 //don't spew out stack traces for IO exceptions unless debug 
is enabled.
                 if (log.isDebugEnabled()) {
-                    log.debug ("IOException in replication worker, unable to 
drain channel. Probable cause: Keep alive socket closed["+e.getMessage()+"].", 
e);
+                    
log.debug(sm.getString("nioReplicationTask.unable.drainChannel.ioe", 
e.getMessage()), e);
                 } else {
                     log.warn 
(sm.getString("nioReplicationTask.unable.drainChannel.ioe", e.getMessage()));
                 }
diff --git a/java/org/apache/catalina/valves/ErrorReportValve.java 
b/java/org/apache/catalina/valves/ErrorReportValve.java
index 4c55b81be2..6fd08a9700 100644
--- a/java/org/apache/catalina/valves/ErrorReportValve.java
+++ b/java/org/apache/catalina/valves/ErrorReportValve.java
@@ -329,7 +329,7 @@ public class ErrorReportValve extends ValveBase {
             } catch (Throwable t) {
                 ExceptionUtils.handleThrowable(t);
                 if (container.getLogger().isDebugEnabled()) {
-                    container.getLogger().debug("Failure to set the 
content-type of response", t);
+                    
container.getLogger().debug(sm.getString("errorReportValve.contentTypeFail"), 
t);
                 }
             }
             Writer writer = response.getReporter();
diff --git a/java/org/apache/catalina/valves/ExtendedAccessLogValve.java 
b/java/org/apache/catalina/valves/ExtendedAccessLogValve.java
index 4ed97e9fa2..59d1e07d54 100644
--- a/java/org/apache/catalina/valves/ExtendedAccessLogValve.java
+++ b/java/org/apache/catalina/valves/ExtendedAccessLogValve.java
@@ -491,8 +491,8 @@ public class ExtendedAccessLogValve extends AccessLogValve {
 
     @Override
     protected AccessLogElement[] createLogElements() {
-        if (log.isDebugEnabled()) {
-            log.debug("decodePattern, pattern =" + pattern);
+        if (log.isTraceEnabled()) {
+            log.trace("decodePattern, pattern =" + pattern);
         }
         List<AccessLogElement> list = new ArrayList<>();
 
diff --git a/java/org/apache/catalina/valves/JsonErrorReportValve.java 
b/java/org/apache/catalina/valves/JsonErrorReportValve.java
index c698ca3ce5..c073783150 100644
--- a/java/org/apache/catalina/valves/JsonErrorReportValve.java
+++ b/java/org/apache/catalina/valves/JsonErrorReportValve.java
@@ -93,7 +93,7 @@ public class JsonErrorReportValve extends ErrorReportValve {
             } catch (Throwable t) {
                 ExceptionUtils.handleThrowable(t);
                 if (container.getLogger().isDebugEnabled()) {
-                    container.getLogger().debug("Failure to set the 
content-type of response", t);
+                    
container.getLogger().debug(sm.getString("errorReportValve.contentTypeFail"), 
t);
                 }
             }
             Writer writer = response.getReporter();
diff --git a/java/org/apache/catalina/valves/LoadBalancerDrainingValve.java 
b/java/org/apache/catalina/valves/LoadBalancerDrainingValve.java
index 17c3e0a295..7d4378c642 100644
--- a/java/org/apache/catalina/valves/LoadBalancerDrainingValve.java
+++ b/java/org/apache/catalina/valves/LoadBalancerDrainingValve.java
@@ -157,7 +157,7 @@ public class LoadBalancerDrainingValve extends ValveBase {
                 !request.isRequestedSessionIdValid()) {
 
             if (containerLog.isDebugEnabled()) {
-                containerLog.debug("Load-balancer is in DISABLED state; 
draining this node");
+                
containerLog.debug(sm.getString("loadBalancerDrainingValve.draining"));
             }
 
             boolean ignoreRebalance = false;
@@ -187,8 +187,7 @@ public class LoadBalancerDrainingValve extends ValveBase {
 
             if (ignoreRebalance) {
                 if (containerLog.isDebugEnabled()) {
-                    containerLog.debug("Client is presenting a valid " + 
_ignoreCookieName +
-                            " cookie, re-balancing is being skipped");
+                    
containerLog.debug(sm.getString("loadBalancerDrainingValve.skip", 
_ignoreCookieName));
                 }
 
                 getNext().invoke(request, response);
diff --git a/java/org/apache/catalina/valves/LocalStrings.properties 
b/java/org/apache/catalina/valves/LocalStrings.properties
index 247139f0f1..13466d2f12 100644
--- a/java/org/apache/catalina/valves/LocalStrings.properties
+++ b/java/org/apache/catalina/valves/LocalStrings.properties
@@ -31,6 +31,7 @@ errorReportValve.errorPageIOException=Unable to display error 
page at [{0}] due
 errorReportValve.errorPageNotFound=Unable to find a static error page at [{0}]
 errorReportValve.exception=Exception
 errorReportValve.exceptionReport=Exception Report
+errorReportValve.contentTypeFail=Failure to set the content-type of response
 errorReportValve.message=Message
 errorReportValve.noDescription=No description available
 errorReportValve.note=Note
@@ -128,6 +129,9 @@ http.511.reason=Network Authentication Required
 jdbcAccessLogValve.close=Failed to close database
 jdbcAccessLogValve.exception=Exception performing insert access entry
 
+loadBalancerDrainingValve.draining=Load-balancer is in DISABLED state, 
draining this node
+loadBalancerDrainingValve.skip=Client is presenting a valid [{0}] cookie, 
re-balancing is being skipped
+
 patternTokenizer.unexpectedParenthesis=Unexpected ')' in pattern
 
 persistentValve.acquireFailed=The request for [{0}] did not obtain the per 
session Semaphore as no permit was available
@@ -137,6 +141,8 @@ persistentValve.requestIgnore=The request for [{0}] was 
ignored by this Valve as
 persistentValve.requestProcess=The request for [{0}] will be processed by this 
Valve as it does not match the configured filter
 persistentValve.sessionLoadFail=Loading session [{0}] from the store failed
 
+proxyErrorReportValve.error=Proxy error to [{0}]
+
 remoteCidrValve.invalid=Invalid configuration provided for [{0}]. See previous 
messages for details.
 remoteCidrValve.noPort=Request does not contain a valid server port. Request 
denied.
 remoteCidrValve.noRemoteIp=Client does not have an IP address. Request denied.
@@ -153,6 +159,7 @@ requestFilterValve.deny=Denied request for [{0}] based on 
property [{1}]
 sslValve.certError=Failed to process certificate string [{0}] to create a 
java.security.cert.X509Certificate object
 sslValve.invalidProvider=The SSL provider specified on the connector 
associated with this request of [{0}] is invalid. The certificate data could 
not be processed.
 
+stuckThreadDetectionValve.interrupted=Thread interrupted after the request is 
finished, ignoring
 stuckThreadDetectionValve.notifyStuckThreadCompleted=Thread [{0}] (id=[{3}]) 
was previously reported to be stuck but has completed. It was active for 
approximately [{1}] milliseconds.{2,choice,0#|0< There is/are still [{2}] 
thread(s) that are monitored by this Valve and may be stuck.}
 stuckThreadDetectionValve.notifyStuckThreadDetected=Thread [{0}] (id=[{6}]) 
has been active for [{1}] milliseconds (since [{2}]) to serve the same request 
for [{4}] and may be stuck (configured threshold for this 
StuckThreadDetectionValve is [{5}] seconds). There is/are [{3}] thread(s) in 
total that are monitored by this Valve and may be stuck.
 stuckThreadDetectionValve.notifyStuckThreadInterrupted=Thread [{0}] (id=[{5}]) 
has been interrupted because it was active for [{1}] milliseconds (since [{2}]) 
to serve the same request for [{3}] and was probably stuck (configured 
interruption threshold for this StuckThreadDetectionValve is [{4}] seconds).
diff --git a/java/org/apache/catalina/valves/ProxyErrorReportValve.java 
b/java/org/apache/catalina/valves/ProxyErrorReportValve.java
index 175ae8e330..37e0d58342 100644
--- a/java/org/apache/catalina/valves/ProxyErrorReportValve.java
+++ b/java/org/apache/catalina/valves/ProxyErrorReportValve.java
@@ -221,7 +221,7 @@ public class ProxyErrorReportValve extends ErrorReportValve 
{
                 IOTools.flow(inputStream, outputStream);
             } catch (URISyntaxException | IOException | 
IllegalArgumentException e) {
                 if (log.isDebugEnabled()) {
-                    log.debug("Proxy error to " + urlString, e);
+                    log.debug(sm.getString("proxyErrorReportValve.error", 
urlString), e);
                 }
                 // Ignore
             } finally {
diff --git a/java/org/apache/catalina/valves/StuckThreadDetectionValve.java 
b/java/org/apache/catalina/valves/StuckThreadDetectionValve.java
index cb1880e04d..e02a4ab1b7 100644
--- a/java/org/apache/catalina/valves/StuckThreadDetectionValve.java
+++ b/java/org/apache/catalina/valves/StuckThreadDetectionValve.java
@@ -321,7 +321,7 @@ public class StuckThreadDetectionValve extends ValveBase {
                     // going out from here, maybe already serving a new request
                     this.interruptionSemaphore.acquire();
                 } catch (InterruptedException e) {
-                    log.debug("thread interrupted after the request is 
finished, ignoring", e);
+                    
log.debug(sm.getString("stuckThreadDetectionValve.interrupted"), e);
                 }
                 // no need to release the semaphore, it will be GCed
             }
diff --git a/java/org/apache/catalina/valves/rewrite/LocalStrings.properties 
b/java/org/apache/catalina/valves/rewrite/LocalStrings.properties
index 34e6248834..db07290ebb 100644
--- a/java/org/apache/catalina/valves/rewrite/LocalStrings.properties
+++ b/java/org/apache/catalina/valves/rewrite/LocalStrings.properties
@@ -23,4 +23,6 @@ rewriteValve.closeError=Error closing configuration
 rewriteValve.invalidFlags=Invalid flag in [{0}] flags [{1}]
 rewriteValve.invalidLine=Invalid line [{0}]
 rewriteValve.invalidMapClassName=Invalid map class name [{0}]
+rewriteValve.noConfiguration=No configuration resource found [{0}]
+rewriteValve.readConfiguration=Read configuration from [/WEB-INF/{0}]
 rewriteValve.readError=Error reading configuration
diff --git a/java/org/apache/catalina/valves/rewrite/RewriteValve.java 
b/java/org/apache/catalina/valves/rewrite/RewriteValve.java
index 32e986514c..1277397483 100644
--- a/java/org/apache/catalina/valves/rewrite/RewriteValve.java
+++ b/java/org/apache/catalina/valves/rewrite/RewriteValve.java
@@ -144,13 +144,14 @@ public class RewriteValve extends ValveBase {
         // Process configuration file for this valve
         if (getContainer() instanceof Context) {
             context = true;
+            String webInfResourcePath = "/WEB-INF/" + resourcePath;
             is = ((Context) getContainer()).getServletContext()
-                .getResourceAsStream("/WEB-INF/" + resourcePath);
+                .getResourceAsStream(webInfResourcePath);
             if (containerLog.isDebugEnabled()) {
                 if (is == null) {
-                    containerLog.debug("No configuration resource found: 
/WEB-INF/" + resourcePath);
+                    
containerLog.debug(sm.getString("rewriteValve.noConfiguration", 
webInfResourcePath));
                 } else {
-                    containerLog.debug("Read configuration from: /WEB-INF/" + 
resourcePath);
+                    
containerLog.debug(sm.getString("rewriteValve.readConfiguration", 
webInfResourcePath));
                 }
             }
         } else if (getContainer() instanceof Host) {
diff --git a/java/org/apache/coyote/AbstractProcessor.java 
b/java/org/apache/coyote/AbstractProcessor.java
index efe3b3c035..5d10ae0f8b 100644
--- a/java/org/apache/coyote/AbstractProcessor.java
+++ b/java/org/apache/coyote/AbstractProcessor.java
@@ -212,7 +212,7 @@ public abstract class AbstractProcessor extends 
AbstractProcessorLight implement
                 }
             } catch (IOException ioe) {
                 if (getLog().isDebugEnabled()) {
-                    getLog().debug("Unable to write async data.", ioe);
+                    
getLog().debug(sm.getString("abstractProcessor.asyncFail"), ioe);
                 }
                 status = SocketEvent.ERROR;
                 request.setAttribute(RequestDispatcher.ERROR_EXCEPTION, ioe);
diff --git a/java/org/apache/coyote/LocalStrings.properties 
b/java/org/apache/coyote/LocalStrings.properties
index b44d97efab..d62168541e 100644
--- a/java/org/apache/coyote/LocalStrings.properties
+++ b/java/org/apache/coyote/LocalStrings.properties
@@ -25,6 +25,7 @@ 
abstractConnectionHandler.protocolexception.debug=ProtocolExceptions are normal,
 abstractConnectionHandler.socketexception.debug=SocketExceptions are normal, 
ignored
 abstractConnectionHandler.upgradeCreate=Created upgrade processor [{0}] for 
socket wrapper [{1}]
 
+abstractProcessor.asyncFail=Unable to write async data
 abstractProcessor.fallToDebug=\n\
 \ Note: further occurrences of request parsing errors will be logged at DEBUG 
level.
 abstractProcessor.hostInvalid=The host [{0}] is not valid
diff --git a/java/org/apache/coyote/ajp/AjpProcessor.java 
b/java/org/apache/coyote/ajp/AjpProcessor.java
index 76930461ca..5c071ef1b9 100644
--- a/java/org/apache/coyote/ajp/AjpProcessor.java
+++ b/java/org/apache/coyote/ajp/AjpProcessor.java
@@ -480,7 +480,7 @@ public class AjpProcessor extends AbstractProcessor {
                         socketWrapper.flush(true);
                     } catch (IOException e) {
                         if (getLog().isDebugEnabled()) {
-                            getLog().debug("Pong message failed", e);
+                            
getLog().debug(sm.getString("ajpprocessor.pongFail"), e);
                         }
                         setErrorState(ErrorState.CLOSE_CONNECTION_NOW, e);
                     }
@@ -490,7 +490,7 @@ public class AjpProcessor extends AbstractProcessor {
                     // Unexpected packet type. Unread body packets should have
                     // been swallowed in finish().
                     if (getLog().isDebugEnabled()) {
-                        getLog().debug("Unexpected message: " + type);
+                        
getLog().debug(sm.getString("ajpprocessor.unexpectedMessage", type));
                     }
                     setErrorState(ErrorState.CLOSE_CONNECTION_NOW, null);
                     break;
diff --git a/java/org/apache/coyote/ajp/LocalStrings.properties 
b/java/org/apache/coyote/ajp/LocalStrings.properties
index 54cd1da219..135820acfa 100644
--- a/java/org/apache/coyote/ajp/LocalStrings.properties
+++ b/java/org/apache/coyote/ajp/LocalStrings.properties
@@ -26,10 +26,12 @@ ajpnioprotocol.releaseStart=Iterating through our 
connections to release a socke
 ajpprocessor.certs.fail=Certificate conversion failed
 ajpprocessor.header.error=Header message parsing failed
 ajpprocessor.header.tooLong=Header message of length [{0}] received but the 
packetSize is only [{1}]
+ajpprocessor.pongFail=Pong message failed
 ajpprocessor.readtimeout=Timeout attempting to read data from the socket
 ajpprocessor.request.prepare=Error preparing request
 ajpprocessor.request.process=Error processing request
 ajpprocessor.response.invalidHeader=The HTTP response header [{0}] with value 
[{1}] has been removed from the response because it is invalid
+ajpprocessor.unexpectedMessage=Unexpected message type [{0}]
 ajpprocessor.unknownAttribute=Rejecting request due to unknown request 
attribute [{0}] received from reverse proxy
 
 ajpprotocol.noBio=The AJP BIO connector has been removed in Tomcat 8.5.x 
onwards. The AJP BIO connector configuration has been automatically switched to 
use the AJP NIO connector instead.
diff --git a/java/org/apache/coyote/http11/filters/GzipOutputFilter.java 
b/java/org/apache/coyote/http11/filters/GzipOutputFilter.java
index 2f82aa7ce3..16b28203c1 100644
--- a/java/org/apache/coyote/http11/filters/GzipOutputFilter.java
+++ b/java/org/apache/coyote/http11/filters/GzipOutputFilter.java
@@ -27,6 +27,7 @@ import org.apache.coyote.http11.OutputFilter;
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
 import org.apache.tomcat.util.buf.ByteChunk;
+import org.apache.tomcat.util.res.StringManager;
 
 /**
  * Gzip output filter.
@@ -36,6 +37,7 @@ import org.apache.tomcat.util.buf.ByteChunk;
 public class GzipOutputFilter implements OutputFilter {
 
     protected static final Log log = LogFactory.getLog(GzipOutputFilter.class);
+    private static final StringManager sm = 
StringManager.getManager(GzipOutputFilter.class);
 
 
     // ----------------------------------------------------- Instance Variables
@@ -115,7 +117,7 @@ public class GzipOutputFilter implements OutputFilter {
                 compressionStream.flush();
             } catch (IOException e) {
                 if (log.isDebugEnabled()) {
-                    log.debug("Ignored exception while flushing gzip filter", 
e);
+                    log.debug(sm.getString("gzipOutputFilter.flushFail"), e);
                 }
             }
         }
diff --git a/java/org/apache/coyote/http11/filters/LocalStrings.properties 
b/java/org/apache/coyote/http11/filters/LocalStrings.properties
index 3114a87d0a..3650316b88 100644
--- a/java/org/apache/coyote/http11/filters/LocalStrings.properties
+++ b/java/org/apache/coyote/http11/filters/LocalStrings.properties
@@ -29,4 +29,6 @@ chunkedInputFilter.invalidTrailerHeaderValue=Invalid trailer 
header value (contr
 chunkedInputFilter.maxExtension=maxExtensionSize exceeded
 chunkedInputFilter.maxTrailer=maxTrailerSize exceeded
 
+gzipOutputFilter.flushFail=Ignored exception while flushing gzip filter
+
 inputFilter.maxSwallow=maxSwallowSize exceeded
diff --git a/java/org/apache/jasper/JspC.java b/java/org/apache/jasper/JspC.java
index b15be65481..655942d34a 100644
--- a/java/org/apache/jasper/JspC.java
+++ b/java/org/apache/jasper/JspC.java
@@ -1062,8 +1062,7 @@ public class JspC extends Task implements Options {
         throws IOException
     {
         if (log.isDebugEnabled()) {
-            log.debug("Generating web mapping for file " + file
-                      + " using compilation context " + clctxt);
+            log.debug(Localizer.getMessage("jspc.generatingMapping", file, 
clctxt));
         }
 
         String className = clctxt.getServletClassName();
@@ -1227,7 +1226,7 @@ public class JspC extends Task implements Options {
     protected void processFile(String file) throws JasperException {
 
         if (log.isDebugEnabled()) {
-            log.debug("Processing file: " + file);
+            log.debug(Localizer.getMessage("jspc.processing", file));
         }
 
         ClassLoader originalClassLoader = null;
@@ -1270,7 +1269,7 @@ public class JspC extends Task implements Options {
             // the .java file
             if( clc.isOutDated(compile) ) {
                 if (log.isDebugEnabled()) {
-                    log.debug(jspUri + " is out dated, compiling...");
+                    log.debug(Localizer.getMessage("jspc.outdated", jspUri));
                 }
 
                 clc.compile(compile, true);
@@ -1279,7 +1278,7 @@ public class JspC extends Task implements Options {
             // Generate mapping
             generateWebMapping( file, clctxt );
             if ( showSuccess ) {
-                log.info( "Built File: " + file );
+                log.info(Localizer.getMessage("jspc.built", file));
             }
 
         } catch (JasperException je) {
@@ -1359,7 +1358,7 @@ public class JspC extends Task implements Options {
     @Override
     public void execute() {
         if(log.isDebugEnabled()) {
-            log.debug("execute() starting for " + pages.size() + " pages.");
+            log.debug(Localizer.getMessage("jspc.start", pages.size()));
         }
 
         try {
diff --git a/java/org/apache/jasper/compiler/AntCompiler.java 
b/java/org/apache/jasper/compiler/AntCompiler.java
index d22983d21a..e80d9b0290 100644
--- a/java/org/apache/jasper/compiler/AntCompiler.java
+++ b/java/org/apache/jasper/compiler/AntCompiler.java
@@ -271,8 +271,7 @@ public class AntCompiler extends Compiler {
 
         if( log.isDebugEnabled() ) {
             long t2 = System.currentTimeMillis();
-            log.debug("Compiled " + ctxt.getServletJavaFileName() + " "
-                      + (t2-t1) + "ms");
+            log.debug(Localizer.getMessage("jsp.compiled", 
ctxt.getServletJavaFileName(), Long.valueOf(t2 - t1)));
         }
 
         logger = null;
diff --git a/java/org/apache/jasper/compiler/Compiler.java 
b/java/org/apache/jasper/compiler/Compiler.java
index e0c1a5c766..f3d8bcd82e 100644
--- a/java/org/apache/jasper/compiler/Compiler.java
+++ b/java/org/apache/jasper/compiler/Compiler.java
@@ -534,8 +534,7 @@ public abstract class Compiler {
                 }
             } catch (Exception e) {
                 if (log.isDebugEnabled()) {
-                    log.debug("Problem accessing resource. Treat as outdated.",
-                            e);
+                    
log.debug(Localizer.getMessage("jsp.error.compiler.missingResource"), e);
                 }
                 return true;
             }
diff --git a/java/org/apache/jasper/compiler/JDTCompiler.java 
b/java/org/apache/jasper/compiler/JDTCompiler.java
index 671d324fe9..8ab753b541 100644
--- a/java/org/apache/jasper/compiler/JDTCompiler.java
+++ b/java/org/apache/jasper/compiler/JDTCompiler.java
@@ -602,8 +602,7 @@ public class JDTCompiler extends 
org.apache.jasper.compiler.Compiler {
 
         if( log.isDebugEnabled() ) {
             long t2=System.currentTimeMillis();
-            log.debug("Compiled " + ctxt.getServletJavaFileName() + " "
-                      + (t2-t1) + "ms");
+            log.debug(Localizer.getMessage("jsp.compiled", 
ctxt.getServletJavaFileName(), Long.valueOf(t2 - t1)));
         }
 
         if (ctxt.isPrototypeMode()) {
diff --git a/java/org/apache/jasper/compiler/JspReader.java 
b/java/org/apache/jasper/compiler/JspReader.java
index 20efad478a..df3ee8a0f4 100644
--- a/java/org/apache/jasper/compiler/JspReader.java
+++ b/java/org/apache/jasper/compiler/JspReader.java
@@ -127,7 +127,7 @@ class JspReader {
                     reader.close();
                 } catch (Exception any) {
                     if(log.isDebugEnabled()) {
-                        log.debug("Exception closing reader: ", any);
+                        
log.debug(Localizer.getMessage("jsp.error.file.close"), any);
                     }
                 }
             }
diff --git a/java/org/apache/jasper/optimizations/ELInterpreterTagSetters.java 
b/java/org/apache/jasper/optimizations/ELInterpreterTagSetters.java
index 9a15292b42..de6b954d40 100644
--- a/java/org/apache/jasper/optimizations/ELInterpreterTagSetters.java
+++ b/java/org/apache/jasper/optimizations/ELInterpreterTagSetters.java
@@ -26,6 +26,7 @@ import javax.el.ELResolver;
 import org.apache.jasper.JspCompilationContext;
 import org.apache.jasper.compiler.ELInterpreter;
 import org.apache.jasper.compiler.JspUtil;
+import org.apache.jasper.compiler.Localizer;
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
 
@@ -110,7 +111,7 @@ public class ELInterpreterTagSetters implements 
ELInterpreter {
                     BigDecimal unused = new BigDecimal(m.group(2));
                     result = "new java.math.BigDecimal(\"" + m.group(2) + 
"\")";
                 } catch (NumberFormatException e) {
-                    log.debug("Failed to convert [" + m.group(2) + "] to 
BigDecimal", e);
+                    log.debug(Localizer.getMessage("jsp.error.typeConversion", 
m.group(2), "BigDecimal"), e);
                     // Continue and resolve the value at runtime
                 }
             }
@@ -128,7 +129,7 @@ public class ELInterpreterTagSetters implements 
ELInterpreter {
                         result = "Long.valueOf(\"" + m.group(2) + "\")";
                     }
                 } catch (NumberFormatException e) {
-                    log.debug("Failed to convert [" + m.group(2) + "] to 
Long", e);
+                    log.debug(Localizer.getMessage("jsp.error.typeConversion", 
m.group(2), "Long"), e);
                     // Continue and resolve the value at runtime
                 }
             }
@@ -145,7 +146,7 @@ public class ELInterpreterTagSetters implements 
ELInterpreter {
                         result = "Integer.valueOf(\"" + m.group(2) + "\")";
                     }
                 } catch (NumberFormatException e) {
-                    log.debug("Failed to convert [" + m.group(2) + "] to 
Integer", e);
+                    log.debug(Localizer.getMessage("jsp.error.typeConversion", 
m.group(2), "Integer"), e);
                     // Continue and resolve the value at runtime
                 }
             }
@@ -163,7 +164,7 @@ public class ELInterpreterTagSetters implements 
ELInterpreter {
                         result = "Short.valueOf(\"" + m.group(2) + "\")";
                     }
                 } catch (NumberFormatException e) {
-                    log.debug("Failed to convert [" + m.group(2) + "] to 
Short", e);
+                    log.debug(Localizer.getMessage("jsp.error.typeConversion", 
m.group(2), "Short"), e);
                     // Continue and resolve the value at runtime
                 }
             }
@@ -181,7 +182,7 @@ public class ELInterpreterTagSetters implements 
ELInterpreter {
                         result = "Byte.valueOf(\"" + m.group(2) + "\")";
                     }
                 } catch (NumberFormatException e) {
-                    log.debug("Failed to convert [" + m.group(2) + "] to 
Byte", e);
+                    log.debug(Localizer.getMessage("jsp.error.typeConversion", 
m.group(2), "Byte"), e);
                     // Continue and resolve the value at runtime
                 }
             }
@@ -198,7 +199,7 @@ public class ELInterpreterTagSetters implements 
ELInterpreter {
                         result = "Double.valueOf(\"" + m.group(2) + "\")";
                     }
                 } catch (NumberFormatException e) {
-                    log.debug("Failed to convert [" + m.group(2) + "] to 
Double", e);
+                    log.debug(Localizer.getMessage("jsp.error.typeConversion", 
m.group(2), "Double"), e);
                     // Continue and resolve the value at runtime
                 }
             }
@@ -216,7 +217,7 @@ public class ELInterpreterTagSetters implements 
ELInterpreter {
                         result = "Float.valueOf(\"" + m.group(2) + "\")";
                     }
                 } catch (NumberFormatException e) {
-                    log.debug("Failed to convert [" + m.group(2) + "] to 
Float", e);
+                    log.debug(Localizer.getMessage("jsp.error.typeConversion", 
m.group(2), "Float"), e);
                     // Continue and resolve the value at runtime
                 }
             }
@@ -229,7 +230,7 @@ public class ELInterpreterTagSetters implements 
ELInterpreter {
                     BigInteger unused = new BigInteger(m.group(2));
                     result = "new java.math.BigInteger(\"" + m.group(2) + 
"\")";
                 } catch (NumberFormatException e) {
-                    log.debug("Failed to convert [" + m.group(2) + "] to 
BigInteger", e);
+                    log.debug(Localizer.getMessage("jsp.error.typeConversion", 
m.group(2), "BigInteger"), e);
                     // Continue and resolve the value at runtime
                 }
             }
@@ -242,7 +243,7 @@ public class ELInterpreterTagSetters implements 
ELInterpreter {
                     Enum<?> enumValue = Enum.valueOf((Class<? extends Enum>) 
expectedType, m.group(2));
                     result = expectedType.getName() + "." + enumValue.name();
                 } catch (IllegalArgumentException iae) {
-                    log.debug("Failed to convert [" + m.group(2) + "] to Enum 
type [" + expectedType.getName() + "]", iae);
+                    log.debug(Localizer.getMessage("jsp.error.typeConversion", 
m.group(2), "Enum[" + expectedType.getName() + "]"), iae);
                     // Continue and resolve the value at runtime
                 }
             }
diff --git a/java/org/apache/jasper/resources/LocalStrings.properties 
b/java/org/apache/jasper/resources/LocalStrings.properties
index d3d3a1ac77..516f3980cc 100644
--- a/java/org/apache/jasper/resources/LocalStrings.properties
+++ b/java/org/apache/jasper/resources/LocalStrings.properties
@@ -15,6 +15,7 @@
 
 jasper.error.emptybodycontent.nonempty=According to TLD, tag [{0}] must be 
empty, but is not
 
+jsp.compiled=Compiled [{0}] {1}ms
 jsp.engine.info=Jasper JSP {0} Engine
 jsp.error.URLMustStartWithSlash=Path [{0}] must start with a slash character
 jsp.error.action.isnottagfile=[{0}] action can be used in tag files only
@@ -55,6 +56,7 @@ jsp.error.compilation.jdtProblemError=Error processing JDT 
problems list
 jsp.error.compilation.source=Error loading source file [{0}]
 jsp.error.compiler=No Java compiler available
 jsp.error.compiler.config=No Java compiler available for configuration options 
compilerClassName: [{0}] and compiler: [{1}]
+jsp.error.compiler.missingResource=Problem accessing resource, treat as 
outdated
 jsp.error.config_pagedir_encoding_mismatch=Page-encoding specified in 
jsp-property-group [{0}] is different from that specified in page directive 
[{1}]
 jsp.error.corresponding.servlet=Generated servlet error:\n
 jsp.error.could.not.add.taglibraries=Could not add one or more tag libraries.
@@ -75,6 +77,7 @@ jsp.error.el_interpreter_class.instantiation=Failed to load 
or instantiate ELInt
 jsp.error.fallback.invalidUse=jsp:fallback must be a direct child of jsp:plugin
 jsp.error.file.already.registered=Recursive include of file [{0}]
 jsp.error.file.cannot.read=Cannot read file: [{0}]
+jsp.error.file.close=Exception closing reader
 jsp.error.file.not.found=JSP file [{0}] not found
 jsp.error.flush=Exception occurred when flushing data
 jsp.error.fragmentwithtype=Cannot specify both ''fragment'' and ''type'' 
attributes.  If ''fragment'' is present, ''type'' is fixed as ''{0}''
@@ -226,6 +229,7 @@ jsp.error.tld.missing_jar=Missing JAR resource [{0}] 
containing TLD
 jsp.error.tld.unable_to_get_jar=Unable to get JAR resource [{0}] containing 
TLD: [{1}]
 jsp.error.tlv.invalid.page=Validation error messages from TagLibraryValidator 
for [{0}] in [{1}]
 jsp.error.tlvclass.instantiation=Failed to load or instantiate 
TagLibraryValidator class: [{0}]
+jsp.error.typeConversion=Failed to convert [{0}] to {1}
 jsp.error.unable.compile=Unable to compile class for JSP
 jsp.error.unable.deleteClassFile=Unable to delete class file [{0}]
 jsp.error.unable.getType=Unable to extract type from [{0}]
@@ -328,6 +332,7 @@ jsp.warning.unsupported.sourceVM=Unsupported source VM 
[{0}] requested, using [{
 jsp.warning.unsupported.targetVM=Unsupported target VM [{0}] requested, using 
[{1}]
 jsp.warning.xpoweredBy=Warning: Invalid value for the initParam xpoweredBy. 
Will use the default value of "false"
 
+jspc.built=Built file [{0}]
 jspc.delete.fail=Failed to delete file [{0}]
 jspc.error.compilation=Compilation error
 jspc.error.fileDoesNotExist=The file argument [{0}] does not exist
@@ -338,8 +343,12 @@ jspc.error.minThreadCount=There must be at least one 
thread [{0}]
 jspc.error.parseThreadCount=Cannot parse thread count [{0}]
 jspc.error.unknownOption=Unrecognized option [{0}]. Use -help for help.
 jspc.errorCount=Error count: [{0}]
+jspc.generatingMapping=Generating web mapping for file [{0}] using compilation 
context [{1}]
 jspc.generation.result=Generation completed with [{0}] errors in [{1}] 
milliseconds
 jspc.implicit.uriRoot=uriRoot implicitly set to [{0}]
+jspc.outdated=[{0}] is outdated and is compiled
+jspc.processing=Processing file [{0}]
+jspc.start=Execute starting for {0} pages
 jspc.usage=Usage: jspc <options> [--] <jsp files>\n\
 where jsp files is\n\
 \    -webapp <dir>         A directory containing a web-app, whose JSP pages\n\
diff --git a/java/org/apache/tomcat/util/buf/LocalStrings.properties 
b/java/org/apache/tomcat/util/buf/LocalStrings.properties
index 381dc26d5c..eabc61360a 100644
--- a/java/org/apache/tomcat/util/buf/LocalStrings.properties
+++ b/java/org/apache/tomcat/util/buf/LocalStrings.properties
@@ -32,6 +32,9 @@ hexUtils.fromHex.oddDigits=The input must consist of an even 
number of hex digit
 
 messageBytes.illegalCharacter=The Unicode character [{0}] at code point [{1}] 
cannot be encoded as it is outside the permitted range of 0 to 255
 
+stringCache.byteTime=ByteCache generation time: {0}ms
+stringCache.charTime=CharCache generation time: {0}ms
+
 uDecoder.eof=End of file (EOF)
 uDecoder.isHexDigit=The hexadecimal encoding is invalid
 uDecoder.noSlash=The encoded slash character is not allowed
diff --git a/java/org/apache/tomcat/util/buf/StringCache.java 
b/java/org/apache/tomcat/util/buf/StringCache.java
index 929ec58607..332690320a 100644
--- a/java/org/apache/tomcat/util/buf/StringCache.java
+++ b/java/org/apache/tomcat/util/buf/StringCache.java
@@ -27,6 +27,7 @@ import java.util.TreeMap;
 
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
+import org.apache.tomcat.util.res.StringManager;
 
 /**
  * This class implements a String cache for ByteChunk and CharChunk.
@@ -37,6 +38,7 @@ public class StringCache {
 
 
     private static final Log log = LogFactory.getLog(StringCache.class);
+    private static final StringManager sm = 
StringManager.getManager(StringCache.class);
 
 
     // ------------------------------------------------------- Static Variables
@@ -289,7 +291,7 @@ public class StringCache {
                         bcCache = tempbcCache;
                         if (log.isDebugEnabled()) {
                             long t2 = System.currentTimeMillis();
-                            log.debug("ByteCache generation time: " + (t2 - 
t1) + "ms");
+                            log.debug(sm.getString("stringCache.byteTime", 
Long.valueOf(t2 - t1)));
                         }
                     } else {
                         bcCount++;
@@ -402,7 +404,7 @@ public class StringCache {
                         ccCache = tempccCache;
                         if (log.isDebugEnabled()) {
                             long t2 = System.currentTimeMillis();
-                            log.debug("CharCache generation time: " + (t2 - 
t1) + "ms");
+                            log.debug(sm.getString("stringCache.charTime", 
Long.valueOf(t2 - t1)));
                         }
                     } else {
                         ccCount++;
diff --git a/java/org/apache/tomcat/util/http/LocalStrings.properties 
b/java/org/apache/tomcat/util/http/LocalStrings.properties
index 82d556b5d7..3a1fb8d1fd 100644
--- a/java/org/apache/tomcat/util/http/LocalStrings.properties
+++ b/java/org/apache/tomcat/util/http/LocalStrings.properties
@@ -37,6 +37,7 @@ parameters.maxCountFail.fallToDebug=\n\
 parameters.multipleDecodingFail=Character decoding failed. A total of [{0}] 
failures were detected but only the first was logged. Enable debug level 
logging for this logger to log all failures.
 parameters.noequal=Parameter starting at position [{0}] and ending at position 
[{1}] with a value of [{2}] was not followed by an ''='' character
 
+rfc6265CookieProcessor.expectedBytes=Parsing cookie as String, expected bytes
 rfc6265CookieProcessor.invalidCharInValue=An invalid character [{0}] was 
present in the Cookie value
 rfc6265CookieProcessor.invalidDomain=An invalid domain [{0}] was specified for 
this cookie
 rfc6265CookieProcessor.invalidPath=An invalid path [{0}] was specified for 
this cookie
diff --git a/java/org/apache/tomcat/util/http/Rfc6265CookieProcessor.java 
b/java/org/apache/tomcat/util/http/Rfc6265CookieProcessor.java
index 5a961c64a1..3c46926df0 100644
--- a/java/org/apache/tomcat/util/http/Rfc6265CookieProcessor.java
+++ b/java/org/apache/tomcat/util/http/Rfc6265CookieProcessor.java
@@ -79,7 +79,7 @@ public class Rfc6265CookieProcessor extends 
CookieProcessorBase {
                     if (log.isDebugEnabled()) {
                         Exception e = new Exception();
                         // TODO: Review this in light of HTTP/2
-                        log.debug("Cookies: Parsing cookie as String. Expected 
bytes.", e);
+                        
log.debug(sm.getString("rfc6265CookieProcessor.expectedBytes"), e);
                     }
                     cookieValue.toBytes();
                 }
diff --git a/java/org/apache/tomcat/util/threads/LocalStrings.properties 
b/java/org/apache/tomcat/util/threads/LocalStrings.properties
index 273a378551..53856f58a0 100644
--- a/java/org/apache/tomcat/util/threads/LocalStrings.properties
+++ b/java/org/apache/tomcat/util/threads/LocalStrings.properties
@@ -15,6 +15,8 @@
 
 taskQueue.notRunning=Executor not running, can't force a command into the queue
 
+taskThread.exiting=Thread exiting on purpose
+
 threadPoolExecutor.invalidKeepAlive=Core threads must have positive keep alive 
times
 threadPoolExecutor.queueFull=Queue capacity is full
 threadPoolExecutor.taskRejected=Task [{0}] rejected from [{1}]
diff --git a/java/org/apache/tomcat/util/threads/TaskThread.java 
b/java/org/apache/tomcat/util/threads/TaskThread.java
index 5a7e0f373f..b0dbb0a461 100644
--- a/java/org/apache/tomcat/util/threads/TaskThread.java
+++ b/java/org/apache/tomcat/util/threads/TaskThread.java
@@ -18,6 +18,7 @@ package org.apache.tomcat.util.threads;
 
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
+import org.apache.tomcat.util.res.StringManager;
 
 /**
  * A Thread implementation that records the time at which it was created.
@@ -26,6 +27,7 @@ import org.apache.juli.logging.LogFactory;
 public class TaskThread extends Thread {
 
     private static final Log log = LogFactory.getLog(TaskThread.class);
+    private static final StringManager sm = 
StringManager.getManager(TaskThread.class);
     private final long creationTime;
 
     public TaskThread(ThreadGroup group, Runnable target, String name) {
@@ -62,7 +64,7 @@ public class TaskThread extends Thread {
             } catch(StopPooledThreadException exc) {
                 //expected : we just swallow the exception to avoid disturbing
                 //debuggers like eclipse's
-                log.debug("Thread exiting on purpose", exc);
+                log.debug(sm.getString("taskThread.exiting"), exc);
             }
         }
 


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

Reply via email to