Logback学习总结

Stella981
• 阅读 735

使用前提

Logback-classic 依赖 slf4j-api.jar 和 logback-core.jar

Logback选择配置:

  1. 尝试在 classpath 下查找文件 logback-test.xml;
  2. 如果文件不存在,则查找文件 logback.xml;
  3. 如果两个文件都不存在,logback 用 BasicConfigurator 自动对自己进行配置,这会导致记录输出到控制台。

-------------------------------------------------------------------------------------------------------------------------------------

Level(日志级别)

记录请求级别为 p,其 logger 的有效级别为 q,只有则当 p>=q时,该请求才会被执行。

TRACE < DEBUG < INFO < WARN < ERROR

-------------------------------------------------------------------------------------------------------------------------------------

cofiguration (根节点)

属性

scan:默认true,为true时文件修改会重新加载

debug:默认false,为true时打印logback内部日志信息

scanPeriod:设置监测修改的时间间隔,单位毫秒

-------------------------------------------------------------------------------------------------------------------------------------

logger、root(configuration子节点)

属性

name(root没有):名称(适配的包名)

level:输出日志的级别

注意

可以指定多个appender,如果未指定appender,将继承最近父层声明的appender

root默认level为debug级别

logger 会把记录输出到它自身的 appender 和它所有祖先的 appender

-------------------------------------------------------------------------------------------------------------------------------------

appender(configuration子节点)

属性

name:指定appender的名称

class:指定appender的类型

子元素

filter

layout

通用

OutputStreamAppender

  1. ConsoleAppender
  2. FileAppender
  3. RollingFileAppender

属性

类型

描述

encoder

Encoder

参见 OutputStreamAppender 属性

target(console)

String

字 符 串 “ System.out ” 或 “ System.err ”。 默 认 为 “System.out”。

file(file)

String

被写入的文件名。如果文件不存在,则创建之。 没有默认值。 如果文件的父目录不存在,FileAppender 会自动创建各 级不存在的目录。

append(file)

boolean

如果 true,事件被追加到现存文件尾部。 如果 false,清空现存文件。 默认为 true。

rollingPolicy(rollingfile)

RollingPolicy

当发生滚动时,决定 RollingFileAppender 的行为。

triggeringPolicy(rollingfile)

TriggeringPolicy

告知 RollingFileAppender 何时激活滚动。

 RollingPolicy

  1. FixedWindowRollingPolicy 按窗口滚动

  2. TimeBasedRollingPolicy 按时间滚动

    testFile.log testFile.%i.log.zip 1 3 5MB %-4relative [%thread] %-5level %logger{35} - %msg%n logFile.log logFile.%d{yyyy-MM-dd}.log 30
      </rollingPolicy>
      <encoder>
         <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
      </encoder>
    

SocketAppender(略)

JMSAppenderBase

  1. JMSTopicAppender
  2. JMSQueueAppender

属性

类型

描述

InitialContextFactoryName

String

初 始 JNDI 上 下 文 工 厂 的 类 名 。 如果有 jndi.properties,或 JMSAppenderBase 的子类运行 在应用程序服务器里,就不需要设置该属性。 如果设置了该属性,也应当设置 ProviderURL 属 性。

ProviderURL

String

JNDI 服务提供商的配置信息。属性值应当包含一 个 URL 字符串,比如 ldap://somehost:389。 只有当指定了 InitialContextFactoryName 时,才有 效;否则忽略该属性。

URLPkgPrefixes

String

包含当加载 URL 上下文工厂时所用到的包名前缀 列表,以冒号分隔。

UserName

String

创建主题或队列连接时的用户名。

Password

String

创建主题或队列连接时的密码。

TopicConnectionFactoryBindingName

String

主题工厂的名称。

TopicBindingName

String

主题名称。

QueueConnectionFactoryBindingName

String

队列工厂的名称。

QueueBindingName

String

队列名称。

