取消tomcat 控制台所有日志打印输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了取消tomcat 控制台所有日志打印输出相关的知识,希望对你有一定的参考价值。

参考技术A 闲杂网上很多资料都是怎么把tomcat的日志输出到指定文件,或者文件过大怎么处理,方法到处都是!

而我遇到的问题是 tomcat 运行时输出大量的(专业说法:各种级别的日志),每次都输出几百行 当请求频繁时就想疯了一样输出刷屏,于是就想避免输出这些信息;

1 这些信息的界别都有这些:

一是运行中的日志,它主要记录运行的一些信息,尤其是一些异常错误日志信息 。

二是访问日志信息,它记录的访问的时间,IP ,访问的资料等相关信息。

其中访问日志:

{默认 tomcat 不记录访问日志,如下方法可以使 tomcat 记录访问日志

编辑 $catalina/conf/server.xml 文件. 注 :$catalina 是 tomcat 的安装目录

把以下的注释 () 去掉即可。

directory="logs"  prefix="localhost_access_log." suffix=".txt"

pattern="common" resolveHosts="false"/>}

Tomcat 日志分为下面5类:

catalina 、 localhost 、 manager 、 admin 、 host-manager

每类日志的级别分为如下 7 种:

SEVERE (highest value) > WARNING > INFO > CONFIG > FINE > FINER > FINEST (lowest value)

3.2  日志级别的设定方法

修改 conf/logging.properties 中的内容,设定某类日志的级别

示例:

设置 catalina 日志的级别为: FINE

1catalina.org.apache.juli.FileHandler.level = FINE

禁用 catalina 日志的输出:

1catalina.org.apache.juli.FileHandler.level = OFF

输出 catalina 所有的日志消息均输出:

1catalina.org.apache.juli.FileHandler.level = ALL

那么我的具体修改方法如下:在logging.properties修改设置

############################################################

随后 我的tomcat就正常输出自己大的日志和警告界别的日志  再也没有其他信息疯着出来了!

-->

Tomcat控制台总是打印日志问题的解决办法

问题

使用gradle启动项目,在tomcat控制台中不停地打印perf4j性能日志,导致开发过程很卡很慢。明明修改了logback.xml配置文件,让它输出到log文件中,而不是控制台,但是不起作用。

Windows系统中,在启动tomcat后会出现上图这样的情况,

在ubuntu系统中,没有这种情况,应该是在ubuntu系统中,没有tomcat的控制台吧。
同样,部署在线上的时候也没有问题。

唯独在windows中进行开发的时候有问题。

 

解决过程

真的是尝试很久很久。

  刚开始调整日志打印路径,无果;
  然后就是调整日志打印级别,只打印Error的,这个实现了,却仍然打印;
  最后决定替换tomcat的Jar包里的代码,不让它打印日志了,解决问题。

Jar包中性能打印的语句为:

StopWatch stopWatch = new Log4JStopWatch("Messages.searchFiles");
try {
  ......
} finally {
  stopWatch.stop();
}

 

调用的perf4j-*.jar包中的方法

public Log4JStopWatch(String tag) {
  this(tag, null, Logger.getLogger(DEFAULT_LOGGER_NAME), Level.INFO, Level.WARN);
}

 

而这个方法最终打印在控制台上的语句为:

protected void log(String stopWatchAsString, Throwable exception) {
  logger.log((exception == null) ? normalPriority : exceptionPriority, stopWatchAsString, exception);
}

 

再跟踪这个方法,跳转到了log4j-*.jar包中的 Category.java类中的log 方法

public void log(Priority priority, Object message, Throwable t) {
  if(repository.isDisabled(priority.level)) {
    return;
  }
  if(priority.isGreaterOrEqual(this.getEffectiveLevel()))
  forcedLog(FQCN, priority, message, t);
}

 

再跳转时:

protected void forcedLog(String fqcn, Priority level, Object message, Throwable t) {
  callAppenders(new LoggingEvent(fqcn, this, level, message, t));
}

再往后就是具体打印的方法了。

 

之前问题的所有打印日志的方法都会走到这里,于是我把这个jar包中的log方法和forcedLog方法的内容都删除了,然后替换原来的log4j-*.jar包,实现效果。

这里提供一个修改后的jar包:

  链接:https://pan.baidu.com/s/1078F50P8UuWW-Hgxt36QbQ  密码:j4w9

 

但如果是maven项目,不能直接替换jar包,可以根据tomcat的加载优先级,将修改后的jar包放到tomcat 中的lib 目录下进行覆盖

具体参考:http://www.cnblogs.com/acm-bingzi/p/webModifyJar.html

 

原创文章,欢迎转载,转载请注明出处!

以上是关于取消tomcat 控制台所有日志打印输出的主要内容,如果未能解决你的问题,请参考以下文章

tomcat假死控制台不打印任何信息也不记录日志也无法访问

tomcat的日志打印怎么设置

tomcat8.5日志打印无故中断?

@Slf4j——log打印日志

dockerdocker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志

如何将web应用项目中log4j的日志只打印到独立的文件,不打印在Tomcat的catalina.out?