log4j2配置详解

输出规则:

<console>标签是控制台,表示在控制台进行输出。

Log4j由三个重要的组成的构建组成:记录器(Loggers)、输出源(Appenders)、

和布局(Layouts)

 

记录器的Level是日志记录的优先级:debug<info<warn<error

记录器的level级别为info,那么这个记录器记录的级别就是>= info,即info、warn、error。

 

输出源:

org.apache.log4j.ConsoleAppender(控制台)

org.apache.log4j.FileAppender(文件)

org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)

org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)

org.apache.log4j.WriterAppender(将日志信息以流的格式发送到任意指定的地方)

org.apache.log4j.SocketAppender(socket)

org.apache.log4j.NtEventLogAppender(NT的Event Log)

org.apache.log4j.JMSAppender(电子邮件)

 

log4j的layout(布局)有一下几种

org.apache.log4j.HTMLLayout(以HTML表格形式布局)

org.apache.log4j.PatternLayout(可以灵活地指定布局模式)

org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)

org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

 

如果使用了PatternLayout,则Log4j采用类似C语言中println函数的打印格式格式化日志信息

%m 输出代码中的指定消息

%P 输出优先级,即debug、info、warn、error、fatal

%r 输出自应用启动到输出该log信息耗费的毫秒数

%c 输出所属的类目,通常就是所在类的全名

%t 输出产生该日志事件的线程名

%n 输出一个回车换行符,Windows平台下为”/n/r”,Unix平台为“/n”

%d 输出日志时间点的日期或事件,默认格式为ISO8601,也可以在其后制定格式。

%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

 

Configuration标签

Status属性:有八种,可以检测log4j2的配置文件是否有错,也可以检测到死循环的logger。

monitorInterval:自动检测配置文件的事件间隔,单位是秒,最小间隔是5秒。Log4j2检测到配置文件有变化,会重新配置自己。

输出源标签:

<console>是将日志输出到控制台上。

<RollingFile>

Filename:日志存放路径

bufferedIO:是否有缓存IO

bufferSize:bufferSize内存大小

filePattern:压缩后的路径

PatternLayout下的pattern:日志输出的内容

SizeBasedTriggeringPolicy:容量达到多少进行压缩

Loggers:

Additivity:false 避免重复打印

 

log4j2.xml样本

<?xml version="1.0" encoding="UTF-8"?>

 

<Configuration status="OFF" >

 

<Appenders>

<Console name="console" target="SYSTEM_OUT">

<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%p][%c{1}][Line:%L] %m%n" />

</Console>

 

<RollingFile name="clearcontrolLog" fileName="/amots/appfiles/logs/clearcontrol/clearcontrolLog.log" bufferedIO="true"

bufferSize="8192" filePattern="/amots/appfiles/logs/clearcontrol/clearcontrolLog-%d{yyyy-MM-dd-HH}-%i.log.gz">

<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%p][%c{1}][Line:%L] %m%n" />

<Policies>

<TimeBasedTriggeringPolicy interval="24" />

<SizeBasedTriggeringPolicy size="30MB" />

</Policies>

</RollingFile>

 

<RollingFile name="clearofbaseLog" fileName="/amots/appfiles/logs/clearofbase/clearofbaseLog.log" bufferedIO="true"

bufferSize="8192" filePattern="/amots/appfiles/logs/clearofbase/clearofbaseLog-%d{yyyy-MM-dd-HH}-%i.log.gz">

<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%p][%c{1}][Line:%L] %m%n" />

<Policies>

<TimeBasedTriggeringPolicy interval="24" />

<SizeBasedTriggeringPolicy size="30MB" />

</Policies>

</RollingFile>

</Appenders>

 

<Loggers>

 

<!-- amots -->

<Logger name="clearcontrol" level="INFO" additivity="false">

<!-- <AppenderRef ref="console" /> -->

<AppenderRef ref="clearcontrolLog" />

</Logger>

<Logger name="clearofbase" level="INFO" additivity="false">

<!-- <AppenderRef ref="console" /> -->

<AppenderRef ref="clearcontrolLog" />

</Logger>

</Loggers>

</Configuration>

 

注:

1、应用中不可直接使用日志系统(log4j、Logback)中的api,而应依赖使用日志框架的SLF4J中的框架,使用门面模式的日志模式的框架、有利于维护和各个类的日志处理方式统一。

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

private static final Logger logger=LoggerFactory.getLogger(ABC.class);

2、对trace/debug/ingo级别的日志输出,必须使用条件形式或者使用占位符的方式。在使用logger输出时,如果配置级别为info,那么在输出日志时,如果不加,日志不会打印,但是会执行字符串拼接。对象会执行toString()方法,浪费系统资源,执行了操作,还没有打印日志。

应加

if(logger.isDebugEnacled()){

    logger.debug("");

}

或者 logger.debug("processing debug with id:{} symbol:{}",id,symbol)

 

转载于:https://my.oschina.net/WEguo/blog/1549281

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值