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

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


The following commit(s) were added to refs/heads/main by this push:
     new 8773b42935 Localization for debug strings
8773b42935 is described below

commit 8773b429355d6ff5d05064774492d8a05aac118f
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     |  8 ++---
 .../org/apache/catalina/startup/ContextConfig.java |  7 ++--
 .../startup/CopyParentClassLoaderRule.java         |  4 +--
 java/org/apache/catalina/startup/HostConfig.java   |  4 +--
 .../catalina/startup/LocalStrings.properties       |  8 +++++
 .../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 +-
 .../tribes/transport/nio/ParallelNioSender.java    |  2 +-
 .../catalina/users/DataSourceUserDatabase.java     |  6 ++--
 .../apache/catalina/users/LocalStrings.properties  |  1 +
 .../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      |  9 ++---
 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 ++--
 java/org/apache/tomcat/util/digester/Digester.java |  2 +-
 .../tomcat/util/digester/FactoryCreateRule.java    |  8 ++---
 .../tomcat/util/digester/LocalStrings.properties   |  1 +
 .../tomcat/util/http/LocalStrings.properties       |  1 +
 .../tomcat/util/http/Rfc6265CookieProcessor.java   |  2 +-
 .../tomcat/util/modeler/LocalStrings.properties    |  3 ++
 java/org/apache/tomcat/util/modeler/Registry.java  |  7 ++--
 .../net/openssl/panama/LocalStrings.properties     |  1 +
 .../util/net/openssl/panama/OpenSSLEngine.java     |  2 +-
 .../tomcat/util/threads/LocalStrings.properties    |  2 ++
 .../org/apache/tomcat/util/threads/TaskThread.java |  4 ++-
 82 files changed, 286 insertions(+), 189 deletions(-)

diff --git a/java/org/apache/catalina/authenticator/AuthenticatorBase.java 
b/java/org/apache/catalina/authenticator/AuthenticatorBase.java
index b6604d4b9e..e52fa2f109 100644
--- a/java/org/apache/catalina/authenticator/AuthenticatorBase.java
+++ b/java/org/apache/catalina/authenticator/AuthenticatorBase.java
@@ -441,8 +441,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?
@@ -453,8 +453,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());
@@ -476,8 +476,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;
@@ -503,7 +503,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
@@ -542,7 +542,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;
@@ -563,7 +563,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
@@ -580,7 +580,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
@@ -813,8 +813,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);
@@ -975,8 +975,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()));
             }
         }
 
@@ -1018,7 +1017,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
@@ -1221,9 +1220,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 f9cdc52618..661d51d936 100644
--- a/java/org/apache/catalina/authenticator/FormAuthenticator.java
+++ b/java/org/apache/catalina/authenticator/FormAuthenticator.java
@@ -163,14 +163,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) {
@@ -180,7 +180,7 @@ public class FormAuthenticator extends AuthenticatorBase {
                     }
                 }
                 if (log.isDebugEnabled()) {
-                    log.debug("Reauthentication failed, proceed normally");
+                    log.debug(sm.getString("formAuthenticator.reauthFailed"));
                 }
             }
         }
@@ -189,17 +189,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;
@@ -238,13 +238,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;
             }
@@ -261,8 +261,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) {
@@ -270,8 +270,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) {
@@ -290,7 +290,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,
@@ -314,8 +314,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 ac786a347c..2cf878f867 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 5b1c51910c..b3df81c9ed 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 cb329b10f0..5149e7e0db 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 0026a90c0e..4edd4edf9d 100644
--- a/java/org/apache/catalina/core/ContainerBase.java
+++ b/java/org/apache/catalina/core/ContainerBase.java
@@ -629,7 +629,7 @@ public abstract class ContainerBase extends 
LifecycleMBeanBase implements Contai
     @Override
     public void addChild(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 17892d6c61..8704f4b5b4 100644
--- a/java/org/apache/catalina/core/LocalStrings.properties
+++ b/java/org/apache/catalina/core/LocalStrings.properties
@@ -111,6 +111,7 @@ containerBase.backgroundProcess.cluster=Exception 
processing cluster [{0}] backg
 containerBase.backgroundProcess.error=Exception processing background thread
 containerBase.backgroundProcess.realm=Exception processing realm [{0}] 
background process
 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
@@ -151,6 +152,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 a81ff0a04c..95c69ea23b 100644
--- a/java/org/apache/catalina/core/NamingContextListener.java
+++ b/java/org/apache/catalina/core/NamingContextListener.java
@@ -228,7 +228,7 @@ public class NamingContextListener implements 
LifecycleListener, PropertyChangeL
                 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
@@ -825,7 +825,9 @@ public class NamingContextListener implements 
LifecycleListener, PropertyChangeL
                 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));
                     }
