【发布时间】:2019-11-05 01:32:28
【问题描述】:
我在我的 Tomcat 安装上部署了几个 webapp,我在我的 context.xml 中使用 swallowOutput="true" 以实现不同的“每个 webapp”日志输出,而不仅仅是一个大的 catalina.out适用于所有网络应用程序。那个工作很好。因此,我为每个 webapp 使用logging.properties-file。
webapps 正在使用基本的System.out.println 生成日志输出。
现在,我想定义一个非常简单的日志格式,通过指定由 Tomcat 生成
java.util.logging.SimpleFormatter.format=%5$s %n
但是,生成的日志总是显示我不需要的完整格式,无论/如何我指定上面的格式字符串:
22-Jun-2019 16:08:15.310 INFO [http-nio-80-exec-10] org.apache.catalina.core.StandardWrapperValve.invoke backend Sat Jun 22 16:08:15 CEST 2019: ... output of the servlet's System.out.println-calls ...
我想生成一个小而清晰的日志,每行中没有“StandardWrapperValve”等标记。
我的全局logging.properties 文件是这样的:
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
.handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
2localhost.org.apache.juli.AsyncFileHandler.level = FINE
2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
3manager.org.apache.juli.AsyncFileHandler.level = FINE
3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
3manager.org.apache.juli.AsyncFileHandler.prefix = manager.
4host-manager.org.apache.juli.AsyncFileHandler.level = FINE
4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.SimpleFormatter
java.util.logging.SimpleFormatter.format=%5$s %n
org.apache.juli.SimpleFormatter.format=%5$s %n
############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.AsyncFileHandler
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.AsyncFileHandler
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.AsyncFileHandler
# For example, set the org.apache.catalina.util.LifecycleBase logger to log
# each component that extends LifecycleBase changing state:
#org.apache.catalina.util.LifecycleBase.level = FINE
# To see debug messages in TldLocationsCache, uncomment the following line:
#org.apache.jasper.compiler.TldLocationsCache.level = FINE
# To see debug messages for HTTP/2 handling, uncomment the following line:
#org.apache.coyote.http2.level = FINE
# To see debug messages for WebSocket handling, uncomment the following line:
#org.apache.tomcat.websocket.level = FINE
每个 webapp 的 logging.properties 文件是这样的:
handlers = org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################
org.apache.juli.FileHandler.level = FINE
org.apache.juli.FileHandler.directory = ${catalina.base}/logs
org.apache.juli.FileHandler.prefix = webappX.
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%5$s %n
1catalina.java.util.logging.SimpleFormatter.format=%5$s %n
org.apache.juli.SimpleFormatter.format=%5$s %n
如您所见,我已经尝试了不同的行将格式字符串设置为不同的类名,例如:
java.util.logging.SimpleFormatter.format1catalina.java.util.logging.SimpleFormatter.formatorg.apache.juli.SimpleFormatter.format
因为我在其他 StackOverflow 线程上找到了一些关于此的信息,但它们都没有显示任何效果。日志输出格式保持不变,始终为完整格式。格式字符串没有任何影响。
感谢任何想法, 汤博
【问题讨论】:
-
您使用的是哪个版本的 apache Tomcat,您将 per-webapp logging.properties 文件放在哪里?
-
我使用的是 Tomcat 8.5.15,每个 webapp 的 logging.properties 位于 WEB-INF/classes/logging.properties。 per-webapp 属性显示效果,因为仅当 per-webapp logging.properties 存在时才会创建单独的 per-webapp console.logs。没有它们,一切都将进入 catalina.out。
-
而且自定义格式不能同时使用:webbapp 和 tomcat 通用日志?您是否尝试过当前版本(例如 9.*)?