Logback基本使用

logback是java中的日志框架,建立于三个主要类之上:Logger、Appender 和 Layout。
Logger作为日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型、级别。Appender主要用于指定日志输出的目的地,目的地可以是控制台、文件、远程套接字服务器、 MySQL、 PostreSQL、 Oracle和其他数据库、 JMS和远程UNIX Syslog守护进程等。Layout 负责把事件转换成字符串,格式化的日志信息的输出。

Logger

各个logger对象都被关联到一个 LoggerContext,LoggerContext负责制造logger,也负责以树结构排列各 logger。在树结构中,logger的名称类似java中的包名,名为 "com.foo""的 logger 是名为"com.foo.Bar"的父节点。root logger 位于 logger 等级的最顶端。通过org.slf4j.LoggerFactory类的静态方法getLogger可以取得logger对象,这里使用了单例模式,因此,用同一名字调用LoggerFactory.getLogger 方法所得到的永远都是同一个logger对象的引用。
                                          Logger logger =LoggerFactory.getLogger(“loggername”);

logger 有日志打印级别,可以为一个 logger 指定它的日志打印级别。如果不为一个 logger 指定打印级别,那么它将继承离他最近的一个有指定打印级别的祖先的打印级别。root logger 默认级别是 DEBUG。
使用ch.qos.logback.classic.Logger的setLevel方法可以设置相应的打印级别。
日志打印级别从低级到高级排序的顺序是:TRACE < DEBUG < INFO < WARN < ERROR
org.slf4j.Logger中存在着与打印级别相对应的请求打印方法。通过
Logger logger = LoggerFactory.getLogger(SimpleDemo.class);
logger.info("Hello");

打印出的日志为
23:19:41.131 [main] INFO i.b.l.demo.universal.SimpleDemo - Hello
其中显示了时间、线程、级别、全限定类名、日志信息。

如果一个 logger 允许打印一条具有某个日志级别的信息,那么它也必须允许打印具有比这个日志级别更高级别的信息,而不允许打印具有比这个日志级别更低级别的信息。

//这里强制类型转换是为了能设置 logger 的 Level
ch.qos.logback.classic.Logger logger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger("com.foo");
logger.setLevel(Level.INFO);
Logger barlogger = LoggerFactory.getLogger("com.foo.Bar");
// 这个语句能打印,因为 WARN > INFO
logger.warn("can be printed because WARN > INFO");
// 这个语句不能打印,因为 DEBUG < INFO.
logger.debug("can not be printed because DEBUG < INFO");
// barlogger 是 logger 的一个子 logger // 它继承了 logger 的级别 INFO // 以下语句能打印,因为 INFO >= INFO
barlogger.info("can be printed because INFO >= INFO");
// 以下语句不能打印,因为 DEBUG < INFO
barlogger.debug("can not be printed because DEBUG < INFO");

Appender

Appender可以决定日志信息输出的位置,一个 logger 可以绑定多个 Appender,意味着一条信息可以同时打印到不同的目的地去。默认情况下,如果一个 logger 打印一条信息,那么这条信息首先会打印至它自己的 Appender,然后打印至它的父亲和父亲以上的祖先的 Appender,但如果它的父亲设置了 additivity = false,那么这个 logger 除了打印至它自己的 Appender 外,只会打印至其父亲的 Appender。

Layout

在 logback 中,用 Layout 来代表日志打印格式。比如说,PatternLayout 能够识别以下这条格式:
%-4relative [%thread] %-5level %logger{32} - %msg%n
然后打印出来的格式效果是:
176 [main] DEBUG manual.architecture.HelloWorld2 - Hello world.
上面这个格式的第一个字段代表从程序启动开始后经过的毫秒数,第二个字段代表打印出这条日志的线程名字,第三个字段代表日志信息的日志打印级别,第四个字段代表 logger name。

配置方式

logback 提供的配置方式有以下几种:
1.编程式配置
2.xml 格式
3.groovy 格式

logback 在启动时,根据以下步骤寻找配置文件:
1.在 classpath 中寻找 logback-test.xml文件
2.如果找不到 logback-test.xml,则在 classpath 中寻找 logback.groovy 文件
3.如果找不到 logback.groovy,则在 classpath 中寻找 logback.xml文件
4.如果上述的文件都找不到,则 logback 会使用 JDK 的 SPI 机制查找 META-INF/services/ch.qos.logback.classic.spi.Configurator 中的 logback 配置实现类,这个实现类必须实现 Configuration 接口,使用它的实现来进行配置
5.如果上述操作都不成功,logback 就会使用它自带的 BasicConfigurator 来配置,并将日志输出到 console

