Java日志入门

JDK Logging
//jdk内置日志工具
//配置需要在JVM启动时传递参数
import java.util.logging.Logger;
public class Hello {
    public static void main(String[] args) {
        Logger logger = Logger.getGlobal();
        logger.info("start process...");
    }
}
Commons Logging 和 Log4j
//Commons Logging 是一种日志接口,Log4j是接口具体实现
//这里省略配置文件

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class Main {
    public static void main(String[] args) {
        Log log = LogFactory.getLog(Main.class);
        log.info("start...");
        log.warn("end.");
    }
}
SLF4J(Simple Logging Facade for Java) 和 Logback
//SLF4J 是另一种日志接口,Logback是具体实现(此外还有slf4j-simple、slf4j-log4j12)
//比Commons Logging多了占位符,且Log改成Logger
//这里省略配置文件

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
    final Logger logger = LoggerFactory.getLogger(Main.class);
    logger.info("start...");
    logger.warn("end.");
    logger.info("Set score {} for Person {} ok.", "99", "foobar");   //占位符
}

实际应用
//maven依赖
//可引入spring-boot-starter-logging,含有logback
//其中 spring-boot-starter 含有spring-boot-starter-logging
//spring-boot-starter-thymeleaf 含有 spring-boot-starter 
//项目中注意即可,有必要要进行依赖排除

//日志级别 TRACE < DEBUG < INFO < WARN < ERROR < FATAL
//spring核心开启debug级别,包含嵌入式容器、hibernate、spring会输出更多内容
//application.properties中
debug=true  

//常规写法外,可用注解,但需要引入lombok
@Slf4j                    //引入注解后
...
//可直接代码中使用,并可用占位符
logger.info("Set score {} for Person {} ok.", "99", "foobar");   

//日志配置
//输出文件,默认Spring Boot将日志输出到控制台,不会写到日志文件
//在application.yml中
logging:
	pattern:
		console: "%d - %msg%n"  //输出到控制台的格式
	path: /var/log/             //有此属性则会生成文件,默认spring.log,默认10MB会切分
	file: /var/log/spring.log   //有此属性则path属性将无效
    level:                      //默认级别info即输出error、warn、info(以下建议用自定义配置)
        root: warn              //结合下面的自定义配置文件理解logger和根logger,向上匹配不到包,最终会以此级别
        org.springframework.web: debug //设置logger的具体包的级别,下同
        org.hibernate: error
    	com.xiaofeng.LoggerTest: debug 

//自定义配置文件
//首先在application.yml中定义,环境和日志路径
spring:
  profiles:
    active: dev
logback:
  logdir: /var/log
  appname: xxx
  
//创建logback-spring.xml放到src/main/resources
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--application.yml 传递参数,不能使用logback 自带的<property>标签 -->
    <springProperty scope="context" name="appname" source="logback.appname"/>
    <springProperty scope="context" name="logdir" source="logback.logdir"/>
    <contextName>${appname}</contextName>

	 <!--输出到控制台 ConsoleAppender-->
    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
        <!--展示格式 layout-->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>
                <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
            </pattern>
        </layout>
    </appender>

	<!-- 输出到文件 -->
    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
	    <!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则
	        如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
	        的日志改名为今天的日期。即,<File> 的日志都是当天的。
	    -->
	    <File>${logback.logdir}/${logback.appname}.log</File>
	    <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
	    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
	        <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
	        <FileNamePattern>${logback.logdir}/${logback.appname}.%d{yyyy-MM-dd}.log</FileNamePattern>
	        <!--只保留最近90天的日志-->
	        <maxHistory>90</maxHistory>
	        <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
	        <!--<totalSizeCap>1GB</totalSizeCap>-->
	    </rollingPolicy>
	    <!--日志输出编码格式化-->
	    <encoder>
	        <charset>UTF-8</charset>
	        <pattern>%d [%thread] %-5level %logger{36} %line - %msg%n</pattern>
	    </encoder>
	</appender>
    
    <!-- 开发环境. 多个使用逗号隔开. -->
    <springProfile name="dev">
        <!-- logger指定到具体包,additivity为是否向上传递,默认为true则会向上匹配到根root-->
        <logger name="com.example.demo.controller" level="DEBUG" additivity="false">
            <appender-ref ref="consoleLog"/>
        </logger>       
         <!--指定根logger的日志输出级别-->
	    <root level="INFO">
	        <appender-ref ref="consoleLog"/>
	    </root>
    </springProfile>
  
    <!-- 生产环境. -->
    <springProfile name="prod">
        ...
    </springProfile>
    
</configuration>

参考

https://www.cnblogs.com/xrq730/p/8619156.html
https://www.liaoxuefeng.com/wiki/1252599548343744/1264739155914176
https://www.jianshu.com/p/eb7d76633acb
https://blog.csdn.net/l1028386804/article/details/80464909
https://www.jianshu.com/p/f67c721eea1b
https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-logging.html
https://www.cnblogs.com/xrq730/p/8628945.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值