上篇文章介绍了java日志框架使用情况,以及xml配置文件的简单说明。但主要还是根据别人的博客整理一下知识结构,只能是纸上谈兵,本文通过junit测试框架来玩玩log4j。

1.junit+log4j测试环境准备

  1. 1.环境或工具
  2. <1>idea开发工具;
  3. <2>java project, helloworld时建立的第一个项目;
  4. <3>mvn repository下载三个jar包:hamcrest-core-1.3.jar,junit-4.12.jar,log4j-1.2.17.jar,把三个jar包导入到第2步的项目中(注意idea和导入jar包和eclipse不一样)
  5. <4>编写测试代码
  6. 2.测试代码
  7. <1>log4j.xml文件
  8. <?xml version="1.0" encoding="UTF-8" ?>
  9. <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
  10. <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
  11. <!-- 控制台输出 -->
  12. <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
  13. <layout class="org.apache.log4j.PatternLayout">
  14. <param name="ConversionPattern" value="%d %p [%c] - %m%n"/>
  15. </layout>
  16. <filter class="org.apache.log4j.varia.LevelRangeFilter">
  17. <!--最小级别-->
  18. <param name="LevelMin" value="INFO"/>
  19. </filter>
  20. </appender>
  21. <!-- 系统启动日志输出文件 -->
  22. <appender name="fileAppender" class="org.apache.log4j.DailyRollingFileAppender">
  23. <param name="Encoding" value="UTF-8"/>
  24. <param name="File" value="/Users/tusm/IdeaProjects/tmp/log/system.log"/> <!-- 这里要改为本地路径 -->
  25. <param name="DatePattern" value="'.'yyyy-MM-dd"/>
  26. <layout class="org.apache.log4j.PatternLayout">
  27. <param name="ConversionPattern" value="%d %p [%c] - %m%n"/>
  28. </layout>
  29. <filter class="org.apache.log4j.varia.LevelRangeFilter">
  30. <!--最小级别-->
  31. <param name="LevelMin" value="INFO"/>
  32. </filter>
  33. </appender>
  34. <!-- 测试 category 配置节 -->
  35. <appender name="testCategoryAppender" class="org.apache.log4j.DailyRollingFileAppender">
  36. <param name="File" value="/Users/tusm/IdeaProjects/tmp/log/test_category_logs.log"/> <!-- 这里要改为本地路径 -->
  37. <param name="DatePattern" value="'.'yyyy-MM-dd-HH'.log'" />
  38. <layout class="org.apache.log4j.PatternLayout">
  39. <param name="ConversionPattern" value="%d %p [%c] - %m%n"/>
  40. </layout>
  41. <filter class="org.apache.log4j.varia.LevelRangeFilter">
  42. <!--最小级别-->
  43. <param name="LevelMin" value="INFO" />
  44. </filter>
  45. </appender>
  46. <!-- 测试 logger 配置节 -->
  47. <appender name="testAppender" class="org.apache.log4j.DailyRollingFileAppender">
  48. <param name="File" value="/Users/tusm/IdeaProjects/tmp/log/test_logger_logs.log"/> <!-- 这里要改为本地路径 -->
  49. <param name="DatePattern" value="'.'yyyy-MM-dd-HH'.log'" />
  50. <layout class="org.apache.log4j.PatternLayout">
  51. <param name="ConversionPattern" value="%d %p [%c] - %m%n"/>
  52. </layout>
  53. <filter class="org.apache.log4j.varia.LevelRangeFilter">
  54. <!--最小级别,小于 error 级别错误将不输出-->
  55. <param name="LevelMin" value="ERROR" />
  56. </filter>
  57. </appender>
  58. <!--自定义日志输出配置,additivity=是否继承 root 配置-->
  59. <category name="testCategoryLogger" additivity="false">
  60. <level value="INFO"></level>
  61. <appender-ref ref="testCategoryAppender"></appender-ref>
  62. <appender-ref ref="stdout"></appender-ref>
  63. </category>
  64. <!--自定义日志输出配置,additivity=是否继承 root 配置-->
  65. <logger name="testLogger" additivity="false">
  66. <!--级别-->
  67. <level value="INFO"></level>
  68. <!--输出器-->
  69. <appender-ref ref="testAppender"></appender-ref>
  70. <appender-ref ref="stdout"></appender-ref>
  71. </logger>
  72. <!--基础日志输出配置-->
  73. <root>
  74. <level value="INFO"/>
  75. <!--输出器-->
  76. <appender-ref ref="stdout"/>
  77. <appender-ref ref="fileAppender"/>
  78. </root>
  79. </log4j:configuration>
  80. //上篇博客中的log4j.xml示例拿过来测试
  81. <2>java测试代码
  82. public class TestLog4j_xml {
  83. private Logger logger = Logger.getLogger(this.getClass());
  84. @Test
  85. public void add() {
  86. int num = 6;
  87. int num2 = 2;
  88. logger.info(num + num2);
  89. }
  90. }

