日志是程序猿的眼睛,好的日志输出能帮助我们快速的解决问题,那我们就要知道日志是怎么配置的,下面是从对8个日志级别的介绍,和如何在项目上配置都详细的说明了,了解日志的小伙版们可以做为参考,看到这篇文章,那就是缘分,感谢有你,希望你前程似锦。

日志的8个级别:

log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。

ALL: 最低等级的,用于打开所有日志记录。

TRACE: designates finer-grained informational events than the DEBUG.Since:1.2.12,很低的日志级别,一般不会使用。

DEBUG: 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。

INFO: 消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志。

WARN: 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。

ERROR: 指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。

FATAL: 指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错误,这种级别你可以直接停止程序了。

OFF: 最高等级的,用于关闭所有日志记录。

如果将log level设置在某一个级别上,那么比此级别优先级高的log都能打印出来。例如,如果设置优先级为WARN,那么OFF、FATAL、ERROR、WARN 4个级别的log能正常输出,而INFO、DEBUG、TRACE、 ALL级别的log则会被忽略。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。

从我们实验的结果可以看出,log4j默认的优先级为ERROR或者WARN(实际上是ERROR)。

日志怎麽使用呢,先让我们看看在 . properties文件怎么配置

一,配置控制台日志输出

#该定义让日志在控制台和文件输出,并且只输出info级别以上的日志
log4j.rootLogger=info,console,myFile

#控制台日志的实现类是ConsoleAppender(控制台输出源)

log4j.appender.console=org.apache.log4j.ConsoleAppender

#指定控制台日志输出格式的格式转换器为PatternLayout实现类
log4j.appender.console.layout=org.apache.log4j.PatternLayout

#定义控制台日志输出的具体格式
log4j.appender.console.layout.ConversionPattern=%d %-5p [%c.%M()] - %m%n

二,配置文件日志的输处

#日志文件的实现类是RollingFileAppender(文件输出源)

log4j.appender.myFile=org.apache.log4j.RollingFileAppender

#定义日志文件的存储路径
log4j.appender.myFile.File=src/log/logProperties/log4j.log

#定义日志文件的大小
log4j.appender.myFile.MaxFileSize=1024kb

#定义日志文件最多生成几个(从0开始算1个,即此处最多3个文件)
#超过该大小则会覆盖前面生成的文件
log4j.appender.myFile.MaxBackupIndex=2

#指定日志文件输出格式的格式转换器为PatternLayout实现类
log4j.appender.myFile.layout=org.apache.log4j.PatternLayout

#定义日志文件输出的具体格式
log4j.appender.console.layout.ConversionPattern=%d %-5p [%c.%M()] - %m%n

#######输出格式解释#######

#%d: 日志打印的时间点,默认格式为ISO8601,也可以另外指定格式,
#定义如下: %d{yyy年MM月dd日 HH时mm分ss秒SSS},则会输出:
#2018年01月06日 14时47分45秒590
#%p: 输出日志级别,即DEBUG,INFO,WARN,ERROR,FATAL
#%-5p:表示字符小于5位,则字符居左(不加“-”号则字符居右),你可以举一反三
#%c: 日志所在类的全名
#%M: 日志所在方法的名字
#%m: 日志信息
#%n: 输出一个回车换行符
#%L: 输出代码中的行号

日志级别配置

日志级别配置可分为3类,一类是配置父类日志记录器的日志级别,第二类是配置子类日志记录器的日志级别,第三类是配置输出源(控制台、文件等)的日志级别。他们的日志级别解析优先级由低到高排列。

解释:

输出源如果没有定义日志级别,它会继承最接近它的子类日志记录器的日志级别;子类日志记录器没有定义日志级别,它会继承最接近它的父类日志记录器。
打印日志时输出源会根据自身定义的日志级别与最接近它的子类日志记录器定义的日志级别比较,如果输出源定义的级别高于子类日志记录器,则按输出源定义的日志级别输出日志,反之则按子类日志记录器的日志级别输出。

logback.xml配置日志:

先介绍一下各个配置都是做什么的,以及配上例子以便能更好的理解

<appender> : 

<appender>是<configuration>的子节点,是负责写日志的组件。

ConsoleAppender : 

把日志添加到控制台,有以下子节点:

<encoder> : 对日志进行格式化。

<target> : 字符串 System.out 或者 System.err ,默认 System.out

 <!-- 表示打印到控制台 -->
<appender name="limeFlogger" class="ch.qos.logback.core.ConsoleAppender"><!-- encoder 默认配置为PatternLayoutEncoder --> <encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder><target>System.err</target>
</appender>

