问题与分析:Tomcat使用tomcat-juli.jar实现日志打印,将日志输出到catalina.out。除项目中使用的日志框架外,System.out、System.err或printStackTrace()输出的信息也会被写入catalina.out。如果引用的jar包中也有这些语句,它们也会一起写入catalina.out。例如,现在catalina.out中有大量NotSerializableException,这个异常是由第三方jar包打印的,日志记录如下:

```java

30-Oct-2018 17:53:58.368 WARNING [msm-storage-thread-1] de.javakaffee.web.msm.JavaSerializationTranscoder.writeAttributes Cannot serialize session attribute [javax.zkoss.zk.ui.Session] for session [EB56FE915F0611E8195FF5F95C96A9E2.app2]

java.io.NotSerializableException: org.zkoss.bind.tracker.impl.BindUiLifeCycle

```

可以看到,这个异常是由Memcached在共享session时由于存在未序列化的对象而打印出来的。现在我们希望在catalina.out中不再看到这个异常,可以通过配置logging.properties来隐藏它。

解决方法:在Tomcat的安装目录下找到conf\logging.properties文件,找到如下注释(一般在最末尾):

```java

# 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

```

在这里的末尾加上一行:

```java

org.apache.catalina=OFF

```

保存文件并重启Tomcat。这样就可以在catalina.out中隐藏掉这个异常了。

将de.javakaffee.web.msm.JavaSerializationTranscoder.level设置为SEVERE,可以避免在Tomcat中打印NotSerializableException。你甚至可以将范围扩大,只打印SEVERE级别的日志信息。具体操作如下:

1. 打开log4j2.xml配置文件;

2. 在标签内添加以下内容:

```xml

```

这将指定de.javakaffee.web.msm包下的类只打印SEVERE级别的日志信息。

补充:

- 如果希望不打印日志信息,可以将level设置为OFF;

- 如果希望打印全部的日志信息,可以将level设置为ALL。