如何使用java.util.logging.SimpleFormatter为Tomcat的控制台日志指定单独的日志格式

tom*_*189 5 logging tomcat

我已经在Tomcat安装上部署了多个swallowOutput="true"Web应用程序,并且正在我的context.xml中使用该应用程序,以实现不同的“每个webapp”日志输出,而不仅仅是所有webapp的一个大“ catalina.out”。那工作很好。因此,我为每个Web应用程序使用logging.properties文件。

Webapp正在使用basic生成日志输出System.out.println

现在,我想通过指定以下内容来定义由Tomcat生成的非常简单的日志格式:

java.util.logging.SimpleFormatter.format=%5$s %n
Run Code Online (Sandbox Code Playgroud)

但是,无论我指定了哪种格式字符串,生成的日志始终显示我不需要的完整格式:

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 ...
Run Code Online (Sandbox Code Playgroud)

我想生成一个小的且布局清晰的日志,而每行中都没有“ 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
Run Code Online (Sandbox Code Playgroud)

每个webapp的日志记录属性如下

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
Run Code Online (Sandbox Code Playgroud)

如您所见,我已经尝试过不同的行来将格式字符串设置为不同的类名,例如* java.util.logggin.SimpleFormatter.format * org.apache.juli.SimpleFormatter.format * 1catalina.java.util .logging.SimpleFormatter.format,因为我在其他stackoverflow线程上找到了有关此信息的信息,但没有一个显示任何效果。日志输出格式保持不变,始终为完整格式。格式字符串不显示任何影响。

谢谢任何想法,Tombo

Sel*_*ron 6

org.apache.juli.FileHandler.formatter我在 Tomcat 8.5.15 上测试了一些变体,发现在 per-webapp 中设置似乎也很重要logging.properties

这是我的完整结果 per-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 = ALL
org.apache.juli.FileHandler.directory = ${catalina.base}/logs
org.apache.juli.FileHandler.prefix = webappX.
org.apache.juli.FileHandler.formatter = java.util.logging.SimpleFormatter
Run Code Online (Sandbox Code Playgroud)

apache-tomcat/conf/logging.properties在来自原始的全局中,我只修改java.util.logging.ConsoleHandler.formatter并添加了格式:

java.util.logging.ConsoleHandler.level = FINE
#java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%5$s %n
Run Code Online (Sandbox Code Playgroud)

如果 webApp在 per-webapp 中指定,则指定SimpleFormatter.format对 webApp 日志文件有效。它对于原始控制台输出也有效。org.apache.juli.FileHandler.formatter = java.util.logging.SimpleFormatterlogging.properties