一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述

二:老规矩,先来个栗子,然后再聊聊感受

(1)这里栗子有一点特别呀!给出了包名唉!想必有用,是的,配置文件中要特别说明一下的

package test.log4j.test8;import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;/*** Created by godtrue*/
public class UseLog4j {//日志记录器private static Logger LOGGER = LogManager.getLogger(UseLog4j.class);//程序入口——主函数public static void main(String[]args) {//读取使用Java的特性文件编写的配置文件DOMConfigurator.configure( "D:\\workspace_test\\hello-log4j\\log4j.xml" );//输出日志信息,测试日志级别的作用(配置在配置文件中),仅仅输出大于等于目前有效级别的日志信息LOGGER.debug("[1]-my level is DEBUG 天");LOGGER.info("[2]-my level is INFO");LOGGER.warn("[3]-my level is WARN");LOGGER.error("[4]-my level is ERROR");}
}

(2)这段代码和(1)除了类名多了一个 _ ,并没有什么区别,那有什么用那?恩,有用的,一切为了测试,不信,你自己试试就更清楚了

package test.log4j.test8;import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;/*** Created by godtrue*/
public class UseLog4j_ {//日志记录器private static Logger LOGGER = LogManager.getLogger(UseLog4j_.class);//程序入口——主函数public static void main(String[]args) {//读取使用Java的特性文件编写的配置文件DOMConfigurator.configure( "D:\\workspace_test\\hello-log4j\\log4j.xml" );//输出日志信息,测试日志级别的作用(配置在配置文件中),仅仅输出大于等于目前有效级别的日志信息LOGGER.debug("[1]-my level is DEBUG 天");LOGGER.info("[2]-my level is INFO");LOGGER.warn("[3]-my level is WARN");LOGGER.error("[4]-my level is ERROR");}
}

(3)如下的配置文件,仅列出了三种文件输出目的地的配置,他们相对比较常用,其中值得特别注意的是记录器的 name 和 additivity 这两个属性的作用,详情往下看注解,最好自己试试

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration><!-- 将日志信息输出到控制台 --><appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender"><!-- 设置日志输出的样式 --><layout class="org.apache.log4j.PatternLayout"><!-- 设置日志输出的格式 --><param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" /></layout><!--过滤器设置输出的级别--><filter class="org.apache.log4j.varia.LevelRangeFilter"><!-- 设置日志输出的最小级别 --><param name="levelMin" value="WARN" /><!-- 设置日志输出的最大级别 --><param name="levelMax" value="ERROR" /><!-- 设置日志输出的xxx,默认是false --><param name="AcceptOnMatch" value="true" /></filter></appender><!-- 将日志信息输出到文件,但是当文件的大小达到某个阈值的时候,日志文件会自动回滚 --><appender name="RollingFileAppender" class="org.apache.log4j.RollingFileAppender"><!-- 设置日志信息输出文件全路径名 --><param name="File" value="D:/log4j/RollingFileAppender.log" /><!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 --><param name="Append" value="true" /><!-- 设置保存备份回滚日志的最大个数 --><param name="MaxBackupIndex" value="10" /><!-- 设置当日志文件达到此阈值的时候自动回滚,单位可以是KB,MB,GB,默认单位是KB --><param name="MaxFileSize" value="10KB" /><!-- 设置日志输出的样式 --><layout class="org.apache.log4j.PatternLayout"><!-- 设置日志输出的格式 --><param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" /></layout></appender><!-- 将日志信息输出到文件,可以配置多久产生一个新的日志信息文件 --><appender name="DailyRollingFileAppender" class="org.apache.log4j.DailyRollingFileAppender"><!-- 设置日志信息输出文件全路径名 --><param name="File" value="D:/log4j/DailyRollingFileAppender.log" /><!-- 设置日志每分钟回滚一次,即产生一个新的日志文件 --><param name="DatePattern" value="'.'yyyy-MM-dd-HH-mm'.log'" /><!-- 设置日志输出的样式 --><layout class="org.apache.log4j.PatternLayout"><!-- 设置日志输出的格式 --><param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" /></layout></appender><!--注意:1:当additivity="false"时,root中的配置就失灵了,不遵循缺省的继承机制2:logger中的name非常重要,它代表记录器的包的形式,有一定的包含关系,试验表明2-1:当定义的logger的name同名时,只有最后的那一个才能正确的打印日志2-2:当对应的logger含有包含关系时,比如:name=test.log4j.test8 和 name=test.log4j.test8.UseLog4j,则2-1的情况是一样的        2-3:logger的name表示所有的包含在此名的所有记录器都遵循同样的配置,name的值中的包含关系是指记录器的名称哟!注意啦!3:logger中定义的level和appender中的filter定义的level的区间取交集4:如果appender中的filter定义的 levelMin > levelMax ,则打印不出日志信息--><!-- 指定logger的设置,additivity指示是否遵循缺省的继承机制--><logger name="test.log4j.test8.UseLog4j" additivity="false"><level value ="WARN"/><appender-ref ref="DailyRollingFileAppender"/></logger><!--指定logger的设置,additivity指示是否遵循缺省的继承机制 --><logger name="test.log4j.test8.UseLog4j_" additivity="false"><level value ="ERROR"/><appender-ref ref="RollingFileAppender"/></logger><!-- 根logger的设置--><root><level value ="INFO"/><appender-ref ref="ConsoleAppender"/><!--<appender-ref ref="DailyRollingFileAppender"/>--></root></log4j:configuration>

