## 에러내용
ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
스프링 시작시 위와같은 에러가 발생했습니다.
아래와 같이 조치 해 보았으나 해결할 수 없었습니다.
제 경우에는 log4j2 설치를 잘못해서 발생했던 에러 입니다.
- 전자정부 프래임워크를 로드를 했으나 사용하지는 않고, 스프링으로만 사용 했음
- log4j -> log4j2 변경중이었으나 최초 log4j 설치를 잘못 했었음
- log4j2 + sql 쿼리를 로그에 출력 해야 함
라이브러리 설치부터 시작하겠습니다. maven을 사용 합니다.
## pom.xml
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.2</version>
</dependency>
## context_datasource.xml
## 수정전
<bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource">
<property name="driverClassName" value="${mssql.driver}"/>
<property name="url" value="${mssql.url}"/>
<property name="username" value="${mssql.username}" />
<property name="password" value="${mssql.password}" />
</bean>
## 수정후
<bean id="dataSourceSpied" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${mssql.driver}"/>
<property name="url" value="${mssql.url}"/>
<property name="username" value="${mssql.username}" />
<property name="password" value="${mssql.password}" />
</bean>
<bean id="dataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">
<constructor-arg ref="dataSourceSpied" />
<property name="logFormatter">
<bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">
<property name="loggingType" value="MULTI_LINE" />
<property name="sqlPrefix" value="SQL : "/>
</bean>
</property>
</bean>
## src/main/resources/log4j2.xml 위치가 맞지 않으면 읽지 못하더군요
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%d %5p [%c] %m%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="java.sql" level="INFO" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Logger name="egovframework" level="DEBUG" additivity="false">
<AppenderRef ref="console" />
</Logger>
<!-- log SQL with timing information, post execution -->
<Logger name="jdbc.sqltiming" level="INFO" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Logger name="org.springframework" level="INFO" additivity="false">
<AppenderRef ref="console" />
</Logger>
<logger name="jdbc.sqlonly">
<level value="debug"/>
</logger>
<logger name="net.sf.log4jdbc" additivity="false">
<level value="info"/>
</logger>
<Root level="INFO">
<AppenderRef ref="console" />
</Root>
</Loggers>
</Configuration>
## src/main/resources/log4j2.properties
name=PropertiesConfig
property.filename = logs
appenders = console, file
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
appender.file.type = File
appender.file.name = LOGFILE
appender.file.fileName=${filename}/propertieslogs.log
appender.file.layout.type=PatternLayout
appender.file.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
loggers=file
logger.file.name=com.controller
logger.file.level = debug
logger.file.appenderRefs = file
logger.file.appenderRef.file.ref = LOGFILE
rootLogger.level = debug
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.stdout.ref = STDOUT
xml, properties 파일들은 컨텍스트 경로에 있어야 하고, maven에서는 리소스 폴더 (대부분 src / main / resources)에 있어야합니다. 이것 때문에 며칠을 고생했는지 ㅜ.ㅜ
이 예제를 사용하려면 logger.file.name = com.controller 를 본인의 패키지 이름으로 지정해야합니다. 그렇게하지 않으면 파일에 로그가 표시되지 않습니다.
'백엔드 개발 놀이터 > Spring' 카테고리의 다른 글
[Lombok] 롬복 설치 및 사용법 (0) | 2020.04.08 |
---|---|
이클립스(Eclipse)에 SVN(SubVersion) 설치하기 (0) | 2020.04.08 |
[SPRING] 직관적인 log 출력하기 (feat. log4jdbc-remix ) (0) | 2020.04.07 |
WARNING: [SetContextPropertiesRule]{Context} Setting property 'source' to 'org.eclipse.jst.jee.server 문제 (0) | 2020.04.07 |
Springboot Http/Https 사용하기(멀티 커넥트) (0) | 2020.01.23 |