2.测试过程

项目代码结构如下

2.1运行效果



发现log4j发出warn,后来发现是log4j.xml所在的文件夹没有设置为source目录,导致找不到该文件,改完后,运行效果如下图,且在/Users/tusm/IdeaProjects/tmp/log/目录下生成了三个log文件,就是xml文件中配置的三个appender的输出路径。

2.2 调试总结一下

基本的测试环境搭建完成,下面就是结合测试,总结一下配置文件的各部分作用

  1. 1.首先说明一下配置文件的几个标签的作用
  2. <appender>...<appender>就是最基础的输出源,上篇文章也介绍了有五种;
  3. <category>...</category>是对基础输出源的整合实现多输出源效果;
  4. <logger>...<logger>和<category>是一样的,目前理解是这样,不能确定,注意additivity="false"的作用,这里先不说,后面单独做个试验;
  5. <root>...<root>, 其实和<category>和<logger>一样都是复合输出源(我自己理解的),另外它还是默认输出源(比如代码中Logger.getLogger(this.getClass())这么写使用的就是这个root配置的输出源),再另外就是别的自定义的复合输出源默认继承它
  6. 2.日志输出级别控制
  7. 如果使用复合输出源的话,日志输出级别控制在两个地方,一个是在基础输出源<Appender>中配置,一个是在复合输出源中配置,两者取权限高的。
  8. 3.additivity="false" 演示
  9. private Logger logger = Logger.getLogger("testLogger");
  10. <logger name="testLogger" additivity="false">
  11. <level value="INFO"></level>
  12. <appender-ref ref="stdout"></appender-ref>
  13. </logger>
  14. <root>
  15. <level value="INFO"/>
  16. <appender-ref ref="fileAppender"/>
  17. </root>
  18. a.上面这种配置,只在控制台输出,没有在system.log中记录
  19. b.把false改为true, system.log中也记录了日志
  20. c.如果把root中的日志输出水平改为ERROR, 控制台和system.log中日志输出水平没有变化
  21. d.如果把logger中的输出水平改为ERROR,控制台和system.log中的日志输出水平都变为ERROR级别了
  22. 3.以前对这些没有好好了解过,大概能用一下,这些知识虽然不算面试重点,工作中也不会常用,毕竟业务码农也很少修改日志,自己也没有认真搭建过项目,所以总是感觉虚。但为了整个Java知识结构的搭建这块来说,这又是非常重要的一块知识,查缺补漏,基础细节学习要一直进行下去。

