spring配置log4j输出到不同文件

背景:项目除业务日志外,需要将请求入参以及http请求的入参出参输出到不同的日志文件中

前提:

因是spring项目。比较古老  使用properties以及xml共同的方式

1:配置maven依赖:

			<!-- Log libs -->
			<dependency>
				<groupId>log4j</groupId>
				<artifactId>log4j</artifactId>
				<version>${log4j.version}</version>
			</dependency>

2:配置properties

cybershop.web.log.dir=${web.log.dir}
cybershop.web.log.info.filename=web-info
cybershop.web.log.debug.filename=web-debug
cybershop.web.log.external.request.filename=web-external
cybershop.web.log.internal.request.filename=web-internal
cybershop.web.log.warn.filename=web-warn
cybershop.web.log.error.filename=web-error
cybershop.web.log.maxhistory=${cybershop.log.maxhistory}
cybershop.web.log.maxfilesize=${cybershop.log.maxfilesize}
cybershop.web.log.charset=${cybershop.log.charset}

其中${}数据从主pom中获取。示例:

                <!-- log4j -->
                <log4j.rootLogger>ERROR,consoleAppender</log4j.rootLogger>
                <cybershop.logback.level>DEBUG</cybershop.logback.level>

3:配置xml文件

一:配置appender属性用于输出到文件

	<appender name="EXTERNAL_REQUEST" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${cybershop.web.log.dir}/${cybershop.web.log.external.request.filename}.json</file>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY </onMismatch>
		</filter>
		<append>true</append>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${cybershop.web.log.dir}/${cybershop.web.log.external.request.filename}.%d{yyyy-MM-dd}-%i.json</fileNamePattern>
			<MaxHistory>${cybershop.web.log.maxhistory}</MaxHistory>
			<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<MaxFileSize>${cybershop.web.log.maxfilesize}</MaxFileSize>
			</TimeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<!-- 将日志输出成 JSON格式,并包含预定义 logType: restapi_external_request -->
		<encoder class="net.logstash.logback.encoder.LogstashEncoder">
			<includeCallerData>false</includeCallerData>
			<customFields>{"logType":"web_external_request"}</customFields>
		</encoder>
	</appender>

其中appender的name自定义即可。其他的应该不用多叙述

二:配置logger属性

	<logger name="external_request" additivity="false" >
		<level value="info" />
		<appender-ref ref="EXTERNAL_REQUEST" />
	</logger>

appender-ref对应的名称是appender定义的名称。logger自定义的名称 用于在类中调用

三:在类中定义

private static final Logger logger = LoggerFactory.getLogger("external_request");

使用logger.info或者其他输出即可输出文件到指定位置

 

完整xml代码配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
  <property resource="logback.properties"/>
	<appender name="file-info" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${cybershop.web.log.dir}/${cybershop.web.log.info.filename}.json</file>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY </onMismatch>
        </filter>
		<append>true</append>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${cybershop.web.log.dir}/${cybershop.web.log.info.filename}.%d{yyyy-MM-dd}-%i.json</fileNamePattern>
			<MaxHistory>${cybershop.web.log.maxhistory}</MaxHistory>
			<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<MaxFileSize>${cybershop.web.log.maxfilesize}</MaxFileSize>
			</TimeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>

		<!-- 将日志输出成 JSON格式,并包含预定义 logType: springlog -->
		<encoder class="net.logstash.logback.encoder.LogstashEncoder">
			<includeCallerData>false</includeCallerData>
			<customFields>{"logType":"web_service"}</customFields>
		</encoder>
	</appender>

	<appender name="EXTERNAL_REQUEST" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${cybershop.web.log.dir}/${cybershop.web.log.external.request.filename}.json</file>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY </onMismatch>
		</filter>
		<append>true</append>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${cybershop.web.log.dir}/${cybershop.web.log.external.request.filename}.%d{yyyy-MM-dd}-%i.json</fileNamePattern>
			<MaxHistory>${cybershop.web.log.maxhistory}</MaxHistory>
			<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<MaxFileSize>${cybershop.web.log.maxfilesize}</MaxFileSize>
			</TimeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<!-- 将日志输出成 JSON格式,并包含预定义 logType: restapi_external_request -->
		<encoder class="net.logstash.logback.encoder.LogstashEncoder">
			<includeCallerData>false</includeCallerData>
			<customFields>{"logType":"web_external_request"}</customFields>
		</encoder>
	</appender>

	<appender name="INTERNAL_REQUEST" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${cybershop.web.log.dir}/${cybershop.web.log.internal.request.filename}.json</file>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY </onMismatch>
		</filter>
		<append>true</append>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${cybershop.web.log.dir}/${cybershop.web.log.internal.request.filename}.%d{yyyy-MM-dd}-%i.json</fileNamePattern>
			<MaxHistory>${cybershop.web.log.maxhistory}</MaxHistory>
			<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<MaxFileSize>${cybershop.web.log.maxfilesize}</MaxFileSize>
			</TimeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<!-- 将日志输出成 JSON格式,并包含预定义 logType: restapi_internal_request -->
		<encoder class="net.logstash.logback.encoder.LogstashEncoder">
			<includeCallerData>false</includeCallerData>
			<customFields>{"logType":"web_internal_request"}</customFields>
		</encoder>
	</appender>

	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
		<encoder charset="${cybershop.web.log.charset}">
			<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %logger{60} %m%n</pattern>
		</encoder>
	</appender>

	<logger name="org.springframework" additivity="true" >
		<level value="info" />
	</logger>
	<logger name="org.axonframework.unitofwork" additivity="true" >
		<level value="info" />
	</logger>
	<logger name="org.quartz" additivity="true">
		<level value="info" />
	</logger>
	<logger name="com.google" additivity="true">
		<level value="info" />
	</logger>
	<logger name="com.novemberain" additivity="true">
		<level value="info" />
	</logger>
	<logger name="net.rubyeye.xmemcached" additivity="true">
		<level value="info" />
	</logger>
	<logger name="net.sf.ehcache" additivity="true">
		<level value="info" />
	</logger>
	<logger name="com.comall.cybershop" additivity="true">
		<level value="info" />
	</logger>
	<logger name="com.comall.cybershop.session" additivity="true">
		<level value="info" />
	</logger>
	<logger name="external_request" additivity="false" >
		<level value="info" />
		<appender-ref ref="EXTERNAL_REQUEST" />
	</logger>
	<logger name="internal_request" additivity="false" >
		<level value="info" />
		<appender-ref ref="INTERNAL_REQUEST" />
	</logger>

	<root level="info">
		<appender-ref ref="STASH"/>
		<appender-ref ref="file-info"/>
		<appender-ref ref="console"/>
	</root>
</configuration>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值