@@ -858,7 +860,9 @@ public class NamingContextListener implements 
LifecycleListener, PropertyChangeL
                     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));
                     }
@@ -916,7 +920,7 @@ public class NamingContextListener implements 
LifecycleListener, PropertyChangeL
 
         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);
@@ -951,7 +955,7 @@ public class NamingContextListener implements 
LifecycleListener, PropertyChangeL
 
         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);
@@ -1035,7 +1039,7 @@ public class NamingContextListener implements 
LifecycleListener, PropertyChangeL
         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 77da9f4b9d..0389c3ae02 100644
--- a/java/org/apache/catalina/core/ThreadLocalLeakPreventionListener.java
+++ b/java/org/apache/catalina/core/ThreadLocalLeakPreventionListener.java
@@ -101,7 +101,9 @@ public class ThreadLocalLeakPreventionListener extends 
FrameworkListener {
 
         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 9d4639c2bf..8a172702dc 100644
--- a/java/org/apache/catalina/filters/CsrfPreventionFilter.java
+++ b/java/org/apache/catalina/filters/CsrfPreventionFilter.java
@@ -354,17 +354,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");
                         }
                     }
@@ -373,32 +372,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);
                             }
                         }
@@ -418,13 +416,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 01774e46c0..c0d3cad81c 100644
--- a/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java
+++ b/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java
@@ -412,8 +412,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 {
@@ -716,7 +715,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) {
@@ -815,8 +814,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 feba89cf8e..94f0bf3255 100644
--- a/java/org/apache/catalina/mbeans/GlobalResourcesLifecycleListener.java
+++ b/java/org/apache/catalina/mbeans/GlobalResourcesLifecycleListener.java
@@ -121,7 +121,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 2d996c6f2c..138b3a36d1 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 1cd386a420..6500f9754a 100644
--- a/java/org/apache/catalina/realm/JAASMemoryLoginModule.java
+++ b/java/org/apache/catalina/realm/JAASMemoryLoginModule.java
@@ -293,7 +293,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 da92dffff2..c4da4e27cd 100644
--- a/java/org/apache/catalina/realm/JNDIRealm.java
+++ b/java/org/apache/catalina/realm/JNDIRealm.java
@@ -1201,8 +1201,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 {
@@ -1229,8 +1229,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 bf4ab48fd0..c72c39ac2d 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}]
@@ -110,6 +111,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 ce8f398698..c51726851c 100644
--- a/java/org/apache/catalina/realm/RealmBase.java
+++ b/java/org/apache/catalina/realm/RealmBase.java
@@ -443,7 +443,7 @@ public abstract class RealmBase extends LifecycleMBeanBase 
implements Realm {
                     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 dd43845339..0af263fee1 100644
--- a/java/org/apache/catalina/session/FileStore.java
+++ b/java/org/apache/catalina/session/FileStore.java
@@ -232,7 +232,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 f2844effd1..0d2c42405f 100644
--- a/java/org/apache/catalina/session/LocalStrings.properties
+++ b/java/org/apache/catalina/session/LocalStrings.properties
@@ -31,6 +31,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}]
 
@@ -64,10 +65,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 55776d3c41..a0e0d716a4 100644
--- a/java/org/apache/catalina/session/ManagerBase.java
+++ b/java/org/apache/catalina/session/ManagerBase.java
@@ -635,12 +635,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 01f894151e..a72c2ac8a0 100644
--- a/java/org/apache/catalina/session/StandardManager.java
+++ b/java/org/apache/catalina/session/StandardManager.java
@@ -168,7 +168,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;
         }
