开发者社区> elim168> 正文

Spring Boot(08)——日志输出

简介:
+关注继续查看

日志输出

使用了spring-boot-starter后,将添加spring-boot-starter-logging依赖,此时Spring Boot将使用logback进行日志输出,默认只会输出INFO级别以上的日志信息,且只会输出到控制台。默认的日志格式是如下这样的。前面是日志输出时间,INFO是日志级别,7496是进程号,[ost-startStop-1]是用[]包起来的线程名,o.s.web.context.ContextLoader是日志名称,接下来冒号后面的内容就是真正的日志信息。

2018-07-06 16:03:13.083  INFO 7496 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2954 ms
2018-07-06 16:03:13.255  INFO 7496 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Servlet dispatcherServlet mapped to [/]

可以通过logging.pattern.dateformat单独指定日志里面的日期输出格式,可以通过logging.pattern.level单独指定日志中日志级别输出的格式。下面的代码中就分别指定了日期输出格式和日志级别的输出格式。

logging.pattern.dateformat=HH:mm:ss.sss
logging.pattern.level=custom-%5p

按照上面自定义的日期格式和日志级别输出格式后,输出的日志会是类似于下面这样的。

16:03:13.083  custom-INFO 7496 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2954 ms
16:03:13.255  custom-INFO 7496 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Servlet dispatcherServlet mapped to [/]

也可以通过#logging.pattern.console单独指定控制台的日志输出格式,通过#logging.pattern.file指定输出到文件的日志格式。

#logging.pattern.console=console-%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} -%msg%n
#logging.pattern.file=file-%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} -%msg%n

指定日志输出文件

默认的日志信息只会输出到控制台,可以在application.properties文件中通过logging.file指定日志输出文件名。当不指定路径时,默认将在当前路径下创建日志文件。

logging.file=logback.log

指定logging.file时也可以指定路径,如下则指定了日志内容将写入到/logs目录下的logback.log文件。

logging.file=/logs/logback.log

当不指定logging.file时也可以通过logging.path指定日志文件输出的路径,这样日志内容将写入到指定目录下的spring.log文件。如下配置则表示日志内容将写入到/logs/spring.log文件中。

logging.path=/logs

日志文件压缩

默认情况下每个日志文件写入10MB内容后将重新产生一个新的日志文件,然后将老的进行压缩,可以通过logging.file.max-size=20MB指定每个日志文件最多写入20MB日志。默认情况下压缩的日志文件将不断产生,没有数量限制,可以通过logging.file.max-history指定需要保留的历史日志文件数量。

调整日志级别

日志级别可以通过logging.level.logName=logLevel的形式进行调整,其中根日志级别可以通过logging.level.root进行调整。比如下面的代码就配置了根日志级别为WARN,而com.elim打头的日志级别为INFOorg.springframework打头的日志级别为DEBUG

logging.level.root=WARN
logging.level.com.elim=INFO
logging.level.org.springframework=DEBUG

自定义配置文件

Spring Boot也允许我们通过定义logback.xmllogback-spring.xml文件进行自定义的日志输出配置。Spring Boot建议我们定义日志输出文件为logback-spring.xml,因为logback.xml是logback的默认日志文件,会被logback自动加载,直接使用它时有些东西可能Spring Boot还没来得及初始化,并且使用logback.xml不能使用Spring Boot添加的一些扩展。之后就可以在配置文件中按照logback的规范进行配置了,以下是一个简单的配置,只配置了控制台输出。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n</pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

扩展使用springProfile

logback-spring.xml中可以使用Spring Boot扩展的<springProfile/>,它可以用在根元素<configuration/>元素下的任何位置,用来包裹任何元素。<springProfile/>用来定义在特定Profile被激活时将使用的特殊配置信息,比如下面的代码中就定义了当dev这个Profile被激活时将定义org.springframework这个logger的输出级别为DEBUG。

<springProfile name="dev">
    <logger name="org.springframework" level="DEBUG"/>
</springProfile>

扩展使用springProperty

logback-spring.xml中可以使用Spring Boot扩展的<springProperty/>,使用它可以把在application.properties中定义的属性值映射为logback环境中的一个属性,从而可以在logback的上下文使用。下面的配置中定义了属性appName对应于Spring Boot的Environment中的app.name(由source属性指定),当未指定时默认使用defaultValue属性指定的TEST;属性logPath对应于Spring Boot的Environment中的log.path,未指定时使用/logs/${appName}.log,其中的${appName}又对应于变量appName的值。定义好的变量可以在logback的配置文件中以${varName}的形式进行引用。

<configuration>

    <springProperty name="appName" source="app.name" defaultValue="TEST"/>
    <springProperty name="logPath" source="log.path" defaultValue="/logs/${appName}.log"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${appName}-%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>5MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n</pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>
    
</configuration>

(注:本文基于Spring Boot 2.0.3所写)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【spring boot logback】spring boot中logback日志乱码问题
在初次使用logback的自定义配置文件完整的控制spring boot日志后,发现了一个无法忍受的问题,就是日志乱码。   控制台看到打印日志乱码如下:   而日志文件打开: 记事本打开 sublime打开     关于这个问题,分析如下: 1.打印的“进入Controller日志控制中心----》》》”字样可以看出,至少代码本身和IDE环境的编码方式没有任何的关系; 2.打印出来的日志是logback-spring.xml文件起作用之后,显示在控制台的,而日志文件打开后,看到 不同的文本编辑器打开是不一样的。
3702 0
【spring boot logback】日志logback格式解析
日志logback格式解析  logback官网 格式解析 https://logback.qos.ch/manual/layouts.html#ClassicPatternLayout 官网格式解析有所有完整的说明。
1254 0
《Spring Boot极简教程》第17章 Spring Boot集成日志
SLF4J与Logback简介 Java日志框架众多,常用的有java.util.logging, log4j, logback,commons-logging等。
947 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
29328 0
SpringCloud微服务日志经kafka缓冲写入到ELK
SpringCloud微服务日志经kafka缓冲写入到ELK
71 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
20802 0
Spring Boot 日志记录 SLF4J
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/catoop/article/details/50501714 在开发中打印内容,使用 System.out.println() 和 Log4j 应当是人人皆知的方法了。
1281 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
23605 0
+关注
17
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载