日志采集之log4j2.x的使用

最近项目需要做日志采集,之前用的log4j1.x版本采集的速度真的是太慢了,做了一个简单的实验,往日志里面写入4000万的数据同步的时间在651284ms,异步的时间则为21860ms


下面开始介绍log4j2.x吧

maven的依赖

    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>2.3</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.3</version>
     </dependency>

引入两个jar包,log4j-api-2.3.jar和log4j-core-2.3.jar

另外2.x开始只支持xml和json的配置

由之前的private static final Logger LOGGER = LoggerFactory.getLogger(Test.class);升级到private static final Logger LOG = LogManager.getLogger(Test.class);

这个只是引用


下面再贴一下我最新的xml配置文件吧

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 配置成debug可以查看log4j的装配过程,设置成OFF,即可关闭状态日志 -->
<configuration status="off">
	<appenders>
		<!-- 打印 Console-->
		<Console name="console" target="SYSTEM_OUT">
			<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
			<PatternLayout pattern="%d %-5p [%t:%c]:%L -%m%n"/>
		</Console>
		
<!-- 		<File name="log" fileName="logs/crawler.log" append="true">
			<PatternLayout pattern="%d %-5p [%t:%c]:%L -%m%n"/>
		</File> -->
		
		<RollingFile name="infoLog" fileName="logs/log.log"
			filePattern="logs/info/$${date:yyyy-MM-dd}/log-%d{yyyy-MM-dd}-%i.log.gz">
			<PatternLayout pattern="%d %-5p [%t:%c]:%L -%m%n"/>
			<!-- 一共生成多少个压缩文件,如果压缩文件个数超出10个的话会覆盖之前的-->
			<DefaultRolloverStrategy max="10"/>
			<!-- 日志达到100mb就会压缩 压缩后大小为600多kb吧,反正压缩效果非常好-->
			<SizeBasedTriggeringPolicy size="100 MB" />
		</RollingFile>
		
		<RollingFile name="errorLog" fileName="logs/error.log"
			filePattern="logs/$${date:yyyy-MM-dd}/error-%d{yyyy-MM-dd}-%i.log.gz">
			<PatternLayout pattern="%d %-5p [%t:%c]:%L -%m%n"/>
			<DefaultRolloverStrategy max="10"/>
			<SizeBasedTriggeringPolicy size="100 MB" />
		</RollingFile>
		
		<!-- 采集日志 -->
		<RollingFile name="collectLog" fileName="logs/collect.log"
			filePattern="logs/collect/$${date:yyyy-MM-dd}/collect-%d{yyyy-MM-dd}-%i.log.gz" immediateFlush="false">
			<PatternLayout pattern="%d %-5p [%t:%c]:%L -%m%n"/>
			<DefaultRolloverStrategy max="10"/>
			<SizeBasedTriggeringPolicy size="100MB" />
		</RollingFile>
		
		<!-- 登录日志采集  immediateFlush="false" 不会马上刷到磁盘-->
		<RollingFile name="loginCollectLog" fileName="logs/loginCollect.log"
			filePattern="logs/loginCollect/$${date:yyyy-MM-dd}/loginCollect-%d{yyyy-MM-dd}-%i.log.gz" immediateFlush="false">
			<PatternLayout pattern="%m%n"/>
			<DefaultRolloverStrategy max="10"/>
			<SizeBasedTriggeringPolicy size="100MB" />
			<!-- 过滤warn以上的日志 -->
			<ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
			<!-- <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> -->
		</RollingFile>

		<!-- 需要异步打印的日志 -->
		<Async name="loginCollectLogAsync">
			<AppenderRef ref="loginCollectLog"/>
		</Async>
		<Async name="errorLogAsync">
			<AppenderRef ref="errorLog"/>
		</Async>
	</appenders>
	
	<loggers>
		<!-- 记录指定某个类中的info属性的日志  additivity="true"的情况下它所打印的日志也会被root下面的日志所打印,如果为false那么root不会重复打印-->
		<logger name="com.Log4jTest" level="info" additivity="true">
			<appender-ref ref="loginCollectLogAsync"/>
		</logger>
		
		<!-- 登录日志采集 -->
		<logger name="com.LoginServiceImplTest2_AsyncLog" level="info" additivity="true">
			<appender-ref ref="loginCollectLogAsync"/>
		</logger>
		<root level="info">
			<appender-ref ref="infoLog" level = "info"/>
			<appender-ref ref="errorLogAsync" level = "warn"/>
			<appender-ref ref="console" level = "info"/>
		</root>
	</loggers>
</configuration>



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值