目录

背景

springboot初始化了日志的默认实现,只要我们在配置文件添加对应的配置即可。

比如

logging:
file: logs/application-debug.log
pattern:
console: "%d %-5level %logger : %msg%n"
file: "%d %-5level [%thread] %logger : %msg%n"
level:
org.springframework.web: ERROR
com.howtodoinjava: INFO
org.hibernate: ERROR

可以指定日志文件名,覆盖默认的pattern,指定不同日志级别。

但依旧有很多局限性。比如,默认的文件方案是:

E:\maven\repository\org\springframework\boot\spring-boot\1.5.13.RELEASE\spring-boot-1.5.13.RELEASE.jar!\org\springframework\boot\logging\logback\file-appender.xml

	<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<file>${LOG_FILE}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${LOG_FILE}.%i</fileNamePattern>
</rollingPolicy>
<triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>

只是超过10m就生成一个新文件。而我们还遇到过日志把磁盘打满的情况。肯定需要定时清理,还想要按照日期生成文件。这样,仅仅配置文件是不够的,需要我们自己定义。

自定义

实现自定义就是在resource下新增logback-spring.xml, 然后编写我们的配置方案。就是完全跳过spring的默认配置了。但我又想偷懒,还想用spring的配置,但只是修改个别,比如file。

spring默认配置文件 E:\maven\repository\org\springframework\boot\spring-boot\1.5.13.RELEASE\spring-boot-1.5.13.RELEASE.jar!\org\springframework\boot\logging\logback\base.xml

我们只要

<include resource="org/springframework/boot/logging/logback/base.xml"/>

就可以拿过来直接用。

最初我也是这样做的,但后面发现有些东西是不能覆盖的。比如内置的日志文件名,所以,最后把base里的内容单独抽离出来用了。

logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false"> <springProperty scope="context" name="appName" source="spring.application.name"
defaultValue="application"/>
<springProperty scope="context" name="log.path" source="logging.path"
defaultValue="logs"/>
<springProperty scope="context" name="logstashurl" source="logstash.url"
defaultValue="localhost:4560"/> <!--<include resource="org/springframework/boot/logging/logback/base.xml"/>-->
<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" /> <!--输出到文件-->
<appender name="TIME_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
<!-- <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.log</fileNamePattern>-->
<!-- <maxHistory>7</maxHistory>-->
<!--</rollingPolicy>-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>7</maxHistory>
<maxFileSize>100MB</maxFileSize>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder>
<!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ${appName} %X{req.remoteHost} %X{req.requestURI} %X{req.userAgent} %X{req.method} - [%thread] %-5level %logger{36} - %msg%n</pattern>-->
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
</appender> <!-- 输出到logstash-->
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>${logstashurl}</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender> <root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="TIME_FILE"/>
</root> <springProfile name="dev">
<logger name="com.test.demo.mapper" level="DEBUG">
</logger>
</springProfile>
<springProfile name="local, test, prod">
<root level="warn">
<appender-ref ref="LOGSTASH"/>
</root>
</springProfile>
</configuration>

同时,需要读取配置文件, 配置文件依旧生效

logging:
path: logs
file: ${logging.path}/${spring.application.name}

这里,include拿到spring默认配置,但移除了base里的root配置,去掉了file。并自定义file。file规则是保存7天,每100m分一个文件,总大小不超过1G。

 <springProperty scope="context" name="appName" source="spring.application.name"
defaultValue="application"/>
<springProperty scope="context" name="log.path" source="logging.path"
defaultValue="logs"/>
<springProperty scope="context" name="logstashurl" source="logstash.url"
defaultValue="localhost:4560"/>

这一块配置并没有使用,只是放这里备份。logback里想要使用spring的配置文件的变量,只能通过这种方式读取。因为我配置了logstash,需要读取logstash的url,所以这样做。

