其实 spring boot 默认 使用 logback 的,,, 而且如果我们想 使用 log4j 也是可以的。。。 因为 里面内置的 Tomcat 可以直接使用 log4j 类的来记录的 比如:
import org.apache.log4j.Logger;
private Logger log = Logger.getLogger(this.getClass());
当然 只需要在 application.yml
里面简单 说明一下:
logging:
level: warn
file: logs/guns.log
即可简单使用了。。。 当然 如果不指定使用 那种log 的话,默认就是 logback 了
比如:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
protected final static Logger logger = LoggerFactory.getLogger(GunsApplication.class);
即可以简单使用了。。。 但是对于 大一些 的 系统来说,,,这个 日志配置实在太简单了。。。
这里说明一下 org.slf4j.Logger 类 会自动使用当前项目的默认 日志类型去 打印日志的。。。 类似 jdbc 一样,,不会关心你用什么 数据库一样的原理。。
我这里就引入使用 log4j 把,,, 我这里 使用的 是 log4j.xml 我个人比较喜欢 xml 的方式,,,可以使用 log4j.properties 这个 百度就很多了,比较常用 这个看人喜欢了。。 都是一样的,,,将 log4j 的配置文件 直接放入 资源文件包 resources 里面即可 。。。 同时 还需要 引入 pom
<!--不适用默认的logback 记录日志引入 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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
网上百度的时候 都说不需要 带上 log4j 的 版本号的,,,可是 我maven 会爆错,找不到 jar。。 所以我加上去了。。。 这样就可以直接使用了。。
下面是我的配置文件 xml 形式的,可以参考
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="[GUN.com] %-d{yyyy-MM-dd HH:mm:ss} %p [%t] %c{1}.%M(%L) | %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="ERROR" />
</filter>
</appender>
<appender name="WARN" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="/web/logs/gun/warn.log"/>
<param name="Append" value="true"/>
<param name="Encoding" value="utf-8"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[GUN.com] %-d{yyyy-MM-dd HH:mm:ss} %-5p %-15c{1}: %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="WARN" />
<param name="LevelMax" value="WARN" />
</filter>
</appender>
<appender name="ERROR" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="/web/logs/gun/error.log"/>
<param name="Append" value="true"/>
<param name="Encoding" value="utf-8"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[GUN.com] %-d{yyyy-MM-dd HH:mm:ss} %-5p %-15c{1}: %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="ERROR" />
</filter>
</appender>
<!-- 其实这些的 logger 不配置也是可以的,因为 根节点已经配置了 打印记录所有的 警告和错误基本的内容 -->
<logger name="org.springframework.web.servlet.DispatcherServlet">
<level value="DEBUG" />
<!--打印到对应的 日志文件里面 -->
<appender-ref ref="CONSOLE"/>
</logger>
<!-- logger 就是将 对应的类或者包下面的日志 输入出来 -->
<logger name="com.stylefeng.guns">
<level value="DEBUG" />
<!--打印到对应的 日志文件里面 -->
<appender-ref ref="CONSOLE"/>
</logger>
<logger name="com.alibaba.druid">
<level value="DEBUG" />
<!--打印到对应的 日志文件里面 -->
<appender-ref ref="CONSOLE"/>
</logger>
<!--
root的作用(相当于全局的意思):
1.[priority ]:指定默认的全局输出级别
2.[appender-ref ]:指定一些默认的append(没有指出特殊包或者类,即那些没有指定<logger>元素的append)的输出;
-->
<root>
<priority value="debug"/>
<!-- <appender-ref ref="CONSOLE"/> -->
<appender-ref ref="WARN"/>
<appender-ref ref="ERROR"/>
</root>
</log4j:configuration>
说明一下 ,
如果将 <appender-ref ref="CONSOLE"/> 放入 root 里面 就会 产生 很多,,的 bug 记录,,,太多了,,在控制台 很难看,,特别是 调试的时候,,,个人不喜欢这样的。。。所以就 可以 自定义 一些 logger 用来控制 将 一些信息打印到控制台里面,,,
logger 这个logger 就是 可以 控制 将 那些类或者包下面的类 的 日志 的 那些级别 打印或者输入到 哪里去,,,
而 root 下面的 <appender-ref ref="ERROR"/> 就是全局的了,,不管 logger 有没有配置都会把 对应级别的 信息给 记录 到对应的 日志文件里面去的