log4j2

引入依赖

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.13.3</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.13.3</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.12.1</version>
    <scope>test</scope>
</dependency>

使用

  • 定义日志记录器对象

    public static final Logger LOGGER = LogMannager.getLogger(类名.class)
    
  • 操作

    LOGGER.fatal("fatal");
    LOGGER.error("error");
    LOGGER.warn("warn");
    LOGGER.info("info");
    LOGGER.debug("debug");
    

配置文件

log4j2默认加载classpath下的log4j2.xml 文件中的配置

<?xml version="1.0" encoding="UTF-8"?>
<!-- status 日志框架本身的输出级别  monitorInterval 自动加载配置文件的间隔时间-->
<Configuration status="warn" monitorInterval="5">
  <!-- 集中配置属性进行管理 使用时通过:${name} -->
  <properties>
      <!-- 日历 -->
      <property name="LOG_HOME">E:/logs</property>
  </properties>
    
  <!-- 日志处理 -->
  <Appenders>
    <!-- 默认打印到控制台 -->
    <Console name="Console" target="SYSTEM_OUT">
      	<!-- 默认打印格式 -->
      	<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %m%n"/>
    </Console>
      <!-- 打印到 -->
    <File name="file" fileName="${LOG_HOME}/myfile.log">
        <!-- 默认打印格式 -->
    	<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %m%n"/>      
    </File>
      
    <!-- 使用随机读写流的日志文件输出 -->
    <RandomAccessFile name="accessFile" fileName="${LOG_HOME}/myfile.log">
     	 <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %m%n"/>
     </RandomAccessFile>xingn
    <!-- 按照一定的规则拆分日志文件的appender,性能提高 --> 
     <RollingFile name = "rollingFile" fileName="${LOG_HOME}/myfile.log" filePattern="/log/$${date:yyyy-MM-dd}/myrollog-%d{yyyy-MM-dd-HH-mm}-%i.log">
         <!-- 按照一定的规则拆分日志文件的appender,性能提高 --> 
        <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENT" />
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %m%n"/>
        <Policies>
            <!-- 在系统起点时,触发拆分规则 -->
            <OnStartupTriggeringPolicy />
            <!-- 安装文件大小进行拆分 -->
            <SizeBasedTriggeringPolicy size="10 MB" />
            <!-- 按照时间节点进行拆分 -->
            <TimeBasedTiggeringPolicy />
        </Policies>
         <!-- 同一目录下限定文件数目 -->
        <DefauktRolloverStrategy max="30" />
      </RollingFile>
  </Appenders>
  <Loggers>
     <!-- 默认打印日志级别为 error -->
    <Root level="error">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>

异步日志处理

<dependency>
    <groupId>com.lmax</groupId>
    <artifactId>disruptor</artifactId>
    <version>3.4.2</version>
</dependency>
  • AsyncAppender方式 不推荐与logger性能差不多
<?xml version="1.0" encoding="UTF-8"?>
	<Configuration status="warn">
        <properties>
            <property name="LOG_HOME">D:/logs</property>
        </properties>
        <Appenders>
            <File name="file" fileName="${LOG_HOME}/myfile.log">
                <PatternLayout>
                    <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
                </PatternLayout>
            </File>
            <Async name="Async">
                <AppenderRef ref="file"/>
            </Async>
        </Appenders>
        <Loggers>
            <Root level="error">
                <AppenderRef ref="Async"/>
			</Root>
		</Loggers>
</Configuration
  • AsyncLogger方式

    AsyncLogger才是log4j2 的重头戏,也是官方推荐的异步方式。它可以使得调用Logger.log返回的
    更快。你可以有两种选择:全局异步和混合异步。

    1. 全局异步就是,所有的日志都异步的记录,在配置文件上不用做任何改动,只需要添加一个
      log4j2.component.properties 配置;

      Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerCon
      textSelector
      
    2. 混合异步就是,你可以在应用中同时使用同步日志和异步日志,这使得日志的配置方式更加
      灵活。

      <?xml version="1.0" encoding="UTF-8"?>
      	<Configuration status="WARN">
      		<properties>
      			<property name="LOG_HOME">D:/logs</property>
      		</properties>
      	<Appenders>
      		<File name="file" fileName="${LOG_HOME}/myfile.log">
      			<PatternLayout>
      				<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
      			</PatternLayout>
      		</File>
      	<Async name="Async">
      		<AppenderRef ref="file"/>
      		</Async>
      	</Appenders>
      	<Loggers>
      		<AsyncLogger name="com.itheima" level="trace"
      			includeLocation="false" additivity="false">
      			<AppenderRef ref="file"/>
      		</AsyncLogger>
      		<Root level="info" includeLocation="true">
      			<AppenderRef ref="file"/>
      		</Root>
      	</Loggers>
      </Configuration>
      

      使用异步日志需要注意的问题

      1. 如果使用异步日志,AsyncAppender、AsyncLogger和全局日志,不要同时出现。性能会和AsyncAppender一致,降至最低。
      2. 设置includeLocation=false ,打印位置信息会急剧降低异步日志的性能,比同步日志还要慢。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值