FileAppender : 

把日志添加到文件,有以下子节点:

<file> : 被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。

<append> : 如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。

<encoder> : 对记录事件进行格式化。

<prudent> : 如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。

<appender name="limeFileLogger" class="ch.qos.logback.core.FileAppender"><file>limeFileLogger.log</file><append>true</append><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder><prudent>false</prudent>
</appender>

RollingFileAppender : 

滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件

1,<file>:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。

2,<append>:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。

3,<encoder>:对记录事件进行格式化。(具体参数稍后讲解 )

4,<rollingPolicy>:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名,。

TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动。有以下子节点:

(1),<fileNamePattern>:指定文件命名格式,每隔一段时间改变一次

(2),<maxHistory>:可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件

5,<triggeringPolicy >: 告知 RollingFileAppender 合适激活滚动。

SizeBasedTriggeringPolicy: 查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动。只有一个节点:

<maxFileSize>:这是活动文件的大小,默认值是10MB。

<prudent>:当为true时,不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy,但是有两个限制,1不支持也不允许文件压缩,2不能设置file属性,必须留空。

例如:每天生成一个日志文件,保存30天的日志文件

  <!--文件输出info日志的配置--><appender name="fileInfolog" class="ch.qos.logback.core.rolling.RollingFileAppender"><!--滚动策略 按照时间来滚动 每日创建一个日志文件--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>D:/log/fileInfolog%d.log</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>%d - %msg%n</pattern></encoder></appender>

例如:当文件大于20MB时生成新的日志文件

<!--文件输出info日志的配置--><appender name="fileInfolog" class="ch.qos.logback.core.rolling.RollingFileAppender"><!--当文件大于20MB时,生成新的日志文件--><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">   <maxFileSize>20MB</maxFileSize>   </triggeringPolicy><encoder><pattern>%d - %msg%n</pattern></encoder></appender>

<filter>: 

过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之一。返回DENY,日志将立即被抛弃不再经过其他过滤器;返回NEUTRAL,有序列表里的下个过滤器过接着处理日志;返回ACCEPT,日志会被立即处理,不再经过剩余过滤器。

过滤器被添加到<Appender>中,为<Appender> 添加一个或多个过滤器后,可以用任意条件对日志进行过滤。<Appender>有多个过滤器时,按照配置顺序执行。

LevelFilter:

级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。有以下子节点:

<level>:设置过滤级别

<onMatch>:用于配置符合过滤条件的操作

<onMismatch>:用于配置不符合过滤条件的操作

  <!--文件输出info日志的配置--><appender name="fileInfolog" class="ch.qos.logback.core.rolling.RollingFileAppender"><!--为了在info中不出现error的日志,因为error的日志级别最高,所以我们不用普通的过滤器,而是在权限过滤器下匹配相应级别的日志,进行筛选--><!--筛选的级别有三种 DENY ACCEPT  NEUTRAL  禁止,接受和中立   具体看类 filterReply--><filter class="ch.qos.logback.classic.filter.LevelFilter"><!--设置权限--><level>ERROR</level><!--命中--><onMatch>DENY</onMatch><!--未命中--><onMismatch>ACCEPT</onMismatch></filter><encoder><pattern>%d - %msg%n</pattern></encoder><!--滚动策略 按照时间来滚动 每日创建一个日志文件--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>D:/log/fileInfolog%d.log</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy></appender>

ThresholdFilter:临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝。

<!--文件输出error日志的配置--><appender name="fileErrorlog" class="ch.qos.logback.core.rolling.RollingFileAppender"><!--为了在error日志中没有info日志,所以我们设置一个过滤器 记住是ThresholdFilter,不是levelFilter--><filter class = "ch.qos.logback.classic.filter.ThresholdFilter"><level>ERROR</level></filter><encoder><pattern>%d - %msg%n</pattern></encoder><!--滚动策略 按照时间来滚动--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>D:/log/fileErrorlog%d.log</fileNamePattern></rollingPolicy></appender>

EvaluatorFilter:

求值过滤器,评估、鉴别日志是否符合指定条件。有一下子节点:

<evaluator>:

鉴别器,常用的鉴别器是JaninoEventEvaluato,也是默认的鉴别器,它以任意的java布尔值表达式作为求值条件,求值条件在配置文件解释过成功被动态编译,布尔值表达式返回true就表示符合过滤条件。evaluator有个子标签<expression>,用于配置求值条件,有以下子节点:。

< onMatch>:用于配置符合过滤条件的操作

<onMismatch>:用于配置不符合过滤条件的操作

