首页 > 作文

java日志打印的完全使用指南

更新时间:2023-04-04 16:15:38 阅读: 评论:0

目录
一、简介二、常用日志框架三、日志级别四、logback简单介绍五、常见问题总结

一、简介

日志打印是java代码开发中不可缺少的重要一步。日志可以排查问题,可以搜集数据

二、常用日志框架

比较常用的日志框架就是logback, 一些老项目会使用log4j,他们用的都是slf4j-api统一接口。

(1) 使用log4j

log4j使用:1. slf4j-api-1.5.11.jar2. slf4j-log4j12-1.5.11.jar3. log4j-1.2.15.jar4. log4j.properties

代码中

import  org.slf4j.logger;import  org.slf4j.loggerfactory;logger logger = loggerfactory.getlogger(xx.class);

(2) 使用logback

logback使用:1. slf4j-api-1.5.11.jar2. logback-core.jar3. logback-classic.jar4. logback.xml

代码同log4j

import  org.slf4j.logger;import  org.slf4j.loggerfactory;logger logger = loggerfactory.getlogger(xx.class);

三、日志级别

trace < debug < info < warn < error

日常使用较多的是error, info , debug

四、logback简单介绍

简单介绍下常用的logback,logback优点:

比log4j更快和log4j使用了同一个接口,slf4j-api,可以非常方便切换定义了功能非常丰富的appender支持日志压缩

logback要正确理解xml配置文件

configuration:总的父节点property:自定义属性appender:输出控制器,可以输出到控制台,自定义文件等logger:日志级别root:控制器级别

一个例子:

<?xml version="1.0" encoding="utf-8"?><configuration scan="true" scanperiod="60 conds"><contextname>xxxxxxxx</contextname><property name="log.path" value="./log/"/><!-- 日志最大的历史 30天 --><property name="maxhistory" value="30"/><property name="log.pattern"value="%d{yyyy-mm-dd hh:mm:ss.sss} [%thread] [%x{traceid}] [%-5level] [%logger{30}:%line] %msg%n"/><!--输出到控制台--><appender name="consoleappender" class="ch.qos.logback.core.consoleappender"><!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息--><!--levelfilter: 级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onmath 和 onmismatch接收或拒绝日志。--><!--例如:将过滤器的日志级别配置为info,所有info级别的日志交给appender处理,非info级别的日志,被过滤掉。--><!--<filter class="ch.qos.logback.classic.filter.levelfilter">--><!--<level>info</level>--><!--<onmatch>accept</onmatch>--><!--<onmismatch>deny</onmismatch>--><!--</filter>--><!--thresholdfilter: 临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回neutral;当日志级别低于临界值时,日志会被拒绝。--><!-- 过滤掉所有低于 debug 级别的日志,留下debug及以上级别的日志 --><filter class="ch.qos.logback.classic.filter.thresholdfilter"><level>debug&l桃之夭夭t;/level></filter><encoder><pattern>${log.pattern}</pattern></encoder></appender><!-- 时间滚动输出 level为 info 日志 --><appender name="errorfileappender" class="ch.qos.logback.core.rolling.rollingfileappender"><!--levelfilter: 级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onmath 和 onmismatch接收或拒绝日志。--><!--例如:将过滤器的日志级别配置为info,所有info级别的日志交给appender处理,非info级别的日志,被过滤掉。--><!--<filter class="ch.qos.logback.classic.filter.levelfilter">--><!--<level>info</level>--><!--<onmatch>accept</onmatch>--><!--<onmismatch>deny</onmismatch>--><!--</filter>--><!--thresholdfilter: 临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回neutral;当日志级别低于临界值时,日志会被拒绝。--><!-- 过滤掉所有低于 debug 级别的日志,留下debug及以上级别的日志 --><filter class="ch.qos.logback.classic.filter.threshold2021加油奋斗100句filter"><level>error</level></filter><!-- 正在记录的日志文件的路径及文件名 --><file>${log.path}/error.log</file><!-- 日志记录器的滚动策略,按日期,按大小记录 --><rollingpolicy class="ch.qos.logback.core.rolling.timebadrollingpolicy"><!-- 每天日志归档路径以及格式 --><filenamepattern>${log.path}/error-%d{yyyymmdd}.%i.log.zip</filenamepattern><!--日志文件保留天数--><maxhistory>${maxhistory}</maxhistory><!-- 日志总保存量为2gb --><totalsizecap>2gb</totalsizecap><timebadfilenamingandtriggeringpolicyclass="ch.qos.logback.core.rolling.sizeandtimebadfnatp"><!--文件达到 最大100mb时会被压缩和切割 --><maxfilesize>100mb</maxfilesize></timebadfilenamingandtriggeringpolicy></rollingpolicy><encoder><pattern>${log.pattern}</pattern></encoder></appender><!-- 时间滚动输出 level为 info 日志 --><appender name="infofileappender" class="ch.qos.logback.core.rolling.rollingfileappender"><!--levelfilter: 级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onmath 和 onmismatch接收或拒绝日志。--><!--例如:将过滤器的日志级别配置为info,所有info级别的日志交给appender处理,非info级别的日志,被过滤掉。--><!--<filter class="ch.qos.logback.classic.filter.levelfilter">--><!--<level>info</level>--><!--<onmatch>accept</onmatch>--><!--<onmismatch>deny</onmismatch>--><!--</filter>--><!--thresholdfilter: 临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回neutral;当日志级别低于临界值时,日志会被拒绝。--><!-- 过滤掉所有低于 debug 级别的日志,留下debug及以上级别的日志 --><filter class="ch.qos.logback.classic.filter.thresholdfilter"><level>info</level></filter><!-- 正在记录的日志文件的路径及文件名 --><file>${log.path}/info.log</file><!-- 日志记录器的滚动策略,按日期,按大小记录 --><rollingpolicy class="ch.qos.logback.core.rolling.timebadrollingpolicy"><!-- 每天日志归档路径以及格式 --><filenamepattern>${log.path}/info-%d{yyyymmdd}.%i.log.zip</filenamepattern><!--日志文件保留天数--><maxhistory>${maxhistory}</maxhistory><!-- 日志总保存量为10gb --><totalsizecap>2gb</totalsizecap><timebadfilenamingandtriggeringpolicyclass="ch.qos.logback.core.rolling.sizeandtimebadfnatp"><!--文件达到 最大100mb时会被压缩和切割 --><maxfilesize>100mb</maxfilesize></timebadfilenamingandtriggeringpolicy></rollingpolicy><encoder><pattern>${log.pattern}</pattern></encoder></appender><!-- 时间滚动输出 level为 info 日志 --><appender name="debugfileappender" class="ch.qos.logback.core.rolling.rollingfileappender"><!--levelfilter: 级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onmath 和 onmismatch接收或拒绝日志。--><!--例如:将过滤器的日志级别配置为info,所有info级别的日志交给appender处理,非info级别的日志,被过滤掉。--><!--<filter class="ch.qos.logback.classic.filter.levelfilter">--><!--<level>info</level>--><!--<onmatch>accept</onmatch>--><!--<onmismatch>deny</onmismatch>--><!--</filter>--><!--thresholdfilter: 临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回neutral;当日志级别低于临界值时,日志会被拒绝。--><!-- 过滤掉所有低于 debug 级别的日志,留下debug及以上级别的日志 --><filter class="ch.qos.logback.classic.filter.thresholdfilter"><level>debug</level></filter><!-- 正在记录的日志文件的路径及文件名 --><file>${log.path}/debug.log</file><!-- 日志记录器的滚动策略,按日期,按大小记录 --><rollingpolicy class="ch.qos.logback.core.rolling.timebadrollingpolicy"><!-- 每天日志归档路径以及格式 --><filenamepattern>${log.path}/debug-%d{yyyymmdd}.%i.log.zip</filenamepattern><!--日志文件保留天数--><maxhistory>${maxhistory}</maxhistory><!-- 日志总保存量为2gb --><total举例说明sizecap>2gb</totalsizecap><timebadfilenamingandtriggeringpolicyclass="ch.qos.logback.core.rolling.sizeandtimebadfnatp"><!--文件达到 最大100mb时会被压缩和切割 --><maxfilesize>100mb</maxfilesize></timebadfilenamingandtriggeringpolicy></rollingpolicy><encoder><pattern>${log.pattern}</pattern></encoder></appender><logger name="com.baomidou" level="debug"/><root level="info"><appender-ref ref="consoleappender"/><appender-ref ref="errorfileappender"/><appender-ref ref="infofileappender"/><appender-ref ref="debugfileappender"/></root></configuration>

