日志的主流体系
日志的用途
日志的配置
目前使用的是logback(猜想log4j log4j12也可以用 出自同一个人)
工作环境是:关闭springboot默认的日志配置 只向控制台输出debug和info级别的日志
<?xml version="1.0" encoding="UTF-8"?> <!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 --> <!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true --> <!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 --> <!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 --> <configuration scan="true" scanPeriod="10 seconds"> <!-- 设置字符集 --> <property name="file.charset" value="UTF-8" /> <!-- DEBUG日志 --> <appender name="DEBUG_CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss} %green([%-5level]) %logger{10}.%method %msg%n</pattern> <charset>${file.charset}</charset> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>debug</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- INFO日志 --> <appender name="INFO_CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss} %green([%-5level]) %logger{10}.%M - %msg%n</pattern> <charset>${file.charset}</charset> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>info</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <logger name="com.itheima" level="debug" additivity="false"> <appender-ref ref="INFO_CONSOLE"/> <appender-ref ref="DEBUG_CONSOLE"/> </logger> <!-- 关闭所有日志 --> <root level="off"> </root> </configuration>
标签的含义和用途(请具备xml基础的知识)
root: 根目录
logger
功能:对特定包或类设置要被记录的日志
name :具体包或类
level:日志级别(>=debug)的生效
additivity:是否向上级传递
(如果要记录的包中有日志要被记录,且additivity的值为true(默认值),在有logger的情况下日志将会被记录两次)
appender-ref:具体由那种appender来记录
子标签
encoder:要被记录的日志的格式进行设置
filter:对日志进筛选
class:具体执行的类 要配套使用
LevelFilter
需要指定 level级别和onMatch(>=level)策略 onMismatch(<level)策略
onMatch策略和onMismatch策略
ACCEPT:接受并处理
DENY:拒绝并抛弃
NEUTRAL:不处理传递给下一个filter
ThresholdFilter:对>=level的筛选
只需要指定 level级别
更加细致的控制请看这篇博客:
logback logback.xml常用配置详解(一)
记录到file中请看
参考博文
appender
日志使用的思考
最佳实践
最佳实践的配置
<!-- ================================================= --> <!-- 日志及相关依赖(用slf4j+logback代替jcl+log4j) --> <!-- ================================================= --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${version}</version> </dependency> <!-- 强制使用 logback的绑定 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>${version}</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>${version}</version> </dependency> <!-- 强制使用 logback的绑定,这里去除对log4j 的绑定 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>99.0-does-not-exist</version> </dependency> <!-- slf4j 的桥接器,将第三方类库对 log4j 的调用 delegate 到 slf api 上 --> <!-- 这个桥接器是自己做的,主要是我们依赖的类库存在很多硬编码的引用 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>log4j-over-slf4j</artifactId> <version>${version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>${version}</version> </dependency> <!-- 强制排除 log4j 的依赖,全部 delegate 到 log4j-over-slf4j 上 --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>99.0-does-not-exist</version> </dependency> <dependency> <groupId>apache-log4j</groupId> <artifactId>log4j</artifactId> <version>999-not-exist</version> </dependency> <!-- slf4j + logback 配置结束 -->
参考博文
Java日志体系详解_Jeremy_Lee123的博客-CSDN博客_java 日志体系
多种java 日志框架【超详细图文】_不埋雷的探长的博客-CSDN博客_java主流日志框架
logback 的使用和 logback.xml 详解 + 多模块项目示例_肖朋伟的博客-CSDN博客
Logback日志使用_半桶水的码农的博客-CSDN博客_logback日志使用
logback logback.xml常用配置详解(一)