<configuration>
   <appender name="Topic" class="ch.qos.logback.classic.net.JMSTopicAppender">
      <InitialContextFactoryName>
         org.apache.activemq.jndi.ActiveMQInitialContextFactory
      </InitialContextFactoryName>
      <ProviderURL>tcp://localhost:61616</ProviderURL>
      <TopicConnectionFactoryBindingName>
         ConnectionFactory
      </TopicConnectionFactoryBindingName>
      <TopicBindingName>MyTopic</TopicBindingName>
   </appender>

   <appender name="Queue" class="ch.qos.logback.classic.net.JMSQueueAppender">
      <InitialContextFactoryName>
         org.apache.activemq.jndi.ActiveMQInitialContextFactory
      </InitialContextFactoryName>
      <ProviderURL>tcp://localhost:61616</ProviderURL>
      <QueueConnectionFactoryBindingName>
         ConnectionFactory
      </QueueConnectionFactoryBindingName>
      <QueueBindingName>MyQueue</QueueBindingName>
   </appender>

   <root level="debug">
      <appender-ref ref="Topic" />
   </root>
</configuration>

SMTPAppender(依赖 JavaMail API)

通过OnMarkerEvaluator去触发email

Marker notifyAdminMarker = MarkerFactory.getMarker("NOTIFY_ADMIN");
logger.error(notifyAdminMarker, "This is a serious an error requiring the admin' attention", new Exception("Just testing"));


<configuration>
   <appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
      <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
         <marker>NOTIFY_ADMIN</marker>
         <!-- you specify add as many markers as you want -->
         <marker>ANOTHER_MARKER</marker>
      </evaluator>
      <BufferSize>1050</BufferSize>
      <SMTPHost>${smtpHost}</SMTPHost>
      <To>${to}</To>
      <From>${from}</From>
      <layout class="ch.qos.logback.classic.html.HTMLLayout" />
   </appender>
   <root>
      <level value="debug" />
      <appender-ref ref="EMAIL" />
   </root>
</configuration>

DBAppender(支持MySQL、SQLServer、Oracle)

表 logging_event

字段名

类型

描述

timestamp

big int

创建记录事件的时间戳。

formatted_message

text

经org.slf4j.impl.MessageFormatter 格式化后,被添加到记录 事件的消息。

logger_name

varchar

执行记录请求的 logger。

level_string

varchar

记录事件的级别。

reference_flag

smallint

用于标识那些关联了异常或 MDCproperty 值的记录事件。 其值由 ch.qos.logback.classic.db.DBHelper 计算。包含 MDC 或上下文属性的记录事件的 reference_flag 是 1。包含异常的 reference_flag 是 2。两者都包含的 reference_flag 是 3。

caller_filename

varchar

执行记录请求的文件名。

caller_class

varchar

执行记录请求的类。

caller_method

varchar

执行记录请求的方法。

caller_line

char

执行记录请求的行号。

event_id

int

记录事件的数据库 ID。

表 logging_event_property

字段名

类型

描述

event_id

int

记录事件的数据库 ID。

mapped_key

varchar

MDC 属性的键。

mapped_value

varchar

MDC 属性的值。

表 logging_event_exception

字段名

类型

描述

event_id

int

记录事件的数据库 ID。

i

smallint

完整的堆栈跟踪里的行索引。

trace_line

varchar

对应的行。

<configuration>
   <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
      <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
         <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <driverClass>com.mysql.jdbc.Driver</driverClass>
            <jdbcUrl>jdbc:mysql://localhost:3306/logbackdb</jdbcUrl>
            <user>logback</user>
            <password>logback</password>
         </dataSource>
      </connectionSource>
   </appender>
   <root level="debug">
      <appender-ref ref="DB" />
   </root>
</configuration>

自定义 Appender(略)

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
java日志框架系列(3):logback框架配置详解
1.Logback配置1.配置步骤及默认配置logback即可以通过编程式配置,也可以通过xml的形式配置。logback配置步骤:1\.尝试在classpath下查找文件logbacktest.xml;2\.如果文件不存在,则查找文件logback.xml;3\.如果两
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这