SSM

Log4J

2019-04-18  本文已影响5人  强某某

日志配置文件(log4j.propertie)

输出位置:控制日志将要输出的位置,是控制台还是文件等。
输出布局:控制日志信息的显示形式。
输出级别:控制要输出的日志级别。

日志附加器

附加器的本质是一个接口,其定义语法为:log4j.appender.appenderName = 输出位置

常用的附加器实现类

打印参数: Log4J 采用类似 C 语言中的 printf 函数的打印格式格式化日志信息

Slf4j

slf4j 是一个为 Java 程序提供日志输出的统一接口,并不是一个日志实现方案,类似于JDNC一样,只是规则而已。
所以其不能单独工作,需要搭配具体实现方案,例如:apache 的 org.apache.log4j.Logger,JDK 自带的 java.util.logging.Logger 以及 log4j 等。

POM.XML

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.funtl</groupId>
    <artifactId>hello-spring</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.17.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
      <!--该依赖会自动添加log4j和slf4j-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
        </dependency>
    </dependencies>
</project>

log4j.properties 配置文件

在 src/main/resources 目录下创建名为 log4j.properties 的属性配置文件

log4j.rootLogger=INFO, console, file
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=logs/log.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.MaxFileSize=1024KB
log4j.appender.A3.MaxBackupIndex=10
log4j.appender.file.layout.ConversionPattern=%d %p [%c] - %m%n

日志配置相关说明:

测试代码

public class MyTest {

    public static final Logger logger = LoggerFactory.getLogger(MyTest.class);

    public static void main(String[] args) {
        logger.info("slf4j for info");
        logger.debug("slf4j for debug");
        logger.error("slf4j for error");
        logger.warn("slf4j for warn");

        String message = "Hello SLF4J";
        logger.info("slf4j message is : {}", message);
    }
}

输出:

2018-06-07 05:15:42,914 INFO [com.zq.hello.spring.MyTest] - slf4j for info
2018-06-07 05:15:42,915 ERROR [com.zq.hello.spring.MyTest] - slf4j for error
2018-06-07 05:15:42,915 WARN [com.zq.hello.spring.MyTest] - slf4j for warn
2018-06-07 05:15:42,916 INFO [com.zq.hello.spring.MyTest] - slf4j message is : Hello SLF4J

项目根目录下也会多出 logs/log.log 目录及文件

附:占位符说明

打日志的时候使用了 {} 占位符,这样就不会有字符串拼接操作,减少了无用 String 对象的数量,节省了内存。并且,记住,在生产最终日志信息的字符串之前,这个方法会检查一个特定的日志级别是不是打开了,这不仅降低了内存消耗而且预先降低了 CPU 去处理字符串连接命令的时间。

上一篇下一篇

猜你喜欢

热点阅读