springboot + slf4j + log4j2

<!--Web依赖-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
	<exclusions>
		<exclusion>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-logging</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<!-- log4j2-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

 1 依赖如上

2 再配置log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="Info">
	<!-- 变量配置 -->
	<Properties>
		<Property name="proj_name">demo</Property>
        <!--由于我是docker部署的项目,挂载日志目录时采用的绝对路径,所以此处也是用的绝对路径。-->
		<Property name="log_path">/log4</Property>
	</Properties>

	<!-- appender配置 -->
	<Appenders>
		<Console name="Console" target="SYSTEM_OUT" immediateFlush="false">
			<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight{%-5level}[%thread] %style{%logger{36}}{cyan} : %msg%n" disableAnsi="false" noConsoleNoAnsi="false"/>
		</Console>
		<!--immediateFlush="false" 普通日志不设置实时写入日志,减少性能开销-->
		<RollingFile name="DailyRollingFileInfo" immediateFlush="false" append="true" fileName="${log_path}/sysLog/${proj_name}-info.log"
					 filePattern="${log_path}/sysLog/${proj_name}-%d{yyyy-MM-dd}-info.log">
			<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
			<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%p] [%thread] %C.%M:%L|%m%n" />
			<Policies>
				<!--根据filePattern 中的 {yyyy-MM-dd} 设置 一天滚动一次(一天生成一个文件)-->
				<TimeBasedTriggeringPolicy modulate="true" interval="1" />
			</Policies>
		</RollingFile>
		<!--immediateFlush="true" 报错日志设置实时写入日志-->
		<RollingFile name="DailyRollingFileError" immediateFlush="true" append="true" fileName="${log_path}/errorLog/${proj_name}-error.log"
					 filePattern="${log_path}/errorLog/${proj_name}-%d{yyyy-MM-dd}-error.log">
			<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
			<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%p] [%thread] %C.%M:%L|%m%n" />
			<Policies>
				<!--根据filePattern 中的 {yyyy-MM-dd} 设置 一天滚动一次(一天生成一个文件)-->
				<TimeBasedTriggeringPolicy modulate="true" interval="1" />
			</Policies>
		</RollingFile>
	</Appenders>
	<Loggers>
		<Logger name="com.cmnit.micro" level="Info" additivity="false" includeLocation="true">
			<AppenderRef ref="Console" />
			<AppenderRef ref="DailyRollingFileInfo" />
			<AppenderRef ref="DailyRollingFileError" />
		</Logger>
		<Logger name="org.springframework" level="Info" additivity="false" includeLocation="true">
			<AppenderRef ref="Console" />
			<AppenderRef ref="DailyRollingFileInfo" />
			<AppenderRef ref="DailyRollingFileError" />
		</Logger>
		<Logger name="org.hibernate" level="Info" additivity="false" includeLocation="true">
			<AppenderRef ref="Console" />
			<AppenderRef ref="DailyRollingFileInfo" />
			<AppenderRef ref="DailyRollingFileError" />
		</Logger>
		<Logger name="redis.clients" level="Info" additivity="false" includeLocation="true">
			<AppenderRef ref="Console" />
			<AppenderRef ref="DailyRollingFileInfo" />
			<AppenderRef ref="DailyRollingFileError" />
		</Logger>
		
		<Root level="Info" includeLocation="true">
			<AppenderRef ref="Console" />
			<AppenderRef ref="DailyRollingFileInfo" />
			<AppenderRef ref="DailyRollingFileError" />
		</Root>
	</Loggers>
</Configuration>

3 启动项目报错:

Caused by: org.apache.logging.log4j.LoggingException: log4j-slf4j-impl cannot be present with log4j-to-slf4j

解决:翻译过来就是 log4j-slf4j-impl 和 log4j-to-slf4j 不能共存

(但是 log4j-slf4j-impl 是 slf4j 跟 log4j2 的桥接层 必须保留。)

利用maven helper 找到依赖  去掉  log4j-to-slf4j

去掉后maven变动 (spring - jbdc导致)

4 然后再启动项目,还是报错

Exception in thread "main" java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.apache.logging.slf4j.Log4jLoggerFactory loaded from file:/D:/maven-responsity/org/apache/logging/log4j/log4j-slf4j-impl/2.14.1/log4j-slf4j-impl-2.14.1.jar). If you are using WebLogic you will need to add 'org.slf4j' to prefer-application-packages in WEB-INF/weblogic.xml: org.apache.logging.slf4j.Log4jLoggerFactory

     解决:去掉依赖 logback   (logback 跟 log4j2 冲突 ,二选一,保留log4j2)

去掉后maven变动 (fastDfs依赖导致的)

5 再次启动成功

6 测试结果

直接使用lombok 日志注解 @Slf4j   

@Slf4j
@RestController
@RequestMapping("/log4j")
@Api(tags = "Demo:log4j测试")
public class Log4jController {

    @GetMapping("/log1")
    @ApiOperation(value = "debug测试")
    public void log1(){
        log.info("这是info");
        log.warn("这是warn");
        log.error("这是error");
    }
}	

控制台输出:

生成文件:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值