@@ -223,7 +223,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 0b08c8a67b..49b8b51003 100644
--- a/java/org/apache/catalina/startup/Catalina.java
+++ b/java/org/apache/catalina/startup/Catalina.java
@@ -758,7 +758,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;
         }
@@ -878,14 +878,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));
             }
         }
     }
@@ -911,7 +911,7 @@ public class Catalina {
             writer.write(code.toString());
         } catch (IOException e) {
             // Should not happen
-            log.debug("Error writing code loader", e);
+            log.debug(sm.getString("catalina.loaderWriteFail"), e);
         }
     }
 
diff --git a/java/org/apache/catalina/startup/ContextConfig.java 
b/java/org/apache/catalina/startup/ContextConfig.java
index 9886bd8262..f70828d57c 100644
--- a/java/org/apache/catalina/startup/ContextConfig.java
+++ b/java/org/apache/catalina/startup/ContextConfig.java
@@ -689,7 +689,7 @@ public class ContextConfig implements LifecycleListener {
     protected void processContextConfig(Digester digester, URL contextXml, 
InputStream stream) {
 
         if (log.isDebugEnabled()) {
-            log.debug("Processing context [" + context.getName() + "] 
configuration file [" + contextXml + "]");
+            log.debug(sm.getString("contextConfig.processContext", 
context.getName(), contextXml));
         }
 
         InputSource source = null;
@@ -894,8 +894,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
@@ -1541,7 +1540,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 e271113fbf..c6640d4d2b 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 443f03dbaa..54383de7aa 100644
--- a/java/org/apache/catalina/startup/HostConfig.java
+++ b/java/org/apache/catalina/startup/HostConfig.java
@@ -1467,7 +1467,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);
             }
@@ -1486,7 +1486,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 5abd648a71..d6144f9a69 100644
--- a/java/org/apache/catalina/startup/LocalStrings.properties
+++ b/java/org/apache/catalina/startup/LocalStrings.properties
@@ -14,10 +14,14 @@
 # limitations under the License.
 
 catalina.configFail=Unable to load server configuration from [{0}]
+catalina.destroyFail=Error destroying failed server
 catalina.generatedCodeLocationError=Error using configured location for 
generated Tomcat embedded code [{0}]
 catalina.incorrectPermissions=Permissions incorrect, read permission is not 
allowed on the file
 catalina.init=Server initialization in [{0}] milliseconds
 catalina.initError=Error initializing Catalina
+catalina.initialContextFactory=The system property INITIAL_CONTEXT_FACTORY is 
already set to [{0}]
+catalina.loaderWriteFail=Error writing code loader
+catalina.namingPrefix=Set naming prefix [{0}]
 catalina.noCluster=Cluster RuleSet not found due to [{0}]. Cluster 
configuration disabled.
 catalina.noLoader=Configuration code loader [{0}] was not found, generated 
code will not be used
 catalina.noNaming=Naming environment is disabled
@@ -37,6 +41,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}]
@@ -69,10 +74,12 @@ 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.processAnnotationsInParallelFailure=Parallel execution failed
 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>
