`
rensanning
  • 浏览: 3547948 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38135
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:607261
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:682256
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:89318
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:401805
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69685
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91692
社区版块
存档分类
最新评论

Spring Boot 入门 - 基础篇(3)- 日志管理

 
阅读更多
Spring Boot支持JUL,Log4J2和Logback。

默认设置
-采用SLF4J + Logback
-日志只输出到控制台
-级别Level为INFO
-日志文件rotate大小为10Mb
-输出格式为:时间戳 级别 进程ID --- [线程名] 类名 日志内容
引用
2017-02-09 08:54:16.076  INFO 8296 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)


输出到文件
src/main/resources/application.properties
引用
logging.path=d:

会在该目录下创建spring.log文件,输出内容和控制台相同。

详细配置
src/main/resources/application.properties
# Location of the log file. 
logging.file=d:\\spring-boot-demo.log
# Appender pattern
logging.pattern.console=%date %-5level %logger{0} - %msg%n
logging.pattern.file=%date %-5level [%thread] %logger{0} [%file:%line] - %msg%n
logging.pattern.level=%5p
# Log levels - root
logging.level.=DEBUG
# Log levels - package
logging.level.org.springframework.web=INFO
# Log levels - class
logging.level.com.rensanning.springboot.HomeController=TRACE

*** logging.file 和 logging.path不能同时设置

测试代码
src/main/java/com/rensanning/springboot/HelloController.java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
	
    private final Logger log = LoggerFactory.getLogger(this.getClass());
	
    @RequestMapping("/")
    public String index() {
    	
        // Log a simple message
        log.debug("debug level log");
        log.info("info level log");
        log.warn("warn level log");
        log.error("error level log");
        
        return "Hello world from Spring Boot!";
    }
    
}


启动应用后访问 http://localhost:8080/。

控制台输出内容:
引用
2017-02-09 09:00:13,031 DEBUG HelloController - debug level log
2017-02-09 09:00:13,031 INFO  HelloController - info level log
2017-02-09 09:00:13,031 WARN  HelloController - warn level log
2017-02-09 09:00:13,031 ERROR HelloController - error level log

文件输出内容:
引用
2017-02-09 09:00:13,031 DEBUG [http-nio-8080-exec-1] HelloController [HelloController.java:17] - debug level log
2017-02-09 09:00:13,031 INFO  [http-nio-8080-exec-1] HelloController [HelloController.java:18] - info level log
2017-02-09 09:00:13,031 WARN  [http-nio-8080-exec-1] HelloController [HelloController.java:19] - warn level log
2017-02-09 09:00:13,031 ERROR [http-nio-8080-exec-1] HelloController [HelloController.java:20] - error level log


外部配置
src/main/resources/
  • Logback -> logback.xml 或 logback-spring.xml
  • Log4j2 -> log4j2.xml 或 log4j2-spring.xml
  • JUL -> logging.properties


src/main/resources/logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">

    <property name="log.base" value="d:" />
    <property name="log.level" value="DEBUG" />

    <!-- Appenders -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%-5level %logger{0} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.base}/SpringSample.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.base}/SpringSample.%d{yyyyMMdd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>5MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>%date %-5level [%thread] %logger{0} [%file:%line] - %msg%n</pattern>
        </encoder>
    </appender>
    
    <!-- 3rdparty Logger -->
    <logger name="org.springframework" level="${log.level}" />
    <logger name="org.apache.commons" level="INFO" />
    <logger name="org.apache.tiles" level="INFO" />
    <logger name="org.apache.ibatis" level="${log.level}" />
    <logger name="org.apache.shiro" level="${log.level}" />
    <logger name="org.dozer" level="INFO" />
    <logger name="org.scribe" level="${log.level}" />
    
    <!-- Application Logger -->
    <logger name="com.rensanning.springboot" level="${log.level}" />
    
    <!-- Root Logger -->
    <root level="${log.level}">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>

</configuration>


启动应用后访问 http://localhost:8080/。

控制台输出内容:
引用
DEBUG HelloController - debug level log
INFO  HelloController - info level log
WARN  HelloController - warn level log
ERROR HelloController - error level log

文件输出内容:
引用
2017-02-09 09:07:00,191 DEBUG [http-nio-8080-exec-1] HelloController [HelloController.java:17] - debug level log
2017-02-09 09:07:00,191 INFO  [http-nio-8080-exec-1] HelloController [HelloController.java:18] - info level log
2017-02-09 09:07:00,191 WARN  [http-nio-8080-exec-1] HelloController [HelloController.java:19] - warn level log
2017-02-09 09:07:00,191 ERROR [http-nio-8080-exec-1] HelloController [HelloController.java:20] - error level log


SpringBoot默认配置文件
base.xml(console-appender.xml file-appender.xml)
https://github.com/spring-projects/spring-boot/blob/master/spring-boot/src/main/resources/org/springframework/boot/logging/logback/base.xml
<included>
	<include resource="org/springframework/boot/logging/logback/defaults.xml" />
	<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
	<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
	<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
	<root level="INFO">
		<appender-ref ref="CONSOLE" />
		<appender-ref ref="FILE" />
	</root>
</included>


部分设置(引入base.xml)
src/main/resources/application.properties
引用
logging.path=d:

src/main/resources/logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <logger name="com.rensanning.springboot" level="WARN" additivity="false">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </logger>
</configuration>


启动应用后访问 http://localhost:8080/。

控制台输出内容:
引用
2017-02-09 09:13:43.723  WARN 5648 --- [nio-8080-exec-1] c.rensanning.springboot.HelloController  : warn level log
2017-02-09 09:13:43.723 ERROR 5648 --- [nio-8080-exec-1] c.rensanning.springboot.HelloController  : error level log

文件输出内容:
引用
2017-02-09 09:13:43.723  WARN 5648 --- [http-nio-8080-exec-1] c.rensanning.springboot.HelloController  : warn level log
2017-02-09 09:13:43.723 ERROR 5648 --- [http-nio-8080-exec-1] c.rensanning.springboot.HelloController  : error level log


使用<springProfile>
src/main/resources/application.properties
引用
logging.path=d:

src/main/resources/logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <springProfile name="dev,staging">
        <logger name="com.rensanning.springboot" level="DEBUG" additivity="false">
            <appender-ref ref="CONSOLE" />
        </logger>
    </springProfile>
    <springProfile name="production">
        <logger name="com.rensanning.springboot" level="WARN" additivity="false">
            <appender-ref ref="FILE" />
        </logger>
    </springProfile>
</configuration>


添加VM参数 -Dspring.profiles.active=dev 启动应用后访问 http://localhost:8080/。

文件没有输出,而控制台输出内容:
引用
2017-02-09 09:19:01.882 DEBUG 7676 --- [nio-8080-exec-1] c.rensanning.springboot.HelloController  : debug level log
2017-02-09 09:19:01.882  INFO 7676 --- [nio-8080-exec-1] c.rensanning.springboot.HelloController  : info level log
2017-02-09 09:19:01.882  WARN 7676 --- [nio-8080-exec-1] c.rensanning.springboot.HelloController  : warn level log
2017-02-09 09:19:01.882 ERROR 7676 --- [nio-8080-exec-1] c.rensanning.springboot.HelloController  : error level log


添加VM参数 -Dspring.profiles.active=production 启动应用后访问 http://localhost:8080/。

控制台没有输出,而文件输出内容:
引用
2017-02-09 09:20:31.243  WARN 7436 --- [http-nio-8080-exec-1] c.rensanning.springboot.HelloController  : warn level log
2017-02-09 09:20:31.243 ERROR 7436 --- [http-nio-8080-exec-1] c.rensanning.springboot.HelloController  : error level log


使用<if><then><else>
Logback通过Janino包还支持在配置文件中条件判断。 http://janino-compiler.github.io/janino/

<dependency>
   <groupId>org.codehaus.janino</groupId>
   <artifactId>janino</artifactId>
   <version>2.7.8</version>
</dependency>


<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <if condition='property("spring.profiles.active").contains("dev")'>
        <then>
            <logger name="com.rensanning.springboot" level="DEBUG" additivity="false">
                <appender-ref ref="CONSOLE" />
            </logger>
        </then>
        <else>
            <logger name="com.rensanning.springboot" level="WARN" additivity="false">
                <appender-ref ref="FILE" />
            </logger>
        </else>
    </if>
</configuration>


使用Log4J 2

pom.xml
引用
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-web</artifactId> 
    <exclusions> 
        <exclusion> 
            <groupId>org.springframework.boot</groupId> 
            <artifactId>spring-boot-starter-logging</artifactId> 
        </exclusion>
    </exclusions>
</dependency> 
<dependency>
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-log4j2</artifactId> 
</dependency>


src/main/resources/log4j2-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="60">
    <Properties>
        <Property name="log-path">d:</Property>
    </Properties>
    <Appenders>
        <Console name="Console-Appender" target="SYSTEM_OUT">
            <PatternLayout>
                <pattern>
                    [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
                </pattern>>
            </PatternLayout>
        </Console>
        <File name="File-Appender" fileName="${log-path}/springboot_log.log" >
            <PatternLayout>
                <pattern>
                    [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
                </pattern>
            </PatternLayout>
        </File>
    </Appenders>
    <Loggers>
        <Logger name="com.rensanning.springboot" level="info" additivity="false">
            <AppenderRef ref="Console-Appender"/>
        </Logger>
        <Root>
            <AppenderRef ref="File-Appender"/>
            <AppenderRef ref="Console-Appender"/>
        </Root>
    </Loggers>
</Configuration>


启动应用后访问 http://localhost:8080/。

控制台输出内容:
引用
[INFO ] 2017-02-09 09:34:36.702 [http-nio-8080-exec-1] HelloController - info level log
[WARN ] 2017-02-09 09:34:36.702 [http-nio-8080-exec-1] HelloController - warn level log
[ERROR] 2017-02-09 09:34:36.702 [http-nio-8080-exec-1] HelloController - error level log
分享到:
评论

相关推荐

    spring-boot-study-base.zip

    总的来说,"spring-boot-study-base.zip"是一个很好的Spring Boot入门教程,它涵盖了从基础到实践的关键知识点。通过学习和实践,你可以快速掌握Spring Boot的精髓,从而在实际开发中提高效率,构建出更加健壮和灵活...

    spring-boot-study-master.zip

    Spring Boot简化了Spring应用程序的初始设置和配置,它默认配置了很多常见的功能,如数据源、Tomcat服务器、日志系统等,使得开发者可以专注于业务代码而非基础框架的搭建。 2. **Druid数据源**: Druid是阿里...

    spring boot入门篇demo+ppt

    在"spring boot入门篇demo+ppt"中,我们可以期待学习以下核心知识点: 1. **Spring Boot基础知识**:了解Spring Boot的基本概念,包括其设计目标、主要特性以及与其他Spring框架的关系。 2. **起步依赖(Starter)...

    Spring Boot 笔记1

    在本篇Spring Boot笔记中,我们将探讨Spring Boot的核心特性、如何创建一个简单的Spring Boot应用以及相关的Maven配置。Spring Boot是Spring框架的一个扩展,旨在简化Spring应用的初始搭建以及开发过程,提供了一种...

    spring boot搭建(二)

    在上一部分中,我们可能已经介绍了Spring Boot的基础知识和快速入门。在此阶段,我们将更进一步,通过代码示例深入了解Spring Boot的核心特性以及如何集成常用的数据库连接池Druid和SQL监控工具P6Spy。 首先,...

    [E文]Spring Boot 2 Recipes

    - **基础篇**:介绍 Spring Boot 的基本概念、安装和配置等基础知识。 - **进阶篇**:探讨如何利用 Spring Boot 构建复杂的应用程序,包括安全性和性能优化等方面。 - **实践篇**:提供一系列实战案例,涵盖微服务...

    spring-security3 入门篇

    本入门篇将介绍Spring Security的基础知识,包括其核心概念、配置以及如何在实际项目中使用。 1. **核心概念** - **Authentication(认证)**: 用户身份验证是Spring Security的基础,它确认用户的身份是否合法。...

    Spring学习笔记-cqupt

    在本篇 Spring 学习笔记中,我们将探讨 Spring 的入门、优点、组成以及重要的IOC理论。 1. **Spring 简介** Spring 是一个开源的、免费的 Java 框架,它的目标是减少企业级开发的复杂性。它集成了许多现有的技术,...

    尚硅谷Spring Boot课堂笔记.rar

    总之,《尚硅谷Spring Boot课堂笔记》是一份全面而实用的学习材料,不仅适合初学者入门,也对有一定基础的开发者有很高的参考价值。通过深入学习和实践,开发者能够充分利用Spring Boot的优势,高效地开发和管理Java...

    spring-boot-and-all-all-all

    《Spring Boot全方位解析:从入门到精通》 Spring Boot,作为Java生态系统中的明星框架,以其“开箱即用”的特性,极大地简化了Spring应用的初始搭建以及开发过程。本篇文章将深入探讨Spring Boot的核心概念、关键...

    spring入门笔记

    **Spring 框架概述** Spring 是一个开源的 Java 应用框架,它以其轻量级、模块化和面向切...希望这篇入门笔记能为你开启 Spring 的探索之旅,欢迎在学习过程中发现错误或有任何疑问时,通过博主的博客进行交流和指正。

    Spring MVC_快速入门分析篇

    **Spring MVC 快速入门分析** Spring MVC 是一个基于 Java 的模型-视图-控制器(MVC)架构,是 Spring 框架的一部分,用于构建Web应用程序。它提供了丰富的功能,帮助开发者处理HTTP请求、数据绑定、视图渲染等任务...

    初学spring项目(入门解读和新建项目)

    总之,"初学Spring项目(入门解读和新建项目)"这篇博文将引导你了解Spring框架的基本概念,学习如何使用Spring Initializr创建项目,并通过实际操作来熟悉Spring Boot的启动流程、MVC架构、数据库操作以及自动配置等...

    实用的 Spring Boot 学习资源库

    涵盖了 Spring Boot 的多个方面,包括基础入门、Web 开发、数据存储、缓存、日志管理、应用部署、安全控制、中间件集成以及源码解析等,几乎涉及了 Spring Boot 开发中的所有关键领域,形成了一个完整的知识体系。...

    SpringBoot讲义.pdf

    #### 一、Spring Boot 快速入门及基础知识 - **Spring Boot 简介**: - **定义**:Spring Boot 是 Spring 家族中的一个新成员,旨在简化 Spring 应用的初始搭建以及开发过程。 - **优势**: - 自动配置:Spring ...

    spring快速入门与提高

    在提高篇中,你将会学习如何利用Spring Boot进行快速应用开发,它简化了Spring应用的配置,内置了Tomcat服务器,并且提供了大量的起步依赖,使得创建和部署Spring应用变得更加便捷。Spring Boot还支持Actuator,一个...

    dubbo入门示例,普通Java进程,不使用spring boot cloud

    【描述】这篇博客文章提供了关于如何在不使用Spring Boot Cloud的情况下,基于Java简单进程搭建Dubbo入门应用的详细步骤。Dubbo是一个高性能、轻量级的开源Java RPC框架,它提供了丰富的服务治理功能。本示例旨在...

    雷丰阳老师SpringBoot基础篇课件.zip

    Spring Boot入门 Spring Boot配置 Spring Boot与日志 Spring Boot与Web开发 Spring Boot与Docker Spring Boot与数据访问 Spring Boot启动配置原理

    Spring全家桶核心篇:SpringBoot快速入门 源码

    适合人群:具备一定编程基础,工作1-3年的研发人员,或者已学习过基本的Java及JSP的学生 能学到什么:1. 快速掌握Spring Boot的开发;2. 为学习Spring Cloud打好基础;3.了解Spring的面试中常见问题的真实应用 ...

Global site tag (gtag.js) - Google Analytics