log4j
1. log4j简介
- 定义每一条日志信息的级别,更加细致地控制日志的生成过程;
- 控制每一条日志的输出格式;
- 控制日志信息输送的目的地是控制台、文件等。
log4j包含三个组件,分别是 Loggers(记录器-区分日志类别)、Appenders(输出源-日志输出的地方)、Layouts(日志布局-日志的输出形式)
- Loggers:负责产生日志,能够对日志进行筛选,控制什么样的日志可以被输出,什么样的日志应该被忽略。可分为五个级别:DEBUG、INFO、WARN、ERROR、FATAL,从左到右级别逐级升高。
- Appenders:允许把日志输出到不同的地方,如控制台(Console)、文件(Files)、根据天数或者文件大小产生新的文件、以流的形式发送到其它地方等。一个Appender实例就代表了一个目的地。一个记录器(Logger)可以拥有多个Appender。
- Layouts:自定义格式化的日志输出样式,Layouts提供四种日志输出样式,如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式。一个Appender只能有一个Layout组件。
2. log4j使用配置
2.1 实例化Logger
public static Logger getLogger( String name);
2.2 读取配置文件
有三种方式,分别是:
BasicConfigurator.configure():自动快速地使用缺省Log4j环境。
PropertyConfigurator.configure(String configFilename):读取使用Java的特性文件编写的配置文件。
DOMConfigurator.configure(String filename):读取XML形式的配置文件。
2.3 日志信息录入
分为五种级别的日志信息:
Logger.debug(Object message);//调试信息
Logger.info(Object message);//一般信息
Logger.warn(Object message);//警告信息
Logger.error(Object message);//错误信息
Logger.fatal(Object message);//致命错误信息
2.4 配置文件 properties形式
- 根Logger
log4j.rootLogger = [level], appenderName1, appenderName2, …
level: 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或自定义的级别;
appenderName: 是指定日志信息输出目的地,可同时指定多个输出目的地。 - 日志信息输出目的地
log4j.appender.appenderName = xxx xxx可为以下五个appender:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方) - 日志信息样式
log4j.appender.appenderName.layout = xxx xxx可为以下四种layout:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
log4J2
1. log4J2简介
- Log4j 2被设计为可以作为审计框架使用, Log4j2的Appender可以设置为允许将异常渗透给应用程序。
- Log4j 2包含基于LMAX Disruptor库的下一代异步日志器。在多线程情况下,异步日志器具有更高的吞吐性能以及更低的延迟。
- Log4j 2具备插件系统,使得它非常容易通过新的Appender、Filter、Layout、Lookup和Pattern Converter来扩展框架,且不需要对Log4j做任何修改。
- 支持自定义日志级别,可在代码或配置文件中自定义。
- 支持Lambda表达式,代码更简洁明了。
- 支持Message对象,Message允许复杂的结构体在日志系统中传输,且可以被高效地操作。用户可以自由地创建他们自己的Message类型,并编写自定义的Layout、Filter和Lookup来操作它们。
2. log4j2日志配置
Log4j 2的配置可以通过以下4种方式之一完成:
- 通过以XML、JSON、YAML或属性格式编写的配置文件。
- 以编程方式,通过创建ConfigurationFactory和配置实现。
- 通过调用配置接口中公开的API,以编程方式将组件添加到默认配置
- 以编程方式,通过调用内部Logger类上的方法
2.1 示例xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- log4j2使用说明:
1. 实例化logger:
private static final Logger logger = LogManager.getLogger(实际类名.class.getName());
2、日志说明:
(1)请根据实际情况配置各项参数
(2)需要注意日志文件备份数和日志文件大小,注意预留目录空间
(3)实际部署的时候backupFilePatch变量需要修改成linux目录
-->
<configuration status="debug">
<Properties>
<Property name="fileName">loginModule.log</Property>
<Property name="backupFilePatch">D:/workspace/workspace-jee/HelloSpring/hello-spring4/log/</Property>
</Properties>
<!--先定义所有的appender-->
<appenders>
<!--这个输出控制台的配置-->
<Console name="Console" target="SYSTEM_OUT">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
<!-- 输出日志的格式-->
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" />
</Console>
<!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingFile name="RollingFile" fileName="${backupFilePatch}${fileName}"
filePattern="${backupFilePatch}$${date:yyyy-MM}/app-%d{yyyyMMddHHmmssSSS}.log.gz">
<PatternLayout
pattern="%d{yyyy.MM.dd 'at' HH:mm:ss.SSS z} %-5level %class{36} %L %M - %msg%xEx%n" />
<!-- 日志文件大小 -->
<SizeBasedTriggeringPolicy size="20MB" />
<!-- 最多保留文件数 -->
<DefaultRolloverStrategy max="20"/>
</RollingFile>
</appenders>
<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
<loggers>
<!--建立一个默认的root的logger-->
<Logger name="org.apache.log4j.xml" level="trace"
additivity="true">
<AppenderRef ref="RollingFile" />
</Logger>
<Root level="error">
<AppenderRef ref="Console" />
</Root>
</loggers>
</configuration>