@@ -109,6 +116,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 c3270357ac..6564e4f0ce 100644
--- a/java/org/apache/catalina/tribes/group/interceptors/LocalStrings.properties
+++ b/java/org/apache/catalina/tribes/group/interceptors/LocalStrings.properties
@@ -80,6 +80,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 5b6ae35708..dbfd3acd37 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 3cb738b131..23fbe8da37 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 8d25f073ab..b5e01a4cbb 100644
--- a/java/org/apache/catalina/tribes/membership/McastServiceImpl.java
+++ b/java/org/apache/catalina/tribes/membership/McastServiceImpl.java
@@ -403,7 +403,7 @@ public class McastServiceImpl extends 
MembershipProviderBase {
         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 = () -> {
@@ -417,7 +417,7 @@ public class McastServiceImpl extends 
MembershipProviderBase {
             };
         } else if (membership.memberAlive(m)) {
             if (log.isDebugEnabled()) {
-                log.debug("Mcast add member " + m);
+                log.debug(sm.getString("mcastServiceImpl.memberAdd", m));
             }
             t = () -> {
                 String name = currentThread.getName();
@@ -445,8 +445,8 @@ public class McastServiceImpl extends 
MembershipProviderBase {
             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 = () -> {
@@ -480,7 +480,7 @@ public class McastServiceImpl extends 
MembershipProviderBase {
             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 = () -> {
@@ -581,13 +581,17 @@ public class McastServiceImpl extends 
MembershipProviderBase {
                     //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 c63bfb0cad..7499133bf6 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 1d346d8a9e..05f28b1943 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 22be59a544..36b44cc3d5 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 7419037f9a..df2b56c77f 100644
--- a/java/org/apache/catalina/tribes/transport/nio/LocalStrings.properties
+++ b/java/org/apache/catalina/tribes/transport/nio/LocalStrings.properties
@@ -16,7 +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
@@ -44,6 +46,7 @@ nioSender.unknown.state=Data is in unknown state. 
readyOps=[{0}]
 
 parallelNioSender.error.keepalive=Error during keepalive test for sender:[{0}]
 parallelNioSender.operation.timedout=Operation has timed out([{0}] ms.).
+parallelNioSender.selectorCloseFail=Failed to close selector
 parallelNioSender.send.fail=Member send is failing for:[{0}] ; Setting to 
suspect.
 parallelNioSender.send.fail.retrying=Member send is failing for:[{0}] ; 
Setting to suspect and retrying.
 parallelNioSender.send.failed=Parallel NIO send failed.
diff --git a/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java 
b/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java
index 4af074bf25..3d587c1f28 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);
         } }
 
     }
@@ -346,7 +346,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;
@@ -473,7 +473,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 05e8f77a72..7fd5ecbe1a 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/tribes/transport/nio/ParallelNioSender.java 
b/java/org/apache/catalina/tribes/transport/nio/ParallelNioSender.java
index 68dfbca08a..f73347d5ff 100644
--- a/java/org/apache/catalina/tribes/transport/nio/ParallelNioSender.java
+++ b/java/org/apache/catalina/tribes/transport/nio/ParallelNioSender.java
@@ -428,7 +428,7 @@ public class ParallelNioSender extends AbstractSender 
implements MultiPointSende
                 selector.close();
             } catch (Exception e) {
                 if (log.isDebugEnabled()) {
-                    log.debug("Failed to close selector", e);
+                    
log.debug(sm.getString("parallelNioSender.selectorCloseFail"), e);
                 }
             }
         }
diff --git a/java/org/apache/catalina/users/DataSourceUserDatabase.java 
b/java/org/apache/catalina/users/DataSourceUserDatabase.java
index d79082d758..8ad9aa7a7f 100644
--- a/java/org/apache/catalina/users/DataSourceUserDatabase.java
+++ b/java/org/apache/catalina/users/DataSourceUserDatabase.java
@@ -934,10 +934,8 @@ public class DataSourceUserDatabase extends 
SparseUserDatabase {
 
         if (log.isDebugEnabled()) {
             // As there are lots of parameters to configure, log some debug to 
help out
-            log.debug("DataSource UserDatabase features: User<->Role ["
-                    + Boolean.toString(userRoleTable != null && roleNameCol != 
null)
-                    + "], Roles [" + Boolean.toString(isRoleStoreDefined())
-                    + "], Groups [" + Boolean.toString(isRoleStoreDefined()) + 
"]");
+            log.debug(sm.getString("dataSourceUserDatabase.features", 
Boolean.toString(userRoleTable != null && roleNameCol != null),
+                    Boolean.toString(isRoleStoreDefined()), 
Boolean.toString(isGroupStoreDefined())));
         }
 
         dbWriteLock.lock();
diff --git a/java/org/apache/catalina/users/LocalStrings.properties 
b/java/org/apache/catalina/users/LocalStrings.properties
index 4c946de163..56bea7c03f 100644
--- a/java/org/apache/catalina/users/LocalStrings.properties
+++ b/java/org/apache/catalina/users/LocalStrings.properties
@@ -14,6 +14,7 @@
 # limitations under the License.
 
 dataSourceUserDatabase.exception=Exception accessing the database
+dataSourceUserDatabase.features=DataSource UserDatabase features: User <-> 
Role [{0}], Roles [{1}], Groups [{2}]
 
 memoryUserDatabase.fileClose=Failed to close [{0}]
 memoryUserDatabase.fileDelete=Failed to delete [{0}]
diff --git a/java/org/apache/catalina/valves/ErrorReportValve.java 
b/java/org/apache/catalina/valves/ErrorReportValve.java
index ee5b4a2ec0..7832b4f3ae 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 2c54c69ae2..f7368b9523 100644
--- a/java/org/apache/catalina/valves/ExtendedAccessLogValve.java
+++ b/java/org/apache/catalina/valves/ExtendedAccessLogValve.java
@@ -489,8 +489,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 45b1ef5555..09214f2b54 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 62c342c3d2..9bd759b59f 100644
--- a/java/org/apache/catalina/valves/LocalStrings.properties
+++ b/java/org/apache/catalina/valves/LocalStrings.properties
@@ -33,6 +33,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
@@ -136,6 +137,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
@@ -145,6 +149,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.
@@ -161,6 +167,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 3371ee55e6..d6f7243825 100644
--- a/java/org/apache/catalina/valves/ProxyErrorReportValve.java
+++ b/java/org/apache/catalina/valves/ProxyErrorReportValve.java
@@ -212,7 +212,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 e9f5239594..a19629fde2 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 356c4b03b2..8beb2ac3ae 100644
--- a/java/org/apache/catalina/valves/rewrite/RewriteValve.java
+++ b/java/org/apache/catalina/valves/rewrite/RewriteValve.java
@@ -142,13 +142,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 {
@@ -158,7 +159,7 @@ public class RewriteValve extends ValveBase {
                 is = resource.getInputStream();
             } catch (IOException e) {
                 if (containerLog.isDebugEnabled()) {
-                    containerLog.debug("No configuration resource found: " + 
resourceName, e);
+                    
containerLog.debug(sm.getString("rewriteValve.noConfiguration", resourceName), 
e);
                 }
             }
         }
diff --git a/java/org/apache/coyote/AbstractProcessor.java 
b/java/org/apache/coyote/AbstractProcessor.java
index 38ad35fec0..31d2cd7fd3 100644
--- a/java/org/apache/coyote/AbstractProcessor.java
+++ b/java/org/apache/coyote/AbstractProcessor.java
@@ -208,7 +208,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 36198bb0aa..a2d1acf103 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 c8a070b362..cf693aae32 100644
--- a/java/org/apache/coyote/ajp/AjpProcessor.java
+++ b/java/org/apache/coyote/ajp/AjpProcessor.java
@@ -377,7 +377,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);
                     }
@@ -387,7 +387,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 623f82c4a9..be8a46c100 100644
--- a/java/org/apache/coyote/ajp/LocalStrings.properties
+++ b/java/org/apache/coyote/ajp/LocalStrings.properties
@@ -23,10 +23,12 @@ ajpmessage.overflow=Overflow error for buffer adding [{0}] 
bytes at position [{1
 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.noSSL=SSL is not supported with AJP. The SSL host configuration 
for [{0}] was ignored
diff --git a/java/org/apache/coyote/http11/filters/GzipOutputFilter.java 
b/java/org/apache/coyote/http11/filters/GzipOutputFilter.java
index 29c4b15f97..14c68db9a5 100644
--- a/java/org/apache/coyote/http11/filters/GzipOutputFilter.java
+++ b/java/org/apache/coyote/http11/filters/GzipOutputFilter.java
@@ -26,6 +26,7 @@ import org.apache.coyote.http11.HttpOutputBuffer;
 import org.apache.coyote.http11.OutputFilter;
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
+import org.apache.tomcat.util.res.StringManager;
 
 /**
  * Gzip output filter.
@@ -35,6 +36,7 @@ import org.apache.juli.logging.LogFactory;
 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
@@ -98,7 +100,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 f6b981e01d..cd955fb191 100644
--- a/java/org/apache/jasper/JspC.java
+++ b/java/org/apache/jasper/JspC.java
@@ -1065,8 +1065,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();
@@ -1230,7 +1229,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;
@@ -1273,7 +1272,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);
@@ -1282,7 +1281,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) {
@@ -1350,7 +1349,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 b615c2395f..632954e23b 100644
--- a/java/org/apache/jasper/compiler/AntCompiler.java
+++ b/java/org/apache/jasper/compiler/AntCompiler.java
@@ -255,8 +255,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 89f11919cc..731750179f 100644
--- a/java/org/apache/jasper/compiler/Compiler.java
+++ b/java/org/apache/jasper/compiler/Compiler.java
@@ -548,8 +548,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 e4a4f659bd..727f61393a 100644
--- a/java/org/apache/jasper/compiler/JDTCompiler.java
+++ b/java/org/apache/jasper/compiler/JDTCompiler.java
@@ -514,8 +514,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 23202d73a7..e2ea5f1773 100644
--- a/java/org/apache/jasper/optimizations/ELInterpreterTagSetters.java
+++ b/java/org/apache/jasper/optimizations/ELInterpreterTagSetters.java
@@ -26,6 +26,7 @@ import jakarta.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 5dab3e2d16..67f4b9e405 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.
@@ -74,6 +76,7 @@ jsp.error.el.template.deferred=#{...} is not allowed in 
template text
 jsp.error.el_interpreter_class.instantiation=Failed to load or instantiate 
ELInterpreter class [{0}]
 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}''
@@ -233,6 +236,7 @@ jsp.error.tld.unable_to_get_jar=Unable to get JAR resource 
[{0}] containing TLD:
 jsp.error.tld.url=Bad TLD URL [{0}]
 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}]
@@ -309,6 +313,7 @@ jsp.warning.unsupported.targetVM=Unsupported target VM 
[{0}] requested, using [{
 jsp.warning.useInstanceManagerForTags=Warning: Invalid value for the initParam 
useInstanceManagerForTags. Will use the default value of "false"
 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
@@ -319,8 +324,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 7fc668fb0f..63e2eb38a2 100644
--- a/java/org/apache/tomcat/util/buf/LocalStrings.properties
+++ b/java/org/apache/tomcat/util/buf/LocalStrings.properties
@@ -30,6 +30,9 @@ encodedSolidusHandling.invalid=The value [{0}] is not 
recognised
 hexUtils.fromHex.nonHex=The input must consist only of hex digits
 hexUtils.fromHex.oddDigits=The input must consist of an even number of hex 
digits
 
+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 f86be83ec6..1e281050ea 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
@@ -283,7 +285,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++;
@@ -391,7 +393,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/digester/Digester.java 
b/java/org/apache/tomcat/util/digester/Digester.java
index ba532b5a9f..e7615ac7f0 100644
--- a/java/org/apache/tomcat/util/digester/Digester.java
+++ b/java/org/apache/tomcat/util/digester/Digester.java
@@ -1403,7 +1403,7 @@ public class Digester extends DefaultHandler2 {
                         }
                     } catch (URISyntaxException e) {
                         if (log.isDebugEnabled()) {
-                            log.debug("Invalid URI '" + baseURI + "' or '" + 
systemId + "'");
+                            log.debug(sm.getString("digester.invalidURI", 
baseURI, systemId));
                         }
                     }
                 }
diff --git a/java/org/apache/tomcat/util/digester/FactoryCreateRule.java 
b/java/org/apache/tomcat/util/digester/FactoryCreateRule.java
index 7fdff66531..91f7349e2e 100644
--- a/java/org/apache/tomcat/util/digester/FactoryCreateRule.java
+++ b/java/org/apache/tomcat/util/digester/FactoryCreateRule.java
@@ -98,12 +98,12 @@ public class FactoryCreateRule extends Rule {
 
             } catch (Exception e) {
                 // log message and error
-                if (digester.log.isInfoEnabled()) {
+                if (digester.log.isDebugEnabled()) {
+                    digester.log.debug(sm.getString("rule.createError",
+                            ((e.getMessage() == null) ? e.getClass().getName() 
: e.getMessage())), e);
+                } else if (digester.log.isInfoEnabled()) {
                     digester.log.info(sm.getString("rule.createError",
                         ((e.getMessage() == null) ? e.getClass().getName() : 
e.getMessage())));
-                    if (digester.log.isDebugEnabled()) {
-                        digester.log.debug("[FactoryCreateRule] Ignored 
exception:", e);
-                    }
                 }
                 exceptionIgnoredStack.push(Boolean.TRUE);
             }
diff --git a/java/org/apache/tomcat/util/digester/LocalStrings.properties 
b/java/org/apache/tomcat/util/digester/LocalStrings.properties
index 74c6c78252..f833ab873b 100644
--- a/java/org/apache/tomcat/util/digester/LocalStrings.properties
+++ b/java/org/apache/tomcat/util/digester/LocalStrings.properties
@@ -24,6 +24,7 @@ digester.error.finish=Finish event threw exception
 digester.errorLocation=Error at line [{0}] column [{1}]: [{2}]
 digester.failedToUpdateAttributes=Attribute [{0}] failed to update and remains 
[{1}]
 digester.failedToUpdateSystemProperty=System property [{0}] failed to update 
and remains [{1}]
+digester.invalidURI=Invalid URI [{0}] or [{1}]
 digester.noLocator=No Locator
 digester.noRulesFound=No rules found matching [{0}]
 digester.parseError=Parse error at line [{0}] column [{1}]
diff --git a/java/org/apache/tomcat/util/http/LocalStrings.properties 
b/java/org/apache/tomcat/util/http/LocalStrings.properties
index 29fd518c61..f3a680e0ae 100644
--- a/java/org/apache/tomcat/util/http/LocalStrings.properties
+++ b/java/org/apache/tomcat/util/http/LocalStrings.properties
@@ -32,6 +32,7 @@ parameters.invalidChunk=Invalid chunk starting at byte [{0}] 
and ending at byte
 parameters.maxCountFail=More than the maximum number of request parameters 
(GET plus POST) for a single request ([{0}]) were detected. Any parameters 
beyond this limit have been ignored. To change this limit, set the 
maxParameterCount attribute on the Connector.
 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.invalidAttributeName=An invalid attribute name [{0}] 
was specified for this cookie
 rfc6265CookieProcessor.invalidAttributeValue=An invalid attribute value [{1}] 
was specified for this cookie attribute [{0}]
 rfc6265CookieProcessor.invalidCharInValue=An invalid character [{0}] was 
present in the Cookie value
diff --git a/java/org/apache/tomcat/util/http/Rfc6265CookieProcessor.java 
b/java/org/apache/tomcat/util/http/Rfc6265CookieProcessor.java
index 79780358c2..05a712ecb5 100644
--- a/java/org/apache/tomcat/util/http/Rfc6265CookieProcessor.java
+++ b/java/org/apache/tomcat/util/http/Rfc6265CookieProcessor.java
@@ -82,7 +82,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/modeler/LocalStrings.properties 
b/java/org/apache/tomcat/util/modeler/LocalStrings.properties
index 8c0825d81c..90b3af24dc 100644
--- a/java/org/apache/tomcat/util/modeler/LocalStrings.properties
+++ b/java/org/apache/tomcat/util/modeler/LocalStrings.properties
@@ -37,6 +37,8 @@ managedMBean.noSet=Cannot find setter method [{0}] on 
resource [{1}]
 modules.digesterParseError=Error parsing registry data
 modules.readDescriptorsError=Error reading descriptors
 
+registry.createdServer=Created MBeanServer
+registry.existingServer=Using existing MBeanServer
 registry.initError=Error initializing [{0}]
 registry.invalidSource=Invalid source specified, must be either URL, File, 
Class or InputStream
 registry.loadError=Error loading descriptors from [{0}]
@@ -47,3 +49,4 @@ registry.nullBean=Cannot register null bean for [{0}]
 registry.objectNameCreateError=Error creating object name
 registry.registerError=Error registering MBean
 registry.unregisterError=Error unregistering MBean
+registry.unregisterExisting=Unregistering existing component [{0}]
diff --git a/java/org/apache/tomcat/util/modeler/Registry.java 
b/java/org/apache/tomcat/util/modeler/Registry.java
index e5034453d7..758b8d5c97 100644
--- a/java/org/apache/tomcat/util/modeler/Registry.java
+++ b/java/org/apache/tomcat/util/modeler/Registry.java
@@ -432,16 +432,15 @@ public class Registry implements RegistryMBean, 
MBeanRegistration {
         if (server == null) {
             synchronized (serverLock) {
                 if (server == null) {
-                    long t1 = System.currentTimeMillis();
                     if (MBeanServerFactory.findMBeanServer(null).size() > 0) {
                         server = 
MBeanServerFactory.findMBeanServer(null).get(0);
                         if (log.isDebugEnabled()) {
-                            log.debug("Using existing MBeanServer " + 
(System.currentTimeMillis() - t1));
+                            log.debug(sm.getString("registry.existingServer"));
                         }
                     } else {
                         server = ManagementFactory.getPlatformMBeanServer();
                         if (log.isDebugEnabled()) {
-                            log.debug("Created MBeanServer" + 
(System.currentTimeMillis() - t1));
+                            log.debug(sm.getString("registry.createdServer"));
                         }
                     }
                 }
@@ -624,7 +623,7 @@ public class Registry implements RegistryMBean, 
MBeanRegistration {
 
             if (getMBeanServer().isRegistered(oname)) {
                 if (log.isDebugEnabled()) {
-                    log.debug("Unregistering existing component " + oname);
+                    log.debug(sm.getString("registry.unregisterExisting", 
oname));
                 }
                 getMBeanServer().unregisterMBean(oname);
             }
diff --git 
a/java/org/apache/tomcat/util/net/openssl/panama/LocalStrings.properties 
b/java/org/apache/tomcat/util/net/openssl/panama/LocalStrings.properties
index 4a46900aa2..5b4ef5c6ee 100644
--- a/java/org/apache/tomcat/util/net/openssl/panama/LocalStrings.properties
+++ b/java/org/apache/tomcat/util/net/openssl/panama/LocalStrings.properties
@@ -33,6 +33,7 @@ engine.nullName=Null value name
 engine.nullValue=Null value
 engine.ocspParseError=Error parsing OCSP URLs
 engine.ocspRequestError=Error processing OCSP request for URL [{0}]
+engine.ocspResponse=OCSP response for URL [{0}] was [{1}]
 engine.openSSLError=OpenSSL error: [{0}] message: [{1}]
 engine.oversizedPacket=Encrypted packet is oversized
 engine.unsupportedCipher=Unsupported cipher suite: [{0}] [{1}]
diff --git a/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLEngine.java 
b/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLEngine.java
index 39874a5011..46cfce2b8a 100644
--- a/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLEngine.java
+++ b/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLEngine.java
@@ -1245,7 +1245,7 @@ public final class OpenSSLEngine extends SSLEngine 
implements SSLUtil.ProtocolIn
                                         URL url = (new URI(urlString)).toURL();
                                         ocspResponse = processOCSPRequest(url, 
issuer, x509, x509ctx, localArenal);
                                         if (log.isDebugEnabled()) {
-                                            log.debug("OCSP response for URL: 
" + urlString + " was " + ocspResponse);
+                                            
log.debug(sm.getString("engine.ocspResponse", urlString, ocspResponse));
                                         }
                                     } catch (MalformedURLException | 
URISyntaxException e) {
                                         
log.warn(sm.getString("engine.invalidOCSPURL", urlString));
diff --git a/java/org/apache/tomcat/util/threads/LocalStrings.properties 
b/java/org/apache/tomcat/util/threads/LocalStrings.properties
index 2c7b85a213..011470bac8 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