LogBack 基本使用

写在前面

目的:记录笔记方便以后查看,目前是LogBack的基本使用 xml如和配置及里面标签的含义及用法大部分都参考别人的学习而来.如果有幸您能看到希望可以给我的学习之路给出一点指导。

参考地址:https://blog.csdn.net/dengjili/article/details/98369441
参考地址2:https://www.cnblogs.com/gavincoder/p/10091757.html
LogBack官网地址:https://logback.qos.ch/manual/introduction.html

日志级别

日志级别 | 描述 —|--- OFF | 关闭:最高级别,不打印日志。 FATAL | 致命:指明非常严重的可能会导致应用终止执行错误事件。 ERROR | 错误:指明错误事件,但应用可能还能继续运行。 WARN | 警告:指明可能潜在的危险状况。 INFO | 信息:指明描述信息,从粗粒度上描述了应用运行过程。 DEBUG | 调试:指明细致的事件信息,对调试应用最有用。 TRACE | 跟踪:指明程序运行轨迹,比DEBUG级别的粒度更细。 ALL | 所有:所有日志级别,包括定制级别。

所以,日志优先级别标准顺序为:
OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL
如果日志设置为L,一个级别为P的输出日志只有当P >= L时日志才会输出。

即如果日志级别L设置INFO,只有P的输出级别为INFO、WARN,前面的日志才会正常输出。

案例

这是目前公司项目正在使用的LogBack xml配置

<?xml version="1.0" encoding="UTF-8"?>
<!--
<configuration>  根节点
scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。可以不写
scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!--  <property> 节点
  与spring中配置property使用一致,变量替换
  把较长,或多处使用的变量提出出来  用来替换
  -->
    <springProperty name="projectName" source="spring.application.name"/>
    <property name="logPath" value="/logs/web_app/${projectName}/"/>
      <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%msg:日志消息,%n是换行符-->
    <property name="pattern" value="%d{yyyyMMdd/HHmmss.SSS} %-5level [%thread] %X{req.requestId} %logger{36} - %msg%n"/>
<!-- <appender>  节点
负责写日志的组件,它有两个必要属性name和class。name指定appender名称,class指定appender的全限定名。
日志输出目的,有ConsoleAppender(输出到控制台)、FileAppender(输出到文件)、SMTPAppender(输出到邮件)、
DBAppender(输出到数据库)、AsyncAppender(异步输出,包装其它具体的appender,不单独使用)等。
-->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<!-- ConsoleAppender 这里记录下输出到控制台
<encoder>  对日志进行格式化
<pattern>  日志格式
-->
        <encoder>
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>
<!--
      RollingFileAppender
      滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。有以下子节点:
<append>:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true
<file> 被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值
<rollingPolicy>:当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类
class=“ch.qos.logback.core.rolling.TimeBasedRollingPolicy”: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动。有以下子节点
    <fileNamePattern>:必要节点,包含文件名及“%d”转换符,“%d”可以包含一个java.text.SimpleDateFormat指定的时间格式,如:%d{yyyy-MM}。
如果直接使用 %d,默认格式是 yyyy-MM-dd。RollingFileAppender的file字节点可有可无,通过设置file,
可以为活动文件和归档文件指定不同位置,当前日志总是记录到file指定的文件(活动文件),活动文件的名字不会改变;
如果没设置file,活动文件的名字会根据fileNamePattern 的值,每隔一段时间改变一次。“/”或者“\”会被当做目录分隔符。
<maxHistory>:
可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每个月滚动,
且<maxHistory>是6,则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除。
-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}${projectName}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!--日志文件输出的文件名-->
            <fileNamePattern>${logPath}${projectName}-%d{yyyyMMdd}.log</fileNamePattern>
            <!--日志文件保留天数-->
            <maxHistory>90</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>
<!--
<filter> filter过滤器结点
-->
    <appender name="errorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}error-%d{yyyyMMdd}.log</fileNamePattern>
            <maxHistory>90</maxHistory>
        </rollingPolicy>
        <!--日志级别(针对具体指定级别)过滤器-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>

    <appender name="accessFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}access.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}access-%d{yyyyMMdd}.log</fileNamePattern>
            <maxHistory>90</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyyMMdd/HHmmss.SSS};[%thread];%m%n</pattern>
        </encoder>
    </appender>
