取消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 控制台所有日志打印输出的主要内容,如果未能解决你的问题,请参考以下文章
dockerdocker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志