Java基础2-日志

转载自 link

log4j

Maven依赖

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

log4j.properties

log4j.rootLogger=all, stdout, logfile

<!--more-->

#日志输出位置为控制台
#(ConsoleAppender)控制台
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %l %F %p %m%n

#日志输出位置为文件
#(RollingFileAppender)
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
#日志文件位置
log4j.appender.logfile.File=log/log.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.Append = true
log4j.appender.logfile.MaxFileSize=1MB
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %l %F %p %m%n

用法

package com.wsx;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

public class Test {
    public static void main(String[] args) {
        Logger logger = Logger.getLogger(Test.class);
        logger.info("info");
        logger.debug(" debug ");
        logger.debug(" debug ");
        logger.debug(" debug ");
        logger.debug(" debug ");
        logger.debug(" debug ");
        logger.debug(" debug ");
        logger.error(" error ");
        logger.error(" error ");
        logger.error(" error ");
    }
}

SLF4J

log的实现太多了,log4j,logBack,jdklog,以后想换怎么办呢? Simple Logging Facade for Java 就像和JDBC一样,SLF4J把所有的日志框架连接起来

五个级别

trace,debug,info,warn,error 啥事不干,写下面的代码

package com.wsx;

import org.slf4j.LoggerFactory;
import org.slf4j.Logger;

public class Test {
    public static void main(String[] args) {
        Logger logger = LoggerFactory.getLogger(Test.class);
        logger.trace("trace");
        logger.debug("debug");
        logger.info("info");
        logger.warn("warn");
        logger.error("error");
    }
}

得到了

22:23:01.931 [main] DEBUG com.wsx.Slf4jStudy - debug
22:23:01.940 [main] INFO com.wsx.Slf4jStudy - info
22:23:01.941 [main] WARN com.wsx.Slf4jStudy - warn
22:23:01.941 [main] ERROR com.wsx.Slf4jStudy - error

logback

写一个logback.xml appender 后面是log的名字,再往后是输出位置:文件或者控制台 level后面跟级别,表示输出哪些东西

<configuration>
    <!--
    1.起别名
    2.服务器上跑的项目多的时候可以好的区分
     -->
    <contextName>play_dice</contextName>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 调整输出的格式 -->
        <encoder>
          <pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>
    <!--
    1.key:对应的是动态的文件名
    2.datePattern:是动态生成的时间格式
    -->
    <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>

    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <!-- 动态设置日志的文件名 -->
        <!--<file>D:\日志\log-${bySecond}.txt</file>-->
        <append>false</append><!-- 每次一更新就是新的 -->
        <encoder>
          <pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 设置输出的等级 -->
    <root level="tarce">
        <appender-ref ref="STDOUT"/><!-- 输出到控制台 -->
        <appender-ref ref="FILE"/><!-- 输出到文件中 -->
    </root>
</configuration>

简化

注释太烦了,我们给他全删掉,使用下面的vim指令 \v代表字符模式,把所有的特殊字符看着特殊意义 (.|\n)可以匹配所有的字符 {-}是*的非贪婪匹配

%s/\v\<!--(.|\n){-}--\>//g

会到logback中 %date是时间,%thread是线程,level是级别,-是左对齐,%logger指名字,%msg是日志输出 %n是换行

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>
    <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <append>false</append>
        <encoder>
            <pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>
    <root level="tarce">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE"/>
    </root>
</configuration>

细节

logger.info("hello {} {} {}","I","am","wsx");

猜你喜欢

转载自blog.csdn.net/qq_41157212/article/details/114812365