<!--  root 节点
指定日志级别及输出的appender,如:
-->
    <root level="info">
        <appender-ref ref="stdout"/>
        <appender-ref ref="file"/>·
        <appender-ref ref="errorFile"/>
    </root>
<!--
logger  结点
设置某一包或类下的日志打印级别、appender。
控制指定包或类的日志输出(包括等级和目的地), additivity表示日志信息是否向上传递,false为不传递(即不重复打印)
-->
    <logger name="access" level="info" additivity="false">
<!--   可多个appender-->
        <appender-ref ref="accessFile"/>
    </logger>

</configuration>

pattern日志格式

定义每行日志记录的格式,官网地址:https://logback.qos.ch/manual/layouts.html
常用变量别名(包括全称和简称)有:

变量名
%logger(简写:%c或%lo): 当前日志名称,如: Slf4jAndLogbackMain
%class(简写:%C): 日志调用所在类,如: com.dragon.study.log.Slf4jAndLogbackMain
%method(简写:%M): 日志所在方法,如: main
%caller: 日志调用位置,如:at com.dragon.study.log.Slf4jAndLogbackMain.main(Slf4jAndLogbackMain.java:15)
%thread(简写:%t): 日志调用所有线程序,如:main
%level(简写:%p或%le): 日志级别,如:INFO
%date(简写:%d): 日期,如: 2018-12-15 21:40:12,890
%msg(简写:%m): 日志记录内容
%exception(简写:%ex): 异常记录

宽度设置
%20logger:当字符数少于20个字符时,则左侧留空白;
%-20logger:当字符数少于20个字符时,则右侧留空白;
%.30logger:当字符数据大于30个时,则截断;

显示设置
%highligth:突出显示
%green(%red、%blue、%white):字体显示为指定颜色
{length}可指定长度,如%logger{36}

网络访问设置(依赖logger-access包)
%remoteIP(简写:%a):远程ip;
%localIP(简写:%A):本地ip;
%clientHost(简写:%h):远程主机名;
%localPort:本地端口;
%requestMethod(简写:%m):http请求方法;
%protocol(简写:%H):http请求协议;
%statusCode(简写:%s):http请求status code;
%requestURL(简写:%r):http请求地址;
%requestURI(简写:%U):http请求资源地址;
%queryString(简写:%q):http请求参数;
%server(简写:%v):服务器地址;
%elapsedTime(简写:%D):http请求处理的时间,单位是毫秒;
%elapsedSeconds(简写:%T):http请求处理的时间,单位是秒;
%date(简写:%t):日志记录时间;
%threadName(简写:%I):处理请求的线程名;
%reqAttribute{attributeName}:http请求attribute值;
%reqCookie{cookie}:http请求cookie值;
%reqContent:http请求体内容;
%fullRequest:http完整请求;
%responseContent:http响应;
%fullResponse:http完整响应;
示例

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <encoder>
            <!--全称形式-->
            <pattern>%date %logger %class %method %highlight(%level) %thread  : %msg%n</pattern>
            <!--简写形式-->
            <!--<pattern>%d %lo %C %M %le %t %le %lo : %m%n</pattern>-->
        </encoder>
    </encoder>
</appender>
Logback是一个开源的日志框架,是log4j的后继者。它提供了许多先进的功能,如异步日志记录、可插拔的架构、过滤器、多种输出格式等。 Logback基本使用如下: 1. 添加Maven依赖 ``` <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> ``` 2. 配置logback.xml(或logback-test.xml) ``` <?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <logger name="com.example" level="DEBUG"/> <root level="INFO"> <appender-ref ref="STDOUT" /> </root> </configuration> ``` 上述配置定义了一个名为“STDOUT”的控制台输出日志的 Appender,并将其关联到了根日志记录器。 3. 在代码中使用 ``` import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MyClass { private static final Logger logger = LoggerFactory.getLogger(MyClass.class); public void myMethod() { logger.info("This is an info message."); logger.error("This is an error message.", new Exception("Something went wrong.")); } } ``` 在代码中,我们使用 getLogger() 方法获取一个 Logger 对象,然后使用其 info()、error() 等方法记录日志。日志级别可以通过配置文件来控制。 4. 运行程序并查看日志 Logback 默认会在控制台输出日志信息。如果需要将日志输出到文件或其他地方,可以在配置文件中增加相应的 Appender。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值