spring boot 使用 logback 配置日志
2017-06-26 00:00
465 查看
spring boot 默认是 使用 logback 的。。
听说 log4j 性能 不行了,,, spring boot 推荐 使用 logback 或者 log4j2 来使用了。。。
废话不多少,,,我觉得还是 使用 默认的 logback 把 省得麻烦的事 。。
其实 logback 已经 默认 有了 配置了的,我们自己 在 application 配置文件里面 配置即可、
比如:
这样就可以了。。。 是不是很简单 ?
可是 问题来了,,对应 大型一点的 系统来说,,,这样的日志配置过于简单了。。。
因此我们需要 配置 自己的 配置文件。。。
如果对logback 不熟悉配置的可以
参考地址: http://aub.iteye.com/blog/1103685
http://www.cnblogs.com/DeepLearing/p/5663178.html
https://my.oschina.net/looly/blog/298675
其实 和 之前的 log4j 的配置差不多,,,
看了一下,,确实 logback 的 功能 是比 log4j 强多了。。。
个人喜好配置 logback.xml 因为 properties 文件 容易中文乱码,,,不喜好
如果我们使用 logback.xml 配置呢,,,也是可以的
可是 对应 如果我们使用 spring boot 来说,希望 生产环境的 和 测试环境的 日志配置不一样的。。这样 logback.xml 就不可以了
我们 需要改为 logback-spring.xml 这样我们就可以 引用 appcation.yml 里面的配置 属性了。。
官方文档指明,需要使用<springProperty>,才可使用application.properties(或application.yml)中的值
参考地址: http://blog.csdn.net/vitech/article/details/53812137
这里给出我的 配置 文件的,,参考就好了了。。。
再说多 几句吧,,,在配置 logback 的时候我发现一个 有意思的事情,比如 可以直接使用 log4j 的,,引用的配置 就是 logback 的配置 ,,比如:
原理是什么不懂,,,我觉得是 spring boot 内部有一个 Tomcat ,,,所以就可以这样吧
听说 log4j 性能 不行了,,, spring boot 推荐 使用 logback 或者 log4j2 来使用了。。。
废话不多少,,,我觉得还是 使用 默认的 logback 把 省得麻烦的事 。。
其实 logback 已经 默认 有了 配置了的,我们自己 在 application 配置文件里面 配置即可、
比如:
########################################################## ################### 开发环境的profile ################### ########################################################## spring: profiles: dev datasource: url: jdbc:mysql://127.0.0.1:3306/guns?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull username: root password: root filters: log4j,wall,mergeStat logging: level: debug file: logs/guns.log --- ########################################################## ################### 正式环境的profile ################### ########################################################## spring: profiles: produce datasource: url: jdbc:mysql://127.0.0.1:3306/guns?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull username: root password: root filters: log4j,wall,mergeStat logging: level: warn file: logs/guns.log
这样就可以了。。。 是不是很简单 ?
可是 问题来了,,对应 大型一点的 系统来说,,,这样的日志配置过于简单了。。。
因此我们需要 配置 自己的 配置文件。。。
如果对logback 不熟悉配置的可以
参考地址: http://aub.iteye.com/blog/1103685
http://www.cnblogs.com/DeepLearing/p/5663178.html
https://my.oschina.net/looly/blog/298675
其实 和 之前的 log4j 的配置差不多,,,
看了一下,,确实 logback 的 功能 是比 log4j 强多了。。。
个人喜好配置 logback.xml 因为 properties 文件 容易中文乱码,,,不喜好
如果我们使用 logback.xml 配置呢,,,也是可以的
可是 对应 如果我们使用 spring boot 来说,希望 生产环境的 和 测试环境的 日志配置不一样的。。这样 logback.xml 就不可以了
我们 需要改为 logback-spring.xml 这样我们就可以 引用 appcation.yml 里面的配置 属性了。。
官方文档指明,需要使用<springProperty>,才可使用application.properties(或application.yml)中的值
参考地址: http://blog.csdn.net/vitech/article/details/53812137
这里给出我的 配置 文件的,,参考就好了了。。。
<?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- encoder 默认配置为PatternLayoutEncoder --> <encoder> <pattern>[guns] %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>utf-8</charset> </encoder> </appender> <!-- 日志记录器,日期滚动记录 --> <appender name="FILEERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>/web/log/guns/error.log</file> <!-- 日志记录器的滚动策略,按日期,按大小记录:这里是每天产生一个文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。 而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --> <!--设置日志命名模式--> <fileNamePattern>/web/log/guns/log-error-%d{yyyy-MM-dd}.%i.log </fileNamePattern> <!-- 除按日志记录之外,还配置了日志文件不能超过3M,若超过3M,日志文件会以索引0开始, 命名日志文件,例如log-error-2013-12-21.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>3MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--最多保留30天log--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 追加方式记录日志 --> <append>true</append> <!-- 日志文件的格式 --> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>[guns] %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>utf-8</charset> </encoder> <!-- 此日志文件只记录error级别的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>error</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 日志记录器,日期滚动记录 --> <appender name="FILWARN" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>/web/log/guns/warn.log</file> <!-- 日志记录器的滚动策略,按日期,按大小记录:这里是每天产生一个文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。 而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --> <!--设置日志命名模式--> <fileNamePattern>/web/log/guns/log-warn-%d{yyyy-MM-dd}.%i.log </fileNamePattern> <!-- 除按日志记录之外,还配置了日志文件不能超过3M,若超过3M,日志文件会以索引0开始, 命名日志文件,例如log-error-2013-12-21.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>3MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--最多保留30天log--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 追加方式记录日志 --> <append>true</append> <!-- 日志文件的格式 --> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>[guns] %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>utf-8</charset> </encoder> <!-- 此日志文件只记录error级别的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>warn</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- logger 的 level 代表 记录 大于或者等于当前级别的信息 --> <!-- additivity属性为false,表示此loger的打印信息不再向上级传递,即比如 root ,就不会记录该级别的信息了 默认是true 将信息给上级比如 root --> <!-- 这里将请求的地址等信息打印到控制台 --> <logger name="org.springframework.web.servlet.DispatcherServlet" level="DEBUG" additivity="true"> <appender-ref ref="STDOUT"/> </logger> <!--将项目开发的中的日志记录警告以上的也显示在控制台上, 可是不能改为debug,info 因为改了之后会把 简单的 sql语句也一起打印了出来了. 这种方式没有 mybatis-plus 配置文件的log-impl那种好 --> <logger name="com.stylefeng.guns" level="WARN" additivity="true"> <appender-ref ref="STDOUT"/> </logger> <!-- 这个并不能把 执行 sql也打印出来的 <logger name="com.alibaba.druid" level="WARN" additivity="true"> <appender-ref ref="STDOUT"/> </logger> --> <!--下面是为了控制将异常也给打印到控制台 --> <logger name="org.mybatis" level="WARN" additivity="true"> <appender-ref ref="STDOUT"/> </logger> <logger name="java.sql" level="WARN" additivity="true"> <appender-ref ref="STDOUT"/> </logger> <logger name="org.apache" level="WARN" additivity="true"> <appender-ref ref="STDOUT"/> </logger> <logger name="org.springframework" level="WARN" additivity="true"> <appender-ref ref="STDOUT"/> </logger> <logger name="org.apache" level="WARN" additivity="true"> <appender-ref ref="STDOUT"/> </logger> <root level="WARN"> <!-- 为了不让控制台显示那么多 无用的 debug 代码所以 注释掉 <appender-ref ref="STDOUT" /> --> <appender-ref ref="FILEERROR" /> <appender-ref ref="FILWARN" /> </root> </configuration>
再说多 几句吧,,,在配置 logback 的时候我发现一个 有意思的事情,比如 可以直接使用 log4j 的,,引用的配置 就是 logback 的配置 ,,比如:
/** * SpringBoot方式启动类 * * @author stylefeng * @Date 2017/5/21 12:06 */ @SpringBootApplication public class GunsApplication extends WebMvcConfigurerAdapter{ protected final static Logger logger = LoggerFactory.getLogger(GunsApplication.class); // 这样的 写法也是可以的,一样会 引用 logback 的日志配置的 , 但是是不推荐,,不规范,而且以后换其他的 日志的时候容易出现问题,或者不使员工 Apache的 服务的时候 // 应该使用 org.slf4j.Logger; 的这样的 接口形式的 private static org.apache.log4j.Logger logger2 = org.apache.log4j.Logger.getLogger(GunsApplication.class); @Autowired GunsProperties gunsProperties; /** * 增加swagger的支持 */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { if(gunsProperties.getSwaggerOpen()){ registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); } } public static void main(String[] args) { SpringApplication.run(GunsApplication.class, args); logger.warn("=========> GunsApplication is sussess!"); logger2.warn("dddd"); //可以打印的log4j apache 的 } }
原理是什么不懂,,,我觉得是 spring boot 内部有一个 Tomcat ,,,所以就可以这样吧
相关文章推荐
- Spring Boot实战之配置使用Logback进行日志记录
- spring boot使用logback实现多环境日志配置
- Spring boot 日志框架Logback的使用以及配置详解
- Spring Boot实战之配置使用Logback进行日志记录
- 日志组件logback的介绍及配置使用方法(一)
- 日志组件logback的介绍及配置使用方法
- 日志组件logback的介绍及配置使用方法
- 日志组件logback的介绍及配置使用方法
- 日志组件logback的介绍及配置使用方法(二)
- 日志组件logback的介绍及配置使用方法(二)
- 日志组件logback的介绍及配置使用方法
- 日志组件logback的介绍及配置使用方法(一)
- 日志组件logback的介绍及配置使用方法
- 日志组件logback的介绍及配置使用方法
- 日志处理(二) 日志组件logback的介绍及配置使用方法(转)
- 日志组件logback的介绍及配置使用方法(一)
- 日志组件logback的介绍及配置使用方法(一)
- java日志组件logback、slf4j的介绍及配置使用方法(二)
- java日志组件logback、slf4j的介绍及配置使用方法(一)
- 日志组件logback的介绍及配置使用方法