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");
    }
}	

控制台输出:

生成文件:

相关推荐

  1. neo4j-Py2neo使用

    2024-05-02 18:14:03       55 阅读
  2. py2neo和neo4j

    2024-05-02 18:14:03       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-02 18:14:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-02 18:14:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-02 18:14:03       82 阅读
  4. Python语言-面向对象

    2024-05-02 18:14:03       91 阅读

热门阅读

  1. 【Golang】使用 GORM 的 Scopes 进行查询

    2024-05-02 18:14:03       31 阅读
  2. 设计模式之单例模式

    2024-05-02 18:14:03       29 阅读
  3. IntelliJ IDEA 常用快捷键

    2024-05-02 18:14:03       34 阅读
  4. C语言-单链表和双链表

    2024-05-02 18:14:03       27 阅读
  5. spring ioc 容器加载过程 refresh() 方法详解

    2024-05-02 18:14:03       38 阅读