最近在项目中,常有意无意的看到这样的代码
if(log.isDebugEnabled()){ log.debug("msg"); }
虽然从方法的命名规则大概知道是什么意思,但不知为什么要这样写?
通过百度搜索,大概理解这样写为提高代码的效率,这样写为什么能提高效率呢?
原因在于log日志具有以下5种正常级别
org.apache.log4j.Level类提供以下级别,但也可以通过Level类的子类自定义级别。 Level 描述 ALL 各级包括自定义级别 DEBUG 指定细粒度信息事件是最有用的应用程序调试 ERROR 错误事件可能仍然允许应用程序继续运行 FATAL 指定非常严重的错误事件,这可能导致应用程序中止 INFO 指定能够突出在粗粒度级别的应用程序运行情况的信息的消息 OFF 这是最高等级,为了关闭日志记录 TRACE 指定细粒度比DEBUG更低的信息事件 WARN 指定具有潜在危害的情况
优先级关系:
分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL或者您定义的级别。
Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG
当在log4j.properties种设置:log4j.rootLogger=info,stdout
if(log.isDebugEnabled()){//此条件为假,if的语句体不执行,可以有选择的执行打印日志,从而提高了代码执行效率 log.debug("msg"); }
示例:
public class TestLog { public static final Logger log = LoggerFactory.getLogger(TestLog.class); public static void main(String[] args) { //int count = 0; log.info("-------begin----"); if(log.isDebugEnabled()){ log.debug("debug"); } log.info("-------end------"); } }
当设置:log4j.rootLogger=debug,stdout时输出结果:
2017-07-31 22:12:49,856-5p TestLog - -------begin---- 2017-07-31 22:12:49,871-5p TestLog - debug 2017-07-31 22:12:49,871-5p TestLog - -------end------
当设置:log4j.rootLogger= info,stdout时输出结果:
2017-07-31 22:28:08,555-5p TestLog - -------begin---- 2017-07-31 22:28:08,558-5p TestLog - -------end------
使用{}写法也可以到达效果:
public static void main(String[] args) { //int count = 0; log.info("-------begin----"); //if(log.isDebugEnabled()){ // log.debug("debug"); //} log.debug("debug{}"); log.info("-------end------"); }
输出结果一样,大家可以动手尝试下,书写代码百遍,其义自现。
相关推荐
#### 四、使用Log4j记录日志 1. **引入Log对象**: ```java protected final Log log = LogFactory.getLog(getClass()); ``` 在Java类中,需要引入Log对象以便记录日志信息。 2. **记录日志信息**: ```...
#### 四、Log4j的使用 在代码中使用Log4j非常简单,只需要通过`LogFactory.getLog()`方法获取对应的Logger实例即可。例如: ```java protected final Log log = LogFactory.getLog(getClass()); if (log....
在项目中添加 Commons Logging 的依赖,并设置 Log4j 为 Commons Logging 的实现。 **2. 编写代码** 使用 Commons Logging 的 `Log` 接口来记录日志。 ```java import org.apache.commons.logging.Log; ...
- 为了减少性能开销,可以在代码中使用`if (log.isDebugEnabled()) { log.debug(); }`的方式来判断是否输出debug级别的日志。 3. **环境适应性**: - 对于不同的环境(如开发环境、测试环境、生产环境)可以采用...
3. Logger工作原理:在`org.apache.log4j.Logger`类中,每个logger都有一个优先级,通过`isDebugEnabled()`、`isInfoEnabled()`等方法检查当前日志级别是否允许输出特定级别的日志。 4. 配置解析:`org.apache.log4...
#### 四、Log4j使用方法 ##### 4.1 properties配置文件详解 `log4j.properties`文件是Log4j中最常见的配置文件类型。配置项包括但不限于: - **rootLogger**:设置全局日志级别及默认的输出目的地。 - **Appender...
### 配置Log4J的一般步骤 #### 一、简介 Log4J是一个流行的Java日志框架,用于记录应用程序的运行状态。通过合理的配置,它可以有效地帮助开发人员追踪问题并进行性能分析。本文将详细介绍如何配置Log4J,包括下载...
#### 四、使用Log4j记录日志 为了在Java代码中使用Log4j,首先需要引入Log4j的API。 **示例代码:** ```java import org.apache.log4j.Logger; public class MyClass { protected final Logger log = Logger....
1. **引入Log4j库**:将`log4j-1.2.8.jar`添加到项目的类路径中。 2. **创建日志记录器实例**:通过`LogFactory.getLog(Class)`方法获取一个日志记录器实例。 ```java protected final Log log = LogFactory.get...
在实际项目中,通常需要在项目目录下的 `src` 目录中创建 `log4j.properties` 文件,并配置相应的日志输出规则。例如: ```properties log4j.rootLogger=INFO, Console log4j.appender.Console=org.apache.log4j....
#### 四、Log4j的日志级别 **4.1 Log4j支持的日志级别** Log4j支持以下几种日志级别: - **OFF**: 不记录任何日志。 - **FATAL**: 严重错误,通常会导致程序崩溃的情况。 - **ERROR**: 错误信息,一般指非致命的...
此外,Log4j还支持多语言环境下的日志处理,这意味着不仅限于Java,还可以在C/C++、.Net、PL/SQL等环境中使用,从而实现了跨平台、跨语言的日志管理。 #### 二、log4j配置指南 ##### 第一步:引入依赖 首先需要将...
本教程将引导你了解如何使用Log4j,包括其核心概念、配置以及在实际项目中的应用。 一、Log4j的核心组件 1. **Logger**: 日志器是Log4j的基本组件,负责生成日志事件。每个应用程序可以有多个Logger,它们以层级...
Log4j是一款广泛使用的日志记录工具,尤其在Java开发中极为常见。它允许开发者灵活地控制日志信息的输出级别、格式以及目的地,从而帮助调试、监控和维护应用程序。以下是对Log4j配置和使用的一些关键知识点的详细...
4 详解4.1 定义配置文件在 `log4j.properties` 文件中,我们设置了 root logger 的级别(INFO),并指定了它使用哪些 appenders(stdout 和 R)。stdout 指向控制台,R 指向一个每天滚动的日志文件。同时,我们还...
Log4j的核心配置通常存储在一个名为`log4j.properties`的文件中。下面我们将对这个文件中的关键配置进行详细介绍。 ##### 1. `log4j.rootCategory` **定义:**这是日志系统中根级别的类别定义。它用于指定整个系统...
为了提高性能,Log4J允许在编译时静态决定是否输出日志,这通过使用Log4J的条件语句实现,如`if (logger.isDebugEnabled()) {...}`。这样,如果当前日志级别不包括DEBUG,那么条件内的代码将不会执行,避免了不必要...