修改覆盖springboot默认日志策略logback的更多相关文章

  1. SpringBoot默认日志的使用方法及常用配置

    SpringBoot默认采用slf4j+logback 的组合形式,但也提供对JUL.log4j2.Logback提供了默认配置. 我们使用IDEA的spring初始化创建一个springboot项目 ...

  2. SpringBoot整合日志框架LogBack

    日志可以记录我们应用程序的运行情况,我们可以通过日志信息去获取应用程序更多的信息.常用处理java日志的组件有:slf4j.log4j.logback.common-logging等.其中log4j是 ...

  3. 如何修改Hadoop的默认日志级别,还真是麻烦

    鄙人使用的Hadoop版本为2.6.4.Hadoop的默认日志级别为INFO,对于百台以上的集群,如果文件操作频繁的话,NameNode会狂打日志,对性能会有一定的影响. 我们可以通过http://& ...

  4. SpringBoot 默认日志

    默认使用的这个类 org.apache.commons.logging.Log import org.apache.commons.logging.Log; import org.apache.com ...

  5. 20190930-02 Redis持久化方式一:RDB及修改RDB的默认持久化策略 000 032

  6. java框架之SpringBoot(3)-日志

    市面上的日志框架 日志抽象层 日志实现 JCL(Jakarta Commons Logging).SLF4J(Simple Logging Facade For Java).JBoss-Logging ...

  7. 【spring boot】8.spring boot的日志框架logback使用

    在继续上一篇的Debug调试之后,把spring boot的日志框架使用情况逐步蚕食. 参考:http://tengj.top/2017/04/05/springbo 开篇之前,贴上完整applica ...

  8. SpringBoot初识日志

    SpringBoot初识日志 1.市面上的日志框架: JUL.JCL.Jboss-logging.logback.log4j.log4j2.slf4j- 日志门面(日志的抽象层) 日志实现 SLF4j ...

  9. SpringBoot与日志框架2(日志内斗)

    一.SpringBoot如何引入slf4j+logback框架的呢? 在POM文件中 <dependency> <groupId>org.springframework.boo ...

随机推荐

  1. Laravel Eloquent 数据查询结果中日期的格式化

    两种情况: 使用 Model 的查询 例如: $item = App\Models\Apple::first(); $date = $item->created_at->format('Y ...

  2. 文件中用WriteLine追加内容的两种方法

    if (!Directory.Exists("C:\\testll")) { Directory.CreateDirectory("C:\\testll"); ...

  3. Mac配置Node.js环境

    打开终端输入命令:(安装brew) ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/mast ...

  4. JQuery中的工具类(五)

    一:1.serialize()序列表表格内容为字符串.返回值jQuery示例序列表表格内容为字符串,用于 Ajax 请求. HTML 代码:<p id="results"&g ...

  5. 查看Windows系统里的进程已运行的时间

    搜索 ProcessExplorer ,可以去微软下载它.右键点击项类,selcet conlumns...在 Process Performance 里 选择start time.有了进程的启动时间 ...

  6. 012 Spark在IDEA中打jar包,并在集群上运行(包括local模式,standalone模式,yarn模式的集群运行)

    一:打包成jar 1.修改代码 2.使用maven打包 但是目录中有中文,会出现打包错误 3.第二种方式 4.下一步 5.下一步 6.下一步 7.下一步 8.下一步 9.完成 二:在集群上运行(loc ...

  7. 096实战 在windows下新建maven项目

    1.拷贝settings到.m2文件下 2.修改文件 3.新建Project项目 4.转换为maven项目 config下转换 5.拷贝pom文件 <project xmlns="ht ...

  8. windows下端口映射(端口转发)

    windows下端口映射(端口转发) 转载: https://blog.csdn.net/i1j2k3/article/details/70228043 本文是对网文的归纳整理,算不上原创,摸索过程亲 ...

  9. KMS命令激活VOL版本Office2016

    1.命令行下进入Office2016的安装目录 2.设置KMS服务器:cscript ospp.vbs /sethst:kms.landiannews.com kms.landiannews.com是 ...

  10. JAVA编程:字符串转为数字求和

    程序从命令行接入数字,求和,如果接入的是字符串的解决办法 设计思想: 首先定义一个double类型的一维数组,然后在定义一个double型的变量sum,并赋值为0,用if循环判断从命令行是否有参数输入 ...