五、常见问题

1、日志打的少,不好排查问题?

我们经常会遇到一个生产问题,去看日志,啥都没有,只能重中华恐龙园攻略新加日志,发包,再排查问题;
所以我们要养成打日志的习惯,开发环境可以debug看,生产看不了,只能加日志,在开发的时候就把必要的日志烟花爆竹经营许可证申请书加上;
比较重要的是接口的入参,返回,重要节点开始,结束,mq发送接收等。

2、error, info , debug分别都什么时候使用?

error: 捕获异常的时候使用,这个没有异议
info: 比较重要的信息,使用频次不是非常高的场景,比如入参出参
debug: 一个是不是特别重要的信息,但是又不能少,还有数据量大的数据,比如大量mq信息,访问频繁的接口入参出参

3、开启debug好多无用的debug信息怎么办?

把项目的目录定为debug,其它定成info。这样只有本项目的debug日志会打印了
logging.level.root=info
logging.level.cn.mypackage=debug

4、需要自定义日志文件吗?

logback可以把日志写进自定义文件,debug,info,error分开存储,历史数据还能压缩;
按自己项目的需求来,大型项目建议分开存储。

5、springboot启动命令自带的日志和自定义日志文件的日志重复怎么办?

我们一般启动springboot项目命令为:nohup java -jar xxxxxxxx.jar >> xxxxxxx.log 2>&1 &
这个会生成一个日志文件,logback配置也会生成自己的日志文件,就会重复,造成空间浪费,如何取舍?

如果你们公司统一打包脚本的话,就用命令生成的日志文件吧,把logback配置去掉;
如果你们公司自由度比较高,就用logback生成的日志,把命令改成 >/dev/null 就可以了

6、debug日志正确写法?
有些人可能打debug日志直接logger.debug("****");如果项目的日志级别比较高,就比较浪费性能,可以加一个if (log.isdebugenabled()) {log.debug("xxxxxxxxxxxxx");}
7、动态日志级别?
有些公司支持动态配置文件,比如diamond,nacos等,可以修改配置文件的级别,动态生效logging.level.root=info#logging.level.root=debug日常开在info,出了问题开debug找,资源有限可以这样做,不推荐生产使用

总结

到此这篇关于java日志打印的文章就介绍到这了,更多相关java日志打印内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-04 16:15:36,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/88bef6a7e730f748d0518a4ebc2f7a85.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:java日志打印的完全使用指南.doc

本文 PDF 下载地址:java日志打印的完全使用指南.pdf

标签:日志   级别   临界值   过滤器
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图