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>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章