1、单独使用log4j
如果在我们系统中单独使用log4j的话,我们只需要引入log4j的核心包就可以了,我这里用的是:log4j-1.2.17.jar,
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
在src/main/resources添加log4j.properties文件,详见4。
然后在系统中使用如下代码输出日志:
public class Log4jTest { private static final org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(Log4jTest.class); public static void main(String[] args) { logger.info("hello word"); } }
也可以使用单元测试,测试其他日志输出功能。
2、单独使用log4j2
如果在我们系统中单独使用log4j2的话,我们只需要引入log4j2的核心包就可以了,我这里用的是:log4j-api-2.8.2.jar和log4j-core-2.8.2.jar:
<properties> <logging.log4j.version>2.8.2</logging.log4j.version> </properties> ...... <!-- log4j2 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>${logging.log4j.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${logging.log4j.version}</version> </dependency>
在src/main/resources添加log4j2.xml文件,配置文件见下面4.
然后在系统中使用如下代码输出日志:
public class Log4j2Test { private static org.apache.logging.log4j.Logger logger = org.apache.logging.log4j.LogManager.getLogger(Log4jTest.class); public static void main(String[] args) { logger.info("hello word"); } }
3、 log4j升级到log4j2,需要用到slf4j
如果原有系统日志框架使用的log4j,想要升级到log4j2,可以借助slf4j。
我们需要引入下面的jar包:
log4j2核心jar包:log4j-api-2.8.2.jar和log4j-core-2.8.2.jar
slf4j核心jar包:slf4j-api-1.6.4.jar (我没有引入这个包,依旧可以打印日志)
slf4j与log4j2的桥接包:log4j-slf4j-impl-2.8.2.jar,这个包的作用就是使用slf4j的api,但是底层实现是基于log4j2
<properties> <logging.log4j.version>2.8.2</logging.log4j.version> </properties> <!-- log4j2 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>${logging.log4j.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${logging.log4j.version}</version> </dependency> <!-- slf4j Bridge --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>${logging.log4j.version}</version> </dependency>
所以我们获取日志仍可以通过下面的代码进行:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Slf4jTest { private static final Logger logger = LoggerFactory.getLogger(Slf4jTest2.class); public static void main(String[] args) { logger.info("hello world"); }
4、日志配置文件
使用log4J,需要在src/main/resources添加log4j.properties文件:
#定义LOG输出级别 log4j.rootLogger=INFO,Console,File #定义日志输出目的地为控制台 log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.Target=System.out #可以灵活地指定日志输出格式,下面一行是指定具体的格式 log4j.appender.Console.layout = org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n #文件大小到达指定尺寸的时候产生一个新的文件 log4j.appender.File = org.apache.log4j.RollingFileAppender #指定输出目录 log4j.appender.File.File = logs/ssm.log #定义文件最大大小 log4j.appender.File.MaxFileSize = 10MB # 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志 log4j.appender.File.Threshold = ALL log4j.appender.File.layout = org.apache.log4j.PatternLayout log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
使用log4j2,需要在src/main/resources添加log4j2.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <configuration status="debug"> <properties> <!-- 基本的文件的输出信息的配置 --> <property name="LOG_HOME">logs</property> <!-- 日志备份目录 --> <property name="SERVER_NAME">web-font</property> </properties> <appenders> <!-- 定义控制台输出 --> <CONSOLE name="CONSOLE" target="SYSTEM_OUT" follow="true"> <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss,SSS}] %p [%t] %l - %m%n"/> </CONSOLE> <!-- 文件日志 --> <RollingRandomAccessFile name="DAILY-ROLL-FILE" fileName="${LOG_HOME}/${SERVER_NAME}.log" filePattern="${LOG_HOME}/${SERVER_NAME}.%d{yyyy-MM-dd-HH}.log"> <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss,SSS}] %p [%t] %l - %m%n"/> <Policies> <TimeBasedTriggeringPolicy interval="1" modulate="true"/> </Policies> </RollingRandomAccessFile> </appenders> <loggers> <logger name="org.springframework" level="info" additivity="false"> <appender-ref ref="CONSOLE"/> <appender-ref ref="DAILY-ROLL-FILE"/> </logger> <logger name="org.apache.ibatis" level="debug" additivity="false"> <appender-ref ref="CONSOLE"/> <appender-ref ref="DAILY-ROLL-FILE"/> </logger> <root level="debug"> <appender-ref ref="CONSOLE"/> <appender-ref ref="DAILY-ROLL-FILE"/> </root> </loggers> </configuration>
5、单元测试中使用日志
也可以在单元测试中使用日志,测试其他日志输出功能。这个使用的slf4j+log4j2
import com.springmvc.com.springmvc.service.MessageService; import com.springmvc.pojo.Message; import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import javax.annotation.Resource; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:spring-mybatis1.xml"}) public class TestMybatis { private static Logger logger = LoggerFactory.getLogger(TestMybatis.class); @Resource private MessageService messageService; @Test public void test1(){ Message message = messageService.getMessageById(1); logger.info("command:" + message.getCommand()); logger.info("command:{}", message.getCommand()); } }
6、其他问题
如果使用了log4j2,但是没有配置log4j2.xml,不会报错,会使用默认的配置。
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. Set system property ‘org.apache.logging.log4j.simplelog.StatusLogger.level‘ to TRACE to show Log4j2 internal initialization logging.
还要看下log4j2比log4j好在哪里?
参考文章:
https://blog.csdn.net/HarderXin/article/details/80422903
log4j+slf4j迁移到log4j2+slf4j (Servlet3.0):
https://blog.csdn.net/cloud_ll/article/details/47134259
原文地址:https://www.cnblogs.com/xingxing0521/p/9418267.html