返回顶部
首页 > 资讯 > 精选 >java日志打印怎么使用
  • 138
分享到

java日志打印怎么使用

2023-06-26 07:06:06 138人浏览 八月长安
摘要

本篇内容介绍了“java日志打印怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、简介日志打印是java代码开发中不可缺少的重要一步

本篇内容介绍了“java日志打印怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、简介

  • 日志打印是java代码开发中不可缺少的重要一步。

  • 日志可以排查问题,可以搜集数据

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 seconds">    <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</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.ThresholdFilter">            <level>ERROR</level>        </filter>        <!-- 正在记录的日志文件的路径及文件名 -->        <file>${log.path}/error.log</file>        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">            <!-- 每天日志归档路径以及格式 -->            <fileNamePattern>${log.path}/error-%d{yyyyMMdd}.%i.log.zip</fileNamePattern>            <!--日志文件保留天数-->            <maxHistory>${maxHistory}</maxHistory>            <!-- 日志总保存量为2GB -->            <totalSizeCap>2GB</totalSizeCap>            <timeBasedFileNamingAndTriggeringPolicy                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">                <!--文件达到 最大100MB时会被压缩和切割 -->                <maxFileSize>100MB</maxFileSize>            </timeBasedFileNamingAndTriggeringPolicy>        </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.TimeBasedRollingPolicy">            <!-- 每天日志归档路径以及格式 -->            <fileNamePattern>${log.path}/info-%d{yyyyMMdd}.%i.log.zip</fileNamePattern>            <!--日志文件保留天数-->            <maxHistory>${maxHistory}</maxHistory>            <!-- 日志总保存量为10GB -->            <totalSizeCap>2GB</totalSizeCap>            <timeBasedFileNamingAndTriggeringPolicy                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">                <!--文件达到 最大100MB时会被压缩和切割 -->                <maxFileSize>100MB</maxFileSize>            </timeBasedFileNamingAndTriggeringPolicy>        </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.TimeBasedRollingPolicy">            <!-- 每天日志归档路径以及格式 -->            <fileNamePattern>${log.path}/debug-%d{yyyyMMdd}.%i.log.zip</fileNamePattern>            <!--日志文件保留天数-->            <maxHistory>${maxHistory}</maxHistory>            <!-- 日志总保存量为2GB -->            <totalSizeCap>2GB</totalSizeCap>            <timeBasedFileNamingAndTriggeringPolicy                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">                <!--文件达到 最大100MB时会被压缩和切割 -->                <maxFileSize>100MB</maxFileSize>            </timeBasedFileNamingAndTriggeringPolicy>        </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>

五、常见问题

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

我们经常会遇到一个生产问题,去看日志,啥都没有,只能重新加日志,发包,再排查问题;
所以我们要养成打日志的习惯,开发环境可以debug看,生产看不了,只能加日志,在开发的时候就把必要的日志加上;
比较重要的是接口的入参,返回,重要节点开始,结束,MQ发送接收等。

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

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

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

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

  • 需要自定义日志文件吗?

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

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

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

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

  • debug日志正确写法?

有些人可能打debug日志直接logger.debug("****");如果项目的日志级别比较高,就比较浪费性能,可以加一个if (log.isDebugEnabled()) {    log.debug("XXXXXXXXXXXXX");}
  • 动态日志级别?

有些公司支持动态配置文件,比如diamond,Nacos等,可以修改配置文件的级别,动态生效logging.level.root=info#logging.level.root=debug日常开在info,出了问题开debug找,资源有限可以这样做,不推荐生产使用

“java日志打印怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: java日志打印怎么使用