<encoder> : 

负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。

目前PatternLayoutEncoder 是唯一有用的且默认的encoder ,有一个<pattern>节点,用来设置日志的输入格式。使用“%”加“转换符”方式,如果要输出“%”,则必须用“\”对“\%”进行转义。

<logger>:

用来设置某一个包或者具体的某一个类的日志打印级别,有以下子节点:

name:用来指定受此loger约束的某一个包或者具体的某一个类。

<level>:用来设置打印级别

addtivity:是否向上级loger传递打印信息。默认是true。

<loger>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个loger

<logger name="test.log4j.test8.UseLog4j" additivity="false"><level value ="WARN"/><appender-ref ref="fileInfolog"/></logger><!--指定logger的设置,additivity指示是否遵循缺省的继承机制 --><logger name="test.log4j.test8.UseLog4j_" additivity="false"><level value ="ERROR"/><appender-ref ref="fileErrorlog"/></logger>

<root>:

输出日志级别

设置root的日志级别为info,指定所有<apender>的日志级别为info

<root>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个loger。

    <root level="info"><appender-ref ref="consolelog"/><appender-ref ref="fileInfolog"/><appender-ref ref="fileErrorlog"/><appender-ref ref="STDOUT"/><appender-ref ref="limeFileLogger"/></root>

如下:

<?xml version="1.0" encoding="utf-8" ?><configuration><!--配置控制台的输出--><appender name="consolelog" class="ch.qos.logback.core.ConsoleAppender"><layout class="ch.qos.logback.classic.PatternLayout"><pattern> %d- %msg%n</pattern></layout></appender><!--文件输出info日志的配置--><appender name="fileInfolog" class="ch.qos.logback.core.rolling.RollingFileAppender"><!--为了在info中不出现error的日志,因为error的日志级别最高,所以我们不用普通的过滤器,而是在权限过滤器下匹配相应级别的日志,进行筛选--><!--筛选的级别有三种 DENY ACCEPT  NEUTRAL  禁止,接受和中立   具体看类 filterReply--><filter class="ch.qos.logback.classic.filter.LevelFilter"><!--设置权限--><level>ERROR</level><!--命中--><onMatch>DENY</onMatch><!--未命中--><onMismatch>ACCEPT</onMismatch></filter><encoder><pattern>%d - %msg%n</pattern></encoder><!--滚动策略 按照时间来滚动 每日创建一个日志文件--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>D:/log/fileInfolog%d.log</fileNamePattern></rollingPolicy></appender>
<!--过滤掉所有日志消息中不包含“billing”字符串的日志。--><appender name="STDOUT"class="ch.qos.logback.core.ConsoleAppender">  <filterclass="ch.qos.logback.core.filter.EvaluatorFilter">        <evaluator><!-- 默认为 ch.qos.logback.classic.boolex.JaninoEventEvaluator -->  <expression>return message.contains("billing");</expression>  </evaluator>  <OnMatch>ACCEPT</OnMatch> <OnMismatch>DENY</OnMismatch> </filter>  <encoder>  <pattern>  %-4relative [%thread] %-5level %logger - %msg%n  </pattern>  </encoder>  </appender><appender name="limeFileLogger" class="ch.qos.logback.core.FileAppender"><file>limeFileLogger.log</file><append>true</append><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder><prudent>false</prudent></appender><!--文件输出error日志的配置--><appender name="fileErrorlog" class="ch.qos.logback.core.rolling.RollingFileAppender"><!--为了在error日志中没有info日志,所以我们设置一个过滤器 记住是ThresholdFilter,不是levelFilter--><filter class = "ch.qos.logback.classic.filter.ThresholdFilter"><level>ERROR</level></filter><encoder><pattern>%d - %msg%n</pattern></encoder><!--滚动策略 按照时间来滚动--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>D:/log/fileErrorlog%d.log</fileNamePattern></rollingPolicy></appender><logger name="test.log4j.test8.UseLog4j" additivity="false"><level value ="WARN"/><appender-ref ref="fileInfolog"/></logger><!--指定logger的设置,additivity指示是否遵循缺省的继承机制 --><logger name="test.log4j.test8.UseLog4j_" additivity="false"><level value ="ERROR"/><appender-ref ref="fileErrorlog"/></logger><root level="info"><appender-ref ref="consolelog"/><appender-ref ref="fileInfolog"/><appender-ref ref="fileErrorlog"/></root>
</configuration>

