Java 项目日志实例:LogBack

点击下方关注我,然后右上角点击..."设为星标",就能第一时间收到更新推送啦~~~

LogBack 和 Log4j 都是开源日记工具库,LogBack 是 Log4j 的改良版本,比 Log4j 拥有更多的特性,同时也带来很大性能提升。LogBack 官方建议配合 Slf4j 使用,这样可以灵活地替换底层日志框架。

Logback 主要由三个模块组成:

  • logback-core

  • logback-classic

  • logback-access

其中 logback-core 提供了 LogBack 的核心功能,是另外两个组件的基础。logback-classic 的地位和作用等同于 Log4J,它也被认为是 Log4J 的一个改进版,并且它实现了简单日志门面 SLF4J,所以当想配合 SLF4J 使用时,需要将 logback-classic 加入 classpath;而 logback-access 主要作为一个与 Servlet 容器交互的模块,比如说 tomcat 或者 jetty,提供一些与 HTTP 访问相关的功能。

1

Logback 使用实例

1、选择 jar 包

想在 Java 程序中使用 Logback,需要依赖三个 jar 包,分别是 slf4j-api,logback-core,logback-classic。其中 slf4j-api 并不是 Logback 的一部分,建议将 SLF4J 与 Logback 结合使用。

pom.xml:

xml 复制代码
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
</dependency>


<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.2.3</version>
</dependency>


<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
</dependency>


<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-access</artifactId>
    <version>1.2.3</version>
</dependency>

2、logback.xml

在 src 根目录下建立 logback.xml,根据自己的需求,相应的修改其中的配置,其内容如下所示:

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!-- status用来指定log4j本身的打印日志的级别 -->
<!--monitorInterval:Log4j能够自动检测修改配置文件和重新配置本身,设置间隔秒数 -->
<configuration status="WARN" monitorInterval="30">
    <!--先定义所有的appender -->
    <appenders>
        <!--这个输出控制台的配置 -->
        <console name="Console" target="SYSTEM_OUT">
            <!--输出日志的格式 -->
            <PatternLayout
                pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %l %logger{36} - %msg%n" />
        </console>


        <!--定义输出到指定位置的文件 -->
        <File name="log" fileName="/jpm/log4j2/logs/log.log" append="true">
            <PatternLayout
                pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %l %logger{36} - %msg%n" />
        </File>


        <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
        <RollingFile name="RollingFileInfo" fileName="/jpm/log4j2/logs/info.log"
            filePattern="/jpm/log4j2/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
            <!-- DENY,日志将立即被抛弃不再经过其他过滤器;NEUTRAL,有序列表里的下个过滤器过接着处理日志;ACCEPT,日志会被立即处理,不再经过剩余过滤器。-->
            <ThresholdFilter level="error" onMatch="DENY"
                onMismatch="ACCEPT" />
            <PatternLayout
                pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %l %logger{36} - %msg%n" />
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="100 MB" />
            </Policies>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了30 -->
            <DefaultRolloverStrategy max="30" />
        </RollingFile>


        <RollingFile name="RollingFileError" fileName="/jpm/log4j2/logs/error.log"
            filePattern="/jpm/log4j2/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
            <ThresholdFilter level="ERROR" onMatch="ACCEPT"
                onMismatch="DENY" />
            <PatternLayout
                pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %l %logger{36} - %msg%n" />
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="100 MB" />
            </Policies>
        </RollingFile>
    </appenders>


    <!--只有定义了logger并引入的appender,appender才会生效 -->
    <loggers>
        <!--过滤掉spring和mybatis的一些无用的DEBUG信息 -->
        <logger name="org.springframework" level="INFO"></logger>
        <logger name="org.mybatis" level="INFO"></logger>
        <root level="INFO">
            <appender-ref ref="Console" />
            <appender-ref ref="log" />
            <appender-ref ref="RollingFileInfo" />
            <appender-ref ref="RollingFileError" />
        </root>
    </loggers>
</configuration>

3、输出日志的代码示例

java 复制代码
package jpm.logback;    
import org.slf4j.Logger;    
import org.slf4j.LoggerFactory;    
public class TestLogback {        
    public static void main(String[] args) {            
      final Logger LOGGER = LoggerFactory.getLogger(TestLogback.class);
      LOGGER.debug("print debug log.");
      LOGGER.info("print info log.");
      LOGGER.error("print error log.");
   }
}

4、打印日志结果

上例使用 SLF4J 做日志接口, Logback 做日志实现的日志示例。

后面为大家介绍项目中的 Log4j2 使用示例。

相关推荐
weixin_456904271 分钟前
基于C#的文档处理
开发语言·c#
沐浴露z8 分钟前
一篇文章详解Kafka Broker
java·分布式·kafka
Nero1810 分钟前
代码随想录二刷第二十一天 | 222.完全二叉树的节点个数、110.平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和、513.找树左下角的值
java
扶苏-su13 分钟前
Java---StringBuilder
java·开发语言
我来整一篇15 分钟前
[java] JVM 内存泄漏分析案例
java·开发语言·jvm
程序员黄同学21 分钟前
解释 Python 中的属性查找顺序(Attribute Lookup Order)
开发语言·python
程序员鱼皮27 分钟前
前后端分离,千万别再搞错了!
java·前端·后端·计算机·程序员·编程·软件开发
苏打水com29 分钟前
深入浅出 JavaScript 异步编程:从回调地狱到 Async/Await
开发语言·javascript·ecmascript
Gu_yyqx41 分钟前
IDEA 中 Tomcat 部署 Java Web 项目
java·tomcat·maven
egoist202342 分钟前
[linux仓库]线程与进程的较量:资源划分与内核实现的全景解析[线程·贰]
linux·开发语言·线程·进程·资源划分