Log4J

作者: 强某某 | 来源:发表于2019-04-18 10:43 被阅读5次

    日志配置文件(log4j.propertie)

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

    日志附加器

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

    常用的附加器实现类

    • org.apache.log4j.ConsoleAppender:日志输出到控制台
    • org.apache.log4j.FileAppender:日志输出到文件
    • org.apache.log4j.RollingFileAppender:当日志文件大小到达指定尺寸的时候将产生一个新的日志文件
    • org.apache.log4j.DailyRollingFileAppender:每天产生一个日志文件

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

    • %m:输出代码中指定的消息
    • %p:输出优先级,即 DEBUG,INFO,WARN,ERROR,FATAL
    • %r:输出自应用启动到输出该 log 信息耗费的毫秒数
    • %c:输出所属的类目,通常就是所在类的全名
    • %t:输出产生该日志事件的线程名
    • %n:输出一个回车换行符,Windows 平台为 /r/n,Unix 平台为 /n
    • %d:输出日志时间点的日期或时间,默认格式为 ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日 22:10:28,921
    • %l:输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 )

    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
    

    日志配置相关说明:

    • log4j.rootLogger:根日志,配置了日志级别为 INFO,预定义了名称为 console、file 两种附加器
    • log4j.appender.console:console 附加器,日志输出位置在控制台
    • log4j.appender.console.layout:console 附加器,采用匹配器布局模式
    • log4j.appender.console.layout.ConversionPattern:console 附加器,日志输出格式为:日期 日志级别 [类名] - 消息换行符
    • log4j.appender.file:file 附加器,每天产生一个日志文件
    • log4j.appender.file.File:file 附加器,日志文件输出位置 logs/log.log
    • log4j.appender.file.layout:file 附加器,采用匹配器布局模式
    • log4j.appender.A3.MaxFileSize:日志文件最大值
    • log4j.appender.A3.MaxBackupIndex:最多纪录文件数
    • log4j.appender.file.layout.ConversionPattern:file 附加器,日志输出格式为:日期 日志级别 [类名] - 消息换行符

    测试代码

    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 去处理字符串连接命令的时间。

    相关文章

      网友评论

        本文标题:Log4J

        本文链接:https://www.haomeiwen.com/subject/nfrzwqtx.html