logback的状态可以显式地在代码里对其输出:
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
StatusPrinter.print(lc);

如果想要重新实现 logback 的配置机制,可以直接调用这个类 JoranConfigurator 来实现:
LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
try {
  JoranConfigurator configurator = new JoranConfigurator();
  configurator.setContext(context); 
  context.reset();
  configurator.doConfigure(args[0]);
} catch (JoranException je) {
// StatusPrinter will handle this
}

配置文件格式

根节点是 configuration,可包含0个或多个 appender,0个或多个 logger,最多一个 root。

<logger> 标签
属性: name, level ,additivity 
name是必须有的。
level 的取值可以是 TRACE, DEBUG, INFO, WARN, ERROR, ALL, OFF, INHERITED, NULL, 其中 INHERITEDNULL 的作用是一样的,是强制这个 logger 必须从其父辈继承一个日志级别。
元素: <appender-ref>,可以有0个或多个,意味着绑定到这个 logger 上的 Appender。

<root> 标签
属性: level
level取值范围只能取 TRACE, DEBUG, INFO, WARN, ERROR, ALL, OFF
元素:允许有0个或者多个 <appender-ref>。

<appender> 标签
属性:name , class
name是必须的
class是必须的,用来指定具体的实现类。
元素:可以包含至多一个 <layout>,0个或多个 <encoder>,0个或多个 <filter>,一些类似于 JavaBean 的配置标签。

<layout> 标签
属性:class
class是必须的,用来指定具体的实现类。如果该实现类的类型是 PatternLayout 时,那么可以不用填写。
元素:可以包含类似于 JavaBean 的配置标签。

<encoder> 标签
负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。
目前PatternLayoutEncoder 是唯一有用的且默认的encoder ,有一个<pattern>节点,用来设置日志的输入格式。使用“%”加“转换符”方式,如果要输出“%”,则必须用“\”对“\%”进行转义。
属性:class
class是必须的,用来指定具体的实现类。如果该类的类型是 PatternLayoutEncoder ,那么 class 属性可以不填。

在 logback 中,支持以 ${varName} 来引用变量


对于<appender>标签,其中的class属性指定了具体的Appender的实现类。Logback中现存的几个常用实现类的用法如下:

1.ch.qos.logback.core.ConsoleAppender
把日志添加到控制台,有以下子节点:
<encoder>:对日志进行格式化。
<target>:字符串 System.out 或者 System.err ,默认 System.out ;

2.ch.qos.logback.core.FileAppender
把日志添加到文件,有以下子节点:
<file>:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。
<append>:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。
<encoder>:对记录事件进行格式化。
<prudent>:如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false

3.RollingFileAppender:
滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。有以下子节点:
<file>:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。
<append>:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。
<encoder>:对记录事件进行格式化。
<rollingPolicy>:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。
<triggeringPolicy >: 告知 RollingFileAppender 何时激活滚动。
<prudent>:当为true时,不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy,但是有两个限制,1不支持也不允许文件压缩,2不能设置file属性,必须留空。

其中rollingPolicy主要有:
1)TimeBasedRollingPolicy 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动。有以下子节点:<fileNamePattern>:
必要节点,包含文件名及“%d”转换符, “%d”可以包含一个java.text.SimpleDateFormat指定的时间格式,如:%d{yyyy-MM}。如果直接使用 %d,默认格式是 yyyy-MM-dd。RollingFileAppender 的file字节点可有可无,通过设置file,可以为活动文件和归档文件指定不同位置,当前日志总是记录到file指定的文件(活动文件),活动文件的名字不会改变;如果没设置file,活动文件的名字会根据fileNamePattern 的值,每隔一段时间改变一次。“/”或者“\”会被当做目录分隔符。
<maxHistory>:
可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每个月滚动,且<maxHistory>是6,则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除。
2)FixedWindowRollingPolicy 根据固定窗口算法重命名文件的滚动策略。有以下子节点:
<minIndex>:
窗口索引最小值
<maxIndex>:
窗口索引最大值,当用户指定的窗口过大时,会自动将窗口设置为12。
<fileNamePattern >:
必须包含“%i”例如,假设最小值和最大值分别为1和2,命名模式为 mylog%i.log,会产生归档文件mylog1.log和mylog2.log。还可以指定文件压缩选项,例如,mylog%i.log.gz 或者 没有log%i.log.zip

triggeringPolicy主要有:
1)SizeBasedTriggeringPolicy 
查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动。只有一个节点:
<maxFileSize>:
这是活动文件的大小,默认值是10MB。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值