JavaWinner 2020-01-06
????上篇文章介绍了java日志框架使用情况,以及xml配置文件的简单说明。但主要还是根据别人的博客整理一下知识结构,只能是纸上谈兵,本文通过junit测试框架来玩玩log4j。
1.环境或工具 <1>idea开发工具; <2>java project, 学helloworld时建立的第一个项目; <3>mvn repository下载三个jar包:hamcrest-core-1.3.jar,junit-4.12.jar,log4j-1.2.17.jar,把三个jar包导入到第2步的项目中(注意idea和导入jar包和eclipse不一样) <4>编写测试代码 2.测试代码 <1>log4j.xml文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> <!-- 控制台输出 --> <appender name="stdout" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %p [%c] - %m%n"/> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <!--最小级别--> <param name="LevelMin" value="INFO"/> </filter> </appender> <!-- 系统启动日志输出文件 --> <appender name="fileAppender" class="org.apache.log4j.DailyRollingFileAppender"> <param name="Encoding" value="UTF-8"/> <param name="File" value="/Users/tusm/IdeaProjects/tmp/log/system.log"/> <!-- 这里要改为本地路径 --> <param name="DatePattern" value="'.'yyyy-MM-dd"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %p [%c] - %m%n"/> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <!--最小级别--> <param name="LevelMin" value="INFO"/> </filter> </appender> <!-- 测试 category 配置节 --> <appender name="testCategoryAppender" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="/Users/tusm/IdeaProjects/tmp/log/test_category_logs.log"/> <!-- 这里要改为本地路径 --> <param name="DatePattern" value="'.'yyyy-MM-dd-HH'.log'" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %p [%c] - %m%n"/> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <!--最小级别--> <param name="LevelMin" value="INFO" /> </filter> </appender> <!-- 测试 logger 配置节 --> <appender name="testAppender" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="/Users/tusm/IdeaProjects/tmp/log/test_logger_logs.log"/> <!-- 这里要改为本地路径 --> <param name="DatePattern" value="'.'yyyy-MM-dd-HH'.log'" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %p [%c] - %m%n"/> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <!--最小级别,小于 error 级别错误将不输出--> <param name="LevelMin" value="ERROR" /> </filter> </appender> <!--自定义日志输出配置,additivity=是否继承 root 配置--> <category name="testCategoryLogger" additivity="false"> <level value="INFO"></level> <appender-ref ref="testCategoryAppender"></appender-ref> <appender-ref ref="stdout"></appender-ref> </category> <!--自定义日志输出配置,additivity=是否继承 root 配置--> <logger name="testLogger" additivity="false"> <!--级别--> <level value="INFO"></level> <!--输出器--> <appender-ref ref="testAppender"></appender-ref> <appender-ref ref="stdout"></appender-ref> </logger> <!--基础日志输出配置--> <root> <level value="INFO"/> <!--输出器--> <appender-ref ref="stdout"/> <appender-ref ref="fileAppender"/> </root> </log4j:configuration> //上篇博客中的log4j.xml示例拿过来测试 <2>java测试代码 public class TestLog4j_xml { private Logger logger = Logger.getLogger(this.getClass()); @Test public void add() { int num = 6; int num2 = 2; logger.info(num + num2); } }
项目代码结构如下
发现log4j发出warn,后来发现是log4j.xml所在的文件夹没有设置为source目录,导致找不到该文件,改完后,运行效果如下图,且在/Users/tusm/IdeaProjects/tmp/log/目录下生成了三个log文件,就是xml文件中配置的三个appender的输出路径。
基本的测试环境搭建完成,下面就是结合测试,总结一下配置文件的各部分作用