三:感受

1)我们现在实际的项目使用的是log4j2,相应的配置方式和这里有所不同,抽时间我再好好玩一下

2)如果整个log4j日志框架,按照比较平滑的学习曲线来学习的话,还是非常简单的,以前学习过,不过不做笔记就是学习一下,时间一长容易忘记各项配置都是干啥的,所以,在里再补上一笔,写博客的好处就体现出来了,等忘记了回头再看看,也许记忆就恢复了,谢谢博客园提供的游戏场所。——世界是个游乐场,我们都是上帝的孩子。

3)编程这一行,我觉得应该重复的造轮子,特别是在学习某项技术的时候,网上关于log4j的博文也挺多的,刚开始我也找了一些来看,不过发现不好玩,不是自己的东西理解起来费劲不说,好多一实验还不灵,当然,有好多也是相当不错的,是经过试验的,不过不够详细。总之,好的要学习,而学习的最好途径还是自己多思考,多动手试验试验。

四:写这些博客我曾详细的看过一下资源(非常感谢,在此谢过!)

log4j官网

log4j教程

使用Log4j进行日志操作

最详细的Log4j使用教程

log4j百度百科

log4j维基百科

log4j详解与实战

log4j配置文件详解

log4j.properties配置详解与实例-全部测试通过

log4j.properties配置文件详解

log4j.xml配置文件详解

log4.xmlj配置文件详解

