您的位置:

log日志级别详解

一、log日志级别设置方法

日志级别指的是对输出日志的控制,一般分为ERROR、WARN、INFO、DEBUG和TRACE五个级别,分别代表错误、警告、信息、调试和跟踪等级别。通常情况下,我们需要针对不同的场景设置合适的日志级别,以方便我们调试定位问题。

在Java开发过程中,我们通常会使用log4j、logback、slf4j等框架来进行日志输出,这些框架都提供了对应的日志级别设置方法。


// log4j日志级别设置方法
import org.apache.log4j.Level;
import org.apache.log4j.Logger;

public class MyExample {
    private static final Logger logger = Logger.getLogger(MyExample.class);

    public void doSomething() {
        logger.setLevel(Level.INFO);
        logger.info("Hello, World!");
    }
}

// logback日志级别设置方法
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;

public class MyExample {
    private static final Logger logger = (Logger)LoggerFactory.getLogger(MyExample.class);

    public void doSomething() {
        logger.setLevel(Level.INFO);
        logger.info("Hello, World!");
    }
}

// slf4j日志级别设置方法
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyExample {
    private static final Logger logger = LoggerFactory.getLogger(MyExample.class);

    public void doSomething() {
        logger.info("Hello, World!");
    }
    // 可通过配置文件指定日志级别
}

二、log日志级别有哪几种

在Java中,有五种常见的日志级别,分别是:

  • ERROR(错误)
  • WARN(警告)
  • INFO(重要信息)
  • DEBUG(调试信息)
  • TRACE(追踪信息)

从下文中的内容可以看到,这些日志级别都有不同的使用场景,我们需要根据实际需求进行设置。

三、log日志级别从高到低

从高到低的顺序分别是:

  1. ERROR(错误):严重且必须被立即处理的错误。
  2. WARN(警告):可能会影响系统的正常运行,但不是严重错误。
  3. INFO(重要信息):有助于了解系统的当前状态和问题,但不需要立即处理。
  4. DEBUG(调试信息):用于调试系统中的问题,通常不会被打印到线上日志中。
  5. TRACE(追踪信息):用于追踪代码执行路径和参数,通常也不会被打印到线上日志中。

在日常开发中,我们通常会将日志级别设置为INFO或DEBUG,以便于观察系统的行为和定位问题。

四、logback日志级别

logback是Java语言中的一个流行的日志框架,它是log4j框架的继任者,支持多线程同时写入日志,而且处理效率高、占用资源低。

logback中的日志级别和log4j相同,分别有ERROR、WARN、INFO、DEBUG和TRACE五个级别。

logback的输出格式可以通过配置来进行自定义,以下是一个logback.xml的配置示例:


<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
        </encoder>
    </appender>
    <root level="debug">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

五、logback日志级别配置

通过在配置文件中设置logger节点,可以对不同包的日志进行不同的级别控制,以下是一个logback.xml的配置示例:


<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
        </encoder>
    </appender>

    <logger name="com.example" level="debug" additivity="false">
        <appender-ref ref="STDOUT" />
    </logger>

    <root level="info">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

六、log日志打印级别

在Java中,我们通常使用System.out.println()和System.err.println()方法来进行日志打印,但是这种做法不够优雅,而且日志控制不方便。相比之下,使用log4j、logback等框架可以更加方便地进行日志输出。

以下是一个log4j的日志输出示例:


// 导入log4j相关类
import org.apache.log4j.Logger;
import org.apache.log4j.Level;

public class MyExample {
    private static final Logger logger = Logger.getLogger(MyExample.class);

    public void doSomething() {
        logger.error("This is an error message");
        logger.warn("This is a warning message");
        logger.info("This is an information message");
        logger.debug("This is a debug message");
        logger.trace("This is a trace message");
    }
}

七、log日志的五种级别

log日志一般分为5种级别,分别是:

  • ERROR:严重错误,一般代表程序无法继续运行。
  • WARN:警告,可能会影响程序的正常运行。
  • INFO:信息,程序正常运行的信息。
  • DEBUG:调试信息,用于程序的调试。
  • TRACE:追踪信息,用于程序的调试和问题定位。

八、logcat区域中日志级别

在Android开发中,我们通常使用logcat命令行工具来查看应用程序的日志输出。logcat中的日志级别和Java语言中的相同,分别有ERROR、WARN、INFO、DEBUG和VERBOSE五个级别。其中,logcat默认只输出WARN及以上级别的日志,我们可以通过在命令行中指定参数来改变日志级别。

使用logcat来查看应用程序的日志输出可以通过以下命令实现:


// 查看所有日志
adb logcat

// 仅显示ERROR级别的日志
adb logcat *:E

// 仅显示ERROR和WARN级别的日志
adb logcat *:E MyTag:W

// 仅显示MyTag标签下的所有日志
adb logcat MyTag:*

九、5种日志级别的使用

1. ERROR:严重错误,一般代表程序无法继续运行。

在编写代码时,我们需要特别注意潜在的异常情况,防止出现严重错误导致程序无法继续运行。以下是一个Java异常处理的示例:


try {
    // some code here...
} catch (Exception e) {
    logger.error("An exception occurred", e);
}

2. WARN:警告,可能会影响程序的正常运行。

在程序运行过程中,某些情况可能表明代码出现了潜在的问题。例如,网络请求超时、磁盘空间不足等情况,我们需要使用WARN级别的日志进行提示,以便检查并修复问题。


if (response.isSuccessful()) {
    // do something...
} else {
    logger.warn("Request failed: " + response.code());
}

3. INFO:信息,程序正常运行的信息。

在代码执行过程中,我们可能需要输出一些运行信息,以方便检查程序是否正常工作。例如,代码执行时间、方法调用次数等信息,我们可以使用INFO级别的日志来输出。


logger.info("The request took " + elapsed + "ms to complete");

4. DEBUG:调试信息,用于程序的调试。

在开发阶段,我们通常需要进行调试,以便检查代码是否正确执行,是否存在潜在的问题。使用DEBUG级别的日志可以方便地在控制台输出中查看相关信息。


logger.debug("The variable x has a value of " + x);

5. TRACE:追踪信息,用于程序的调试和问题定位。

TRACE级别的日志相比于DEBUG级别更加详细,可以展示更多细节信息。例如,代码的执行路径、参数列表等信息。通常情况下,我们会在需要精细调试时使用TRACE级别的日志。


logger.trace("The method foo is called with the arguments " + arg1 + ", " + arg2);

综上所述,日志级别在Java开发中起着重要的作用,不同的级别可以方便地控制日志的输出。在实际开发中,我们需要根据实际需求进行灵活设置,以方便调试和定位问题。