zoukankan      html  css  js  c++  java
  • 50. Spring Boot日志升级篇—log4j【从零开始学Spring Boot】

    如果你使用的是spring boot 1.4.0版本的话,那么你可能需要配合以下文章进行学习

    90.Spring Boot 1.4 使用log4j错误【从零开始学Spring Boot】 

     

    Log4j是每个开发者比较熟悉的日志框架,所以咱们升级篇中优先介绍这个。

    那么如何操作呢?我们一起来看看使用过程吧。

    引入log4j依赖

    在创建Spring Boot工程时,我们引入了spring-boot-starter,其中包含了spring-boot-starter-logging,该依赖内容就是Spring Boot默认的日志框架Logback,所以我们在引入log4j之前,需要先排除该包的依赖,再引入log4j的依赖,就像下面这样:

    <!-- 忽略自带的日志框架. -->

            <dependency>

               <groupId>org.springframework.boot</groupId>

               <artifactId>spring-boot-starter</artifactId>

               <exclusions>

                   <exclusion>

                       <groupId>org.springframework.boot</groupId>

                       <artifactId>spring-boot-starter-logging</artifactId>

                   </exclusion>

               </exclusions>

           </dependency>

           

            <!-- log4j. -->

            <dependency> 

               <groupId>org.springframework.boot</groupId>

               <artifactId>spring-boot-starter-log4j</artifactId>

            </dependency>

     

    配置log4j-spring.properties

    在引入了log4j依赖之后,只需要在src/main/resources目录下加入log4j-spring.properties配置文件,就可以开始对应用的日志进行配置使用。

    (取名:我们在上一节说了,spring boot建议名称为-spring.*的方式,取名为log4j.properties也是没有问题的)

     

    控制台输出

           通过如下配置,设定root日志的输出级别为INFOappender为控制台输出stdout

    # LOG4J配置

    log4j.rootCategory=INFO,stdout

     

    # 控制台输出

    log4j.appender.stdout=org.apache.log4j.ConsoleAppender 

    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 

    log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n

     

    输出到文件

           在开发环境,我们只是输出到控制台没有问题,但是到了生产或测试环境,或许持久化日志内容,方便追溯问题原因。可以通过添加如下的appender内容,按天输出到不同的文件中去,同时还需要为log4j.rootCategory添加名为fileappender,这样root日志就可以输出到logs/springboot.log文件中了。

    # LOG4J配置

    log4j.rootCategory=INFO,stdout,file

     

     

    # 日志输出到文件

    log4j.appender.file=org.apache.log4j.DailyRollingFileAppender 

    log4j.appender.file.file=logs/springboot.log 

    log4j.appender.file.DatePattern='.'yyyy-MM-dd 

    log4j.appender.file.layout=org.apache.log4j.PatternLayout 

    log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n 

           当然输出到文件和输出到控制台是可以并行存在的。

     

    分类输出

    当我们日志量较多的时候,查找问题会非常困难,常用的手段就是对日志进行分类,比如:

           可以按不同package进行输出。通过定义输出到logs/my.logappender,并对com.didispace包下的日志级别设定为DEBUG级别、appender设置为输出到logs/my.log的名为didifileappender

    # com.kfit包下的日志配置

    log4j.category.com.kfit=DEBUG, didifile

     

    # com.didispace下的日志输出

    log4j.appender.didifile=org.apache.log4j.DailyRollingFileAppender 

    log4j.appender.didifile.file=logs/my.log 

    log4j.appender.didifile.DatePattern='.'yyyy-MM-dd 

    log4j.appender.didifile.layout=org.apache.log4j.PatternLayout 

    log4j.appender.didifile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L ---- %m%n

     

           可以对不同级别进行分类,比如对ERROR级别输出到特定的日志文件中,具体配置可以如下:

     

    # LOG4J配置

    log4j.rootCategory=INFO, stdout,errorfile

    log4j.logger.error=errorfile

     

     

    # error日志输出

    log4j.appender.errorfile=org.apache.log4j.DailyRollingFileAppender

    log4j.appender.errorfile.file=logs/error.log

    log4j.appender.errorfile.DatePattern='.'yyyy-MM-dd

    log4j.appender.errorfile.Threshold = ERROR

    log4j.appender.errorfile.layout=org.apache.log4j.PatternLayout

    log4j.appender.errorfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n %5p %c{1}:%L - %m%n

     

     

    输出到数据库

    将日志文件输出到数据库配置:

    # LOG4J配置

    log4j.rootCategory=INFO,stdout,jdbc

     

    # 数据库输出

    log4j.appender.jdbc=org.apache.log4j.jdbc.JDBCAppender

    log4j.appender.jdbc.driver=com.mysql.jdbc.Driver

    log4j.appender.jdbc.URL=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=true

    log4j.appender.jdbc.user=root

    log4j.appender.jdbc.password=root

    log4j.appender.jdbc.sql=insert into log_icecoldmonitor(level,category,thread,time,location,note) values('%p','%c','%t','%d{yyyy-MM-dd HH:mm:ss:SSS}','%l','%m')

     

    引入数据库驱动:

    <dependency>

               <groupId>mysql</groupId>

               <artifactId>mysql-connector-java</artifactId>

    </dependency>

     

    创建表:

    CREATE TABLE `log_icecoldmonitor` (

      `Id` int(11) NOT NULL AUTO_INCREMENT,

      `level` varchar(255) NOT NULL DEFAULT '' COMMENT '优先级',

      `category` varchar(255) NOT NULL DEFAULT '' COMMENT '类目',

      `thread` varchar(255) NOT NULL DEFAULT '' COMMENT '进程',

      `time` varchar(30) NOT NULL DEFAULT '' COMMENT '时间',

      `location` varchar(255) NOT NULL DEFAULT '' COMMENT '位置',

      `note` text COMMENT '日志信息',

      PRIMARY KEY (`Id`)

    )

     

    这样就可以保存到日志到数据库了,可能会出现如下异常信息:

    Java连接Mysql数据库警告:Establishing SSL connection

           原因是MySQL在高版本需要指明是否进行SSL连接。解决方案如下:

    mysql连接字符串url中加入ssl=true或者false即可,如下所示。

    url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=true

     

     

     

    本文主要介绍如何在spring boot中引入log4j,以及一些基础用法,对于更多log4j的用法,还请参考log4j官方网站

     

    Spring Boot 系列博客】

    49. spring boot日志升级篇理论【从零开始学Spring Boot

     

    48. spring boot单元测试restfull API【从零开始学Spring Boot

     

    47. Spring Boot发送邮件【从零开始学Spring Boot

     

    46. Spring Boot中使用AOP统一处理Web请求日志

     

    45. Spring Boot MyBatis连接Mysql数据库【从零开始学Spring Boot

     

    44. Spring Boot日志记录SLF4J【从零开始学Spring Boot

     

    43. Spring Boot动态数据源(多数据源自动切换)【从零开始学Spring Boot

     

    42. Spring Boot多数据源【从零开始学Spring Boot

     

    41. Spring Boot 使用Java代码创建Bean并注册到Spring中【从零开始学Spring Boot

     

    40. springboot + devtools(热部署)【从零开始学Spring Boot 

     

     

    更多查看博客: http://412887952-qq-com.iteye.com/

     

     

  • 相关阅读:
    ASP.NET API盘点
    C# POST与Get数据
    洛谷 P3373 【模板】线段树 2
    洛谷 P1972 [SDOI2009]HH的项链
    洛谷 P1113 杂务(vector)
    POJ 3249 Test for Job
    POJ 1734 Sightseeing trip(Floyd)
    洛谷 P1202 [USACO1.1]黑色星期五Friday the Thirteenth
    洛谷 P1484 种树
    洛谷 P1801 黑匣子_NOI导刊2010提高(06)
  • 原文地址:https://www.cnblogs.com/hehehaha/p/6147089.html
Copyright © 2011-2022 走看看