log4j(七)——log4j.xml简单配置样例说明相关推荐

  1. log4j(六)——log4j.properties简单配置样例说明

    一:测试环境与log4j(一)--为什么要使用log4j?一样,这里不再重述 二:老规矩,先来个栗子,然后再聊聊感受 (1)使用配文件的方式,是不是感觉非常的清爽,如果不在程序中读取配置文件就更加的清 ...

  2. log4j2的xml的配置样例

    log4j2.xml 1 <?xml version="1.0" encoding="UTF-8"?> 2 <Configuration st ...

  3. 【Flask框架】一. Flask框架初体验(配置环境 + 简单demo样例)

    文章目录 一. Flask框架初体验(配置环境 + 简单demo样例) 虚拟环境 新建项目 将Pycharm改为FLASK_DEBUG模式 修改FLASK_DEBUG模式的步骤 配置文件 简单用法 U ...

  4. JBoss 系列九十六:JBoss MSC - 简介及一个简单演示样例

    什么是 JBoss MSC JBoss MSC 即 JBoss Modular Service Container,是第三代 JBoss 产品 JBoss 7和WildFfly的内核,JBoss MS ...

  5. HP C7000刀片服务器北电GbE2c刀片背板网络交换机配置样例

    HP C7000刀片服务器使用的GbE2c刀片背板网络交换机和传统的华为.思科等交换机配置方式很不一样,配置起来比较复杂,本文是作为虚拟化环境中的典型应用的一个配置样例 . 一.环境介绍 本例HP C ...

  6. leveldb简单使用样例

    个人随笔 (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) 下面附几个leveldb的简单使用样例,包含写数据.查数据.遍历数据,仅供参考. 写数据 #i ...

  7. Prism安装、MVVM基础概念及一个简单的样例

    一:Prism的下载和安装 1:在http://compositewpf.codeplex.com/上下载最新的包. 下载完毕后,运行之,选择解压目录解压之.解压完毕的根目录下有chm帮助文档. 2: ...

  8. 百度地图 Android SDK - 检索功能使用的简单演示样例

    百度地图 SDK 不仅为广大开发人员提供了炫酷的地图展示效果.丰富的覆盖物图层,更为广大开发人员提供了多种 LBS 检索的能力. 通过这些接口,开发人员能够轻松的訪问百度的 LBS 数据,丰富自己的移 ...

  9. Yii学习笔记之二(使用gii生成一个简单的样例)

    1. 数据库准备 (1) 首先我们建一数据库 yii2test 并建立一张表例如以下: DROP TABLE IF EXISTS `posts`; CREATE TABLE `posts` (`pos ...

最新文章

  1. Python必须要掌握的高端语法
  2. C++标准库vector类型的使用和操作总结
  3. Unity3D 重写下拉菜单/Dropdown组件、开启每个按钮可用
  4. java保存base64图片_java保存base64位的图片,并且用时间文件夹分割
  5. kafka java api 删除_使用Java API创建(create),查看(describe),列举(list),删除(delete)Kafka主题(Topic)...
  6. win7打开计算机死机,怎么样解决Win7系统运行程序引起的死机问题
  7. Potted Flower(线段树+dp)
  8. 动图处理_终于找到了,最全的废气处理动图
  9. vnr懒人版教程_凉皮懒人做法,不揉面不洗面,配方配料无保留,简单快速又好吃...
  10. Kubernetes 云原生 容器类型有哪些
  11. 基于微信小程序的点餐系统
  12. Blender学习-考拉课程学习记录
  13. 解压缩SIS文件工具
  14. java主色调_主色调
  15. N-gram模型(基于词表)
  16. 中规中矩的输入两个正整数m和n,求其最大公约数和最小公倍数。
  17. 计算机英语输入法怎么,电脑英文输入法不见了怎么处理?
  18. 亲身体验:八款知名虚拟主机对比测评
  19. 58到家数据库30条军规解读
  20. Java实验7《字符串和文本I/O 》

热门文章

  1. 5训练需要更改参数吗_PM2.5和臭氧需要协同控制吗?
  2. 如何读取电脑html信息,JavaScript 获取客户端计算机硬件及系统信息
  3. Java面对对象的核心是啥_Java面向对象核心技能
  4. gcc 复杂结构体 初始化_gcc编译选项
  5. 控制信号(单脉冲信号)的跨时钟域传输问题
  6. 【 Vivado 】输入延迟约束实例
  7. 【 Linux 】Linux下如何退出vim的一些常用命令总结
  8. 有限状态机设计实例之空调控制器(Verilog HDL语言描述)(仿真与综合)(附用Edraw(亿图)画状态转移图)
  9. OC基础--OC内存管理原则和简单实例
  10. 分享5个有趣的 JavaScript 代码片段