java项目log4j2单独为某个类配置日志文件

在项目中,一般都是把日志记录到一个日志文件中。

对应的log4j2.xml内容如下图所示:只有一个RollingFile节点,整个系统只会生成一个log日志文件。

生成的日志文件如下图:

当系统不断扩大,业务越来越复杂,所有接口或者方法的日志内容都放在一个文件中,内容比较乱,不方便查看。

这时候就考虑把日志拆分成多个文件,不同的业务内容放到不同的日志文件中。

修改后的log4j2.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<!-- configure.status 为设置日志输出级别,级别如下:OFF 、FATAL 、ERROR、WARN、INFO、DEBUG、TRACE 
	、ALL -->
<!-- configure.monitorInterval 监控间隔 指log4j2每隔600秒(10分钟),自动监控该配置文件是否有变化,如果变化,则自动根据文件内容重新配置 -->
<configuration status="DEBUG" monitorInterval="600">
	<properties>
		<property name="LOG_HOME">D:/webbase/logs</property><!-- D:/webbase/logs -->
		<property name="LOG_BACK_HOME">${LOG_HOME}/backup</property>
	</properties>
	<Appenders>
		<Console name="Console" target="SYSTEM_OUT">
			<PatternLayout
					pattern="%d{HH:mm:ss.SSS} {%t} %-5level %logger{36} - %msg%n" />
		</Console>

		<!-- 配置日志输出文件名字 追加读写 -->
		<!-- 系统日志,不包括其他RollingFile节点对应的单独日志内容 -->
		<RollingFile name="AllLog"
					 fileName="${LOG_HOME}/Web/Log-${date:yyyy-MM-dd}-newest.log"
					 filePattern="${LOG_HOME}/Web/backup/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}-%i-newest.log"
					 append="true">
			<!-- 输出格式 -->
			<PatternLayout
					pattern="%r %d [%t] %-5p %c - %m%n%n" />
			<!-- 设置策略 -->
			<Policies>
				<SizeBasedTriggeringPolicy size="20MB" />
				<TimeBasedTriggeringPolicy interval="1"
										   modulate="true" />
			</Policies>
			<Filters>
				<ThresholdFilter level="ALL" onMatch="ACCEPT"
								 onMismatch="DENY" />
			</Filters>
			<DefaultRolloverStrategy max="100" />
		</RollingFile>

		<!-- 单独记录发票接口日志 -->
		<RollingFile name="InvoiceRollingFile"
					 fileName="${LOG_HOME}/Invoice/Log-${date:yyyy-MM-dd}-invoice.log"
					 filePattern="${LOG_HOME}/Invoice/backup/invoice/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}-%i-invoice.log"
					 append="true">
			<!-- 输出格式 -->
			<PatternLayout
					pattern="%r %d [%t] %-5p %c - %m%n%n" />
			<!-- 设置策略 -->
			<Policies>
				<SizeBasedTriggeringPolicy size="20MB" />
				<TimeBasedTriggeringPolicy interval="1"
										   modulate="true" />
			</Policies>
			<Filters>
				<ThresholdFilter level="ALL" onMatch="ACCEPT"
								 onMismatch="DENY" />
			</Filters>
			<DefaultRolloverStrategy max="100" />
		</RollingFile>


	</Appenders>
	<Loggers>
		<!-- 生产环境此处的level设置成info,不记录debug的日志 -->
		<Root level="debug">
			<AppenderRef ref="AllLog" />
			<AppenderRef ref="Console" />
		</Root>

		<!--将logger中的 additivity 属性配置为 false,则这个logger不会将日志流反馈到root中。-->
		<!--记录 发票接口 相关的日志-->
		<Logger name="InvoiceLogger" additivity="false" level="debug">
			<appender-ref ref="InvoiceRollingFile" level="debug" />
		</Logger>


	</Loggers>



</configuration>

文件内容解读:

以上配置表达的是,系统整体日志使用一个文件记录,发票接口使用一个文件记录。同时发票接口日志的信息不会记录到整体的日志里面,这是由Logger节点的additivity属性决定的(additivity 属性配置为 false,则这个logger不会将日志流反馈到root中)。

如果有其他接口或者类,仿照InvoiceRollingFile,单独添加对应的RollingFile节点和Logger节点。这两个节点是一 一对应的,只要新加了RollingFile,就需要在下面配上Logger,同时Logger节点的 appender-ref属性中ref的值需要与RollingFile节点的name属性值保持一致。

记录log信息的代码示例:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

private static final Logger logger = LogManager.getLogger("InvoiceLogger");

logger.info("我是info级别的日志信息");

InvoiceLogger对应的是log4j2.xml配置文件中,Logger节点name属性值。

按照以上方式配置后,生成的日志文件就会是下面这个样子的

如果要找发票接口相关的日志,就在Invoice文件夹中找对应日期的文件。查找其他日志内容,在Web文件夹中查找(Invoice、Web,是在log4j2.xml配置文件中fileName节点进行配置的)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值