本文链接: https://lsjlt.com/news/307390.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java日志打印怎么使用
    本篇内容介绍了“java日志打印怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、简介日志打印是java代码开发中不可缺少的重要一步...
    99+
    2023-06-26
  • java怎么打印堆栈日志
    在Java中,可以使用Thread.currentThread().getStackTrace()方法来获取当前线程的堆栈信息,并将...
    99+
    2023-10-23
    java
  • java日志打印的完全使用指南
    目录一、简介二、常用日志框架三、日志级别四、logback简单介绍五、常见问题总结 一、简介 日志打印是java代码开发中不可缺少的重要一步。日志可以排查问题,可以搜集数据...
    99+
    2024-04-02
  • 使用java注解和aspectj AOP怎么实现打印日志
    本篇文章给大家分享的是有关使用java注解和aspectj AOP怎么实现打印日志,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。首先需要自定义注解:systemName:表示该...
    99+
    2023-06-06
  • Java项目中怎么打印错误日志
    这篇文章将为大家详细讲解有关Java项目中怎么打印错误日志,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.上层系统引入的非法参数。对于非法参数引入的错误, 可以通过参数校验和前置条件校验来...
    99+
    2023-06-16
  • python怎么打印日志文件
    在Python中,可以使用内置的logging模块来打印日志文件。以下是一个简单的示例代码: import logging # 设...
    99+
    2024-03-12
    python
  • python中打印日志
    一、日志介绍 1、日志级别:日志的优先级、重要性或者严重程度 2、日志的作用:调试程序,跟踪定位bug,分析用户行为与数据统计 3、常见的日志级别(从小级别到大级别排序):         debug:调试级别,打印非常详细的日志信息,通常...
    99+
    2023-09-25
    python
  • 使用logback实现日志打印过滤
    logback日志打印过滤 1.只打印sql语句以及参数 <?xml version="1.0" encoding="UTF-8" ?> <co...
    99+
    2024-04-02
  • 使用JVM常用GC日志打印参数
    目录JVM常用GC日志打印参数1. PrintGC2. PrintGCDetails3. PrintGCTimeStamps4. PrintGCApplicationStoppedT...
    99+
    2024-04-02
  • [Android studio] 第2节 使用log打印日志
    目录 一、日志是什么? 二、使用方法 1.引入库 2.使用日志 3.使用详解 4.android.util.Log 一、日志是什么? 在 Android Studio 中,日志是一个重要的工具,用于诊断应用程序的执行过程...
    99+
    2023-09-21
    android studio android ide
  • Java 日志打印的15个好建议
    目录1. 选择恰当的日志级别2. 日志要打印出方法的入参、出参3. 选择合适的日志格式4. 遇到if...else...等条件时,每个分支首行都尽量打印日志5.日志级别比较低时,进行...
    99+
    2024-04-02
  • Printk打印内核日志
    一、背景 Linux 内核中提供了内核日志打印的工具printk。它的使用方式C语言中的printf是类似的。接下来我们介绍一下printk的使用方式。本文以打印Binder中的日志为例,进行演示。 ...
    99+
    2023-10-08
    linux 运维 服务器
  • Android JNI打印logcat日志
    在 JNI 中打印日志可以使用 __android_log_print 函数来实现。该函数是 Android NDK 提供的一个用于在本地代码中输出日志消息到 logcat 的方法。 要在 JNI 中...
    99+
    2023-10-21
    android JNI
  • springboot怎么实现打印彩色日志
    这篇文章主要为大家展示了“springboot怎么实现打印彩色日志”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“springboot怎么实现打印彩色日志”这篇文章吧。springboot打印彩色...
    99+
    2023-06-20
  • linux怎么打印日志到文件中
    在Linux中,可以使用以下命令将日志打印到文件中:1. 使用`echo`命令将日志内容输出到标准输出,并使用重定向符`>`将输出重...
    99+
    2023-10-09
    linux
  • mybatis怎么打印日志到控制台
    要打印MyBatis的日志到控制台,可以按照以下步骤进行设置: 在你的项目中找到MyBatis的配置文件(一般为`mybatis-...
    99+
    2023-10-25
    mybatis
  • log4j打印日志无效怎么解决
    如果log4j无法打印日志,以下是一些可能的解决方法: 确保log4j的配置文件正确:检查log4j.properties或lo...
    99+
    2024-04-08
    log4j2
  • 怎么使用thinkphp5将错误SQL语句打印到日志中
    这篇文章主要介绍了怎么使用thinkphp5将错误SQL语句打印到日志中的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用thinkphp5将错误SQL语句打印到日志中文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-07-06
  • 如何使用logback实现日志打印过滤
    这篇文章主要为大家展示了“如何使用logback实现日志打印过滤”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用logback实现日志打印过滤”这篇文章吧。logback日志打印过滤1.只...
    99+
    2023-06-20
  • Vue3 使用axios拦截器打印前端日志
    目录一、前言二、使用axios拦截器打印前端日志一、前言 很多时候我们需要对前端进行调试,也就是前后端接口之间交互的调试,常用的方式肯定是打日志了,如console.log ('日志...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作