log4j的日志级别以及配置相关推荐

  1. log4j的日志级别(ssm中log4j的配置)

    log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF.FATAL.ERROR.WARN.INFO.DEBUG.TRACE. ALL. 1. ALL ...

  2. springmvc+log4j操作日志记录,详细配置

    没有接触过的,先了解一下:log4j教程 部分内容来:log4j教程 感谢! 需要导入包: log包:log4j-12.17.jar 第一步:web.xml配置 <!-- log4j配置,文件路 ...

  3. log4j设置日志级别

    前几天写了一个ifm_tt_sheet项目,从IFM向铁塔那边发送故障单,可是weblogic自带的jar包webservice中的某个包和我导入的jar包saaj.jar包路径内容完全一致,导致ax ...

  4. log4j的日志级别

    1.优先级:OFF>FATAL>ERROR>WARN>INFO>DEBUG>TRACE> ALL) 2.等级解释: ALL :最低等级的,用于打开所有日志记录 ...

  5. log4j日志级别以及配置

    日志记录器(Logger)的行为是分等级的.分为 - OFF - FATAL - WARN - INFO - DEBUG - TRACE - ALL Log4j建议只使用四个级别,优先级从高到低分别是 ...

  6. java log4j基本配置及日志级别配置详解,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  7. springmvc log4j设置日志输出级别

    myeclipse中有一个springmvc项目,集成了log4j的日志,每次看到控制台打出很多的info信息,会很烦,所以要设置输出的level级别,参考如下说明: 就是log4j的日志级别使用错误 ...

  8. 手写logback_springboot logback调整mybatis日志级别无效的解决

    springboot logback调整mybatis日志级别无效的解决 现象 在日志配置文件 logback-spring.xml 中,无论怎么修改级别,mybatis 的 sql 日志都会打印出来 ...

  9. SpringMVC学习(三)——SpringMVC+Slf4j+Log4j+Logback日志集成实战分享

    文章目录 1.概述 1.1 说明 1.2 日志体系 1.2.1 JCL日志面门介绍 1.2.2 Slf4j日志面门介绍 2.几种日志系统介绍: 2.1 Slf4j 2.2 Commons-loggin ...

  10. Log4j写日志文件使用详解

    Log4j输出到控制台成功,写入文件失败 - Log4j和commons log的整合 一.今天在使用commongs-logging.jar和log4j.properties来输出系统日志的时候,发 ...

最新文章

  1. 2dx解析cocosbuilder中使用layer时的缺陷
  2. MySQL从库的列类型不一致导致的复制异常问题
  3. project 模板_不会绘制横道图?18个施工进度计划横道图模板,可一键自动生成,方便快捷易操作,直观形象,相当好用...
  4. pytorch gather_【Pytorch】Pytorch-1.1.0 版本新特性
  5. BPP 相关——02
  6. linux系统加多个网卡,Linux环境下填加多个IP段在同一网卡
  7. 高性能mysql 小查询_高性能MySQL06-查询优化(慢查询)
  8. java-银行业务调度系统《十一》
  9. c++实现 :n进制两数相加模板
  10. 几个支持 FreeSWITCH 的网络电话的安装与使用(linphone、MicroSIP、Sipdroid)
  11. 2021-07-13
  12. 将两张图片合并成一个PDF,不收费
  13. 【阿里云短信】开通使用
  14. python识别文字并且提示_Python识别文字,实现看图说话|CSDN博文精选
  15. 网页中用到的对比原则(一):色彩对比
  16. 生成均匀分布次序统计量的伪随机数 生成删失伪随机样本
  17. 从删库到恢复到跑不了路-数据恢复工程师解说顺丰删库事件
  18. adf的主要功能之一是_复印机ADF是什么意思
  19. 剪了 20% 的刘海、120Hz 刷新率、1TB 存储,最高售价为 12999 元的 iPhone 13 系列来了!
  20. arctanx麦克劳林公式推导过程_半桥 LLC 基波分析和参数计算过程推导

热门文章

  1. 语音识别行业技术和市场横向对比
  2. [HTML+CSS+Vue.js] 超长文本等内容默认折叠显示,点击展开全文,再点击收起(仿知乎效果)
  3. 使用WePE对无法启动的系统文件进行操作
  4. 针对初学者的 MQL 5 中的自定义指标
  5. win10喇叭没声音,Realtek高清音频管理器 打不开问题解决
  6. java:单例模式的五种实现方式
  7. java 单例 内存释放_java 单例模式 防止内存泄漏
  8. Visual Studio 2015 安装教程(附安装包)
  9. beatmaker3 android,Hip-Hop Beat Maker app
  10. 广义相对论和量子力学的根本矛盾