junit小试log4j及xml配置文件说明的更多相关文章

  1. Java日志(二):log4j与XML配置文件

    [Java日志(一):log4j与.properties配置文件]一文列举的几个案例以.properties文件作为log4j的配置文件,本文简单看一下log4j与XML配置文件 (1)XML配置文件 ...

  2. spring 配置文件无法加载,junit找不到xml配置文件java.lang.IllegalStateException: Failed to load ApplicationContext

    最近遇到一个奇怪的问题.maven项目再进行junit单元测试的时候发现无法加载配置文件.一会能加载一会又不能加载.然后试了在src/main/resource下面的配置文件放到src/test/re ...

  3. log4j.xml配置文件详解

    一 log4j.xml 配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:c ...

  4. commons-logging 和log4j包下载 Spring根据XML配置文件生成对象

    需要用到Spring压缩包中的四个核心JAR包 beans .context.core 和expression 下载地址: https://pan.baidu.com/s/1qXLHzAW 以及日志j ...

  5. 【XML配置文件读取】使用jdom读取XML配置文件信息

    在项目中我们经常需要将配置信息写在配置文件中,而XML配置文件是常用的格式. 下面将介绍如何通过jdom来读取xml配置文件信息. 配置文件信息 <?xml version="1.0& ...

  6. Spring框架[一]——spring概念和ioc入门(ioc操作xml配置文件)

    Spring概念 spring是开源的轻量级框架(即不需要依赖其他东西,可用直接使用) spring核心主要两部分 aop:面向切面编程,扩展功能不是修改源代码来实现: ioc:控制反转,比如:有一个 ...

  7. testng xml配置文件

    简单介绍 运行TestNG测试脚本有两种方式:一种是直接通过IDE运行(例如使用eclipse中的“Run TestNG tests”),另一种是从命令行运行(通过使用xml配置文件).当我们想执行某 ...

  8. Spring框架 全注解annotation不使用配置文件(SpringConfiguration.java类代替) 补充 xml配置文件没有提示解决

    全注解不使用配置文件 首先还是倒包 在原有的jar包: 需Spring压缩包中的四个核心JAR包 beans .context.core 和expression 下载地址: https://pan.b ...

  9. Spring XML配置文件示例(二)——web.xml

    <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" ...

随机推荐

  1. 【剑指Offer面试编程题】 题目1350:二叉树的深度--九度OJ

    题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 输入: 第一行输入有n,n表示结点数,结点号从1到n.根结点为1. ...

  2. AWS-DDNS

    1. DDNS 2. 在 Linux 实例上设置动态 DNS 2.1 Ubuntu 2.2 Amazon Linux 2 2.3 Arch Linux 2.4 其他Linux系统 3. 更多相关 1. ...

  3. Python学习 —— 爬虫入门 - 爬取Pixiv每日排行中的图片

    更新于 2019-01-30 16:30:55 我另外写了一个面向 pixiv 的库:pixiver 支持通过作品 ID 获取相关信息.下载等,支持通过日期浏览各种排行榜(包括R-18),支持通过 p ...

  4. java 获取web登录者的ip地址

    /** * 获取访问用户的客户端IP(适用于公网与局域网). */ public static final String getIpAddr(final HttpServletRequest requ ...

  5. JS中字符串的编码 解码

    DEPTNAME 是一个字符串 编码: DEPTNAME = encodeURI(encodeURI(DEPTNAME)); 解码: DEPTNAME = decodeURI(DEPTNAME,&qu ...

  6. prototype入门----自定义创建元素

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. uniGUI之MainModule(12)

    1]必须设置.  一个 user 一个, 在此放数据库控件是各 user 独立 2]常用属性: 应用 MainModule 正确的方法是将连接组件放置在 MainModule 上, 并将数据集放在窗体 ...

  8. Ubuntu下安装GTK的三种方法

    我利用此方法成功在UBUNTU 10.04下安装GTK 2.20.1. 一.安装 1.安装gcc/g++/gdb/make 等基本编程工具 $sudo apt-get install build-es ...

  9. Android APK反编译就这么简单 详解(附图)--转

    转自:http://blog.csdn.net/vipzjyno1/article/details/21039349/ 在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮 ...

  10. PCIE_DMA:xapp1052学习笔记

    Moselsim仿真: EP为Endpoint部分实现代码,即例程主代码.其他的是搭建的仿真环境,主要目的是仿照驱动的行为,将PCIE软核用起来,主要是做PC端的行为仿真,如DMA配置,DMA读写操作 ...