浅析logback日志框架(学习笔记)

1.logback的优点及整体流程:

1.性能的提升,初始化内存加载更小。
2.更成熟,稳定:经过了几年详细的测试
3.logback-classic实现了SLF4j,切换到log4j不需要去动通过SLF4jAPI实现的代码。
4.文档很完善,官网上有丰富的文档。
5.自动重新加载配置文件
6.Lilith是log事件的观察者,和log4j的chainsaw类似。而lilith还能处理大数量的log数据 
7.通过xml配置改变某个用户的log级别,具体实现参考MDCFIlter
8.一个配置适应多个环境。
9.自动压缩log
10.自动去除旧的日志文件。
                流程:

Logger 产生日志信息;Layout修饰这条msg的显示格式;Filter过滤显示的内容;Appender具体的显示,即保存这日志信息的地方

2.logback的体系结构:
  logback分为三个模块:Core(多用途模块)、Classic(拓展了core模块:直接实现了SLF4J API)和Access(与Servlet容器集成){ 这一块
 我有点懵逼,暂时跳过}。
  内部分类也是三个:Logger(logback-classic模块的一部分),Appender 和 Layout(logback-core)。 
    Logger负责捕捉事件并将其发送给合适的Appender。Logger之间是有继承关系的。总是存在一个rootLogger,即使没有显示配置也是存在的,而且默认输出级别为DEBUG。
    Appender使用Layout来对日志记录进行格式化,并将其发送给控制台、文件或者其他目标位置。另外。Filters能够让你进一步指定一个Appender能否够应用在一条特定的日志记录上。
  Layouts将日志记录的内容从一种数据形式转换成第二种。日志框架为纯文本、HTML、syslog、XML、JSON、序列化以及其他日志提供了Layouts。

3.logback的使用准备
1.  下载对于的JAR 包:
http://logback.qos.ch/
            logback-access-1.1.2.jar
            logback-classic-1.1.2.jar
            logback-core-1.1.2.jar
http://www.slf4j.org/
            slf4j-api-1.7.10.jar
  2.   maven配置如下:
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.3</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-access</artifactId>
    <version>1.1.3</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.1.3</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.12</version>

</dependency>

        3.  logback配置文件详解:参照亦辰杰同学的笔记 https://blog.csdn.net/u013777382/article/details/78086939

        4. logback使用中遇到的问题:

                邮件未发送成功?1. 查看是否有报错,去配置文件中查看邮箱账号密码是否正确。2.去配置的邮箱中查看是否被第三方限制数量或制裁。3. 查看配置中收邮件的邮箱是否正确。

                一个bug日志在同一个文件中打印多次? 去看看你的logger标签下是否有重叠的吧,logback依照的是从大到小范围打印,所以当你在一个大的范围内打印一个日志,又加了个在这范围内的一个标签他会再打印一遍。 或者是你真的打印了好几次日志也说不定呢。

                拦截某个目录下的日志输出没用?  一是你没有阻拦到他,还是依照继承了父类的输出。第二种是所有的都做对了,但是还是没用,你可以去看看你的包名或者类名写的对不对,应为logback底层实现中实际上是根据loggerfactory创建的类名去进行日志的拦截,大部分情况默认都是类名,可是也有些是被定义更方便的名字的,这时候就得用这个getLogger出来的名字了。

<logger name="packname" level="OFF" />        

packname一般是包名,但也可能是其他的名字,这个取决于java代码中loggerfactory写的名字 

static final Logger log=LoggerFactory.getLogger("name");

                


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值