在idea中跑storm工程时,因为Storm中的日志级级别默认为INFO,控制台总是打印出很多没用的INFO级别的日志,导致我自己在代码中的sout内容看不清楚。
于是想着自定义日志的打印级别为WARN或ERROR。
网上查找了很多资料,有的说修改logback.xml, 有的说修改logback下的cluster.xml。但都没用。
后来终于找到了方法,在resources资源文件夹下,添加log4j2.xml (该文件是日志的配置文件,存在于storm-core-1.1.1.jar包中,用来进行日志的相关配置。)
如果手动添加了log4j2.xml,则程序会优先使用手动设置的resources下的这个log4j2.xml。
该文件的内容如下,只要拷贝该文件到resources目录下,然后修改其中的日志级别即可:
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software
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.
--> <configuration monitorInterval="60">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%-4r [%t] %-5p %c{1.} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="org.apache.zookeeper" level="WARN"/>
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</configuration>
未完。。。
下面说一下日志级别:
日志信息的优先级
org.apache.log4j.Level类提供以下级别,但也可以通过Level类的子类自定义级别。
Level | 描述 |
---|---|
ALL | 各级包括自定义级别 |
DEBUG | 指定细粒度信息事件是最有用的应用程序调试 |
ERROR | 错误事件可能仍然允许应用程序继续运行 |
FATAL | 指定非常严重的错误事件,这可能导致应用程序中止 |
INFO | 指定能够突出在粗粒度级别的应用程序运行情况的信息的消息 |
OFF | 这是最高等级,为了关闭日志记录 |
TRACE | 指定细粒度比DEBUG更低的信息事件 |
WARN | 指定具有潜在危害的情况 |
日志级别是如何工作的?
级别p的级别使用q,在记录日志请求时,如果p>=q启用。这条规则是log4j的核心。它假设级别是有序的。对于标准级别它们关系如下:ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF。越往右,级别越高,错误越严重。
设置其中某个日志级别,则其左侧的日志类型都不会输出,相反,其右侧的日志类型都会输出。
比如设置ERROR,则all,debug,info,warn级别的日志都不会输出;error,fatal,off级别的日志都会输出。
trace: 是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出。
debug: 调试。
info: 输出一下你感兴趣的或者重要的信息。
warn: 有些信息不是错误信息,但是也要给程序员的一些提示,类似于eclipse中代码的验证不是有error 和warn(不算错误但是也请注意,比如以下depressed的方法)。
error: 错误信息。用的也比较多。
fatal: 级别比较高了。重大错误,这种级别你可以直接停止程序了,是不应该出现的错误。
还未完。。。
最后的最后,发现不用自定义日志级别,也能关闭打印INFO级别的日志。
原来我在main函数中设置了 config.setDebug(true);
只要在main函数中,设置,config.setDebug(false); 默认就是false。