(转)log4j(七)——log4j.xml简单配置样例说明
背景:在公司中警察需要做技术支持,查看日志,而查看日志首先要自己清楚日志是如何生成的,所以有必要知道日志的前世今生!
转载出处:http://www.cnblogs.com/godtrue/p/6444158.html
1 测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述
1 老规矩,先来个栗子,然后再聊聊感受
1.1 举例
(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");
- }
- }
ps:在main()中,加载log4j,还可以这么 写:
PropertyConfigurator.configure("log4j.properties");
(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 这两个属性的作用,详情往下看注解,最好自己试试
ps:下面的配置文件十分的详尽,只要对号入座即可!
- <?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,则只有子集才能正确打印日志name=test.log4j.test8.UseLog4j
- 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.2 感受
1)我们现在实际的项目使用的是log4j2,相应的配置方式和这里有所不同,抽时间我再好好玩一下
2)如果整个log4j日志框架,按照比较平滑的学习曲线来学习的话,还是非常简单的,以前学习过,不过不做笔记就是学习一下,时间一长容易忘记各项配置都是干啥的,所以,在里再补上一笔,写博客的好处就体现出来了,等忘记了回头再看看,也许记忆就恢复了,谢谢博客园提供的游戏场所。——世界是个游乐场,我们都是上帝的孩子。
3)编程这一行,我觉得应该重复的造轮子,特别是在学习某项技术的时候,网上关于log4j的博文也挺多的,刚开始我也找了一些来看,不过发现不好玩,不是自己的东西理解起来费劲不说,好多一实验还不灵,当然,有好多也是相当不错的,是经过试验的,不过不够详细。总之,好的要学习,而学习的最好途径还是自己多思考,多动手试验试验。
1.3 写这些博客我曾详细的看过一下资源(非常感谢,在此谢过!)
log4j.properties配置详解与实例-全部测试通过
1.4 补充知识
log4j.rootLogger=日志级别,appender1, appender2, ….
- 日志级别:ALL<DEBUG<INFO<WARN<ERROR<FATAL<OFF,不区分大小写
- 注意,需在控制台输入,只需将其中一个appender定义为stdout即可
- 注意,rootLogger默认是对整个工程生效
- 注意,如果只想对某些包操作,那么:log4j.logger.com.hutu=info, stdout,表示该日志对package com.hutu生效
- 注意,这样做可以区分dev/线上,也可以减小性能影响:if(log.isDebugEnabled()){log.debug();}
log4j.appender.appender1=org.apache.log4j.日志输出到哪儿
- ConsoleAppender(控制台)
- FileAppender(文件)
- DailyRollingFileAppender(每天产生一个日志文件)
- RollingFileAppender(文件大小到达指定尺寸时产生一个新的文件)
- WriteAppender(将日志信息以流格式发送到任意指定的地方)
- JDBCAppender(将日志信息保存到数据库中)
log4j.appender.appender1.File=文件目录及文件
${user.home}/logs/...
log4j.appender.appender1.MaxFileSize=最大文件大小
log4j.appender.appender1.MaxBackupIndex=备份文件个数
- 其中,appender1是在第一行定义过的;
- 文件目录及文件,例如,/home/admin/logs/hutudan.log
- 最大文件大小,例如,100KB
- 备份文件个数,例如,1
log4j.appender.ServerDailyRollingFile.DatePattern=日志后缀格式
- 例如,'.'yyyy-MM-dd
log4j.appender.appender1.layout=org.apache.log4j.日志布局格式
- HTMLLayout(以HTML表格形式布局)
- SimpleLayout(包含日志信息的级别和信息字符串)
- TTCCLayout(包含日志产生的时间,执行绪,类别等信息)
- PatternLayout(可以灵活的指定布局格式,常用)
log4j.appender.appender1.layout.ConversionPattern=日志输出格式
- 例如,%d - %m%n或%d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n
- %c 输出日志信息所属的类的全名
- %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-M-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28
- %f 输出日志信息所属的类的类名
- %l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
- %m 输出代码中指定的信息,如log(message)中的message
- %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
- %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
- %r 输出自应用启动到输出该日志信息所耗费的毫秒数
- %t 输出产生该日志事件的线程名
- 可参考:http://blog.sina.com.cn/s/blog_4e4dd5570100qowy.html
log4j.appender.ServerDailyRollingFile.Append=true
- 例如,不解释,追加往后写便是
总结一下:
- Logger类:完成日志记录,设置日志信息级别
- Appender类:决定日志去向,终端、DB、硬盘
- Layout类:决定日志输出的样式,例如包含当前线程、行号、时间
(转)log4j(七)——log4j.xml简单配置样例说明的更多相关文章
- log4j(七)——log4j.xml简单配置样例说明
一:测试环境与log4j(一)--为什么要使用log4j?一样,这里不再重述 二:老规矩,先来个栗子,然后再聊聊感受 (1)这里栗子有一点特别呀!给出了包名唉!想必有用,是的,配置文件中要特别说明一下 ...
- (转)log4j(六)——log4j.properties简单配置样例说明
一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述 1 老规矩,先来个栗子,然后再聊聊感受 (1)使用配文件的方式,是不是感觉非常的清爽,如果不在程序中读取配置文件就更加的清 ...
- log4j(六)——log4j.properties简单配置样例说明
一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述 二:老规矩,先来个栗子,然后再聊聊感受 (1)使用配文件的方式,是不是感觉非常的清爽,如果不在程序中读取配置文件就更加的清 ...
- log4j2的xml的配置样例
log4j2.xml <?xml version="1.0" encoding="UTF-8"?> <Configuration status ...
- log4j.xml简单配置实现在控制台打印sql执行语句【加注释】
转: log4j.xml简单配置实现在控制台打印sql执行语句 2017年09月27日 13:02:34 艾然丶 阅读数 8804 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协 ...
- Android中关于JNI 的学习(零)简单的样例,简单地入门
Android中JNI的作用,就是让Java可以去调用由C/C++实现的代码,为了实现这个功能.须要用到Anrdoid提供的NDK工具包,在这里不讲怎样配置了,好麻烦,配置了好久. . . 本质上,J ...
- 使用CEF(二)— 基于VS2019编写一个简单CEF样例
使用CEF(二)- 基于VS2019编写一个简单CEF样例 在这一节中,本人将会在Windows下使用VS2019创建一个空白的C++Windows Desktop Application项目,逐步进 ...
- scrapy爬虫学习系列二:scrapy简单爬虫样例学习
系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备: http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...
- nginx https 配置样例
站点nginx https 配置模板 第一章 nginx 支持https 配置样例 其他 相关链接地址 第一章 nginx 支持https 配置样例 说明:https 段配置参数说明 Server 段 ...
随机推荐
- python读写文件相关内容
1.python读取文件 f = open('E:/info.txt', 'r')#用read的方式打开a = 0for line in f.readlines():读取没一行,就是读取所有文件的意思 ...
- Nmap在实战中的高级用法
Nmap提供了四项基本功能(主机发现.端口扫描.服务与版本侦测.OS侦测)及丰富的脚本库.Nmap既能应用于简单的网络信息扫描,也能用在高级.复杂.特定的环境中:例如扫描互联网上大量的主机:绕开防火墙 ...
- CentOS上安装redis记录
下载稳定版 curl -O http://download.redis.io/releases/redis-stable.tar.gz tar -zxvf redis-stable.tar.gz cd ...
- Dalvik详解
整理自百度百科 Dalvik Dalvik是Google公司自己设计用于Android平台的Java虚拟机.Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一 ...
- Hibernate入门(五)
一 Hibernate继承映射 我们可以将继承层次结构类与数据库的表映射. 1. 每个层次类一张表 这个层次结构有三个类,Employee是Regular_Employee和Contract_Empl ...
- UWP的Converter妙用
MVVM模式的使用,简化了UWP应用的开发,使层次更加分明.在写xaml的时候,有些小技术还是很实用的:比如Converter,字面上理解是转换器,那它到底是转换什么的?接触过的可能知道它起的是类型转 ...
- 蜘蛛大战之 站点LOGO(SEO)
起因: 同事让我看 搜公司名称,百度第一位并没有出现公司网址,是别人的,然后我 惊奇的发现,站点logo 竟然 抓了张 无关紧要的图片,从此 变开始了 为期 10天+的战争: 经过: [2017-06 ...
- 《基于Node.js实现简易聊天室系列之详细设计》
一个完整的项目基本分为三个部分:前端.后台和数据库.依照软件工程的理论知识,应该依次按照以下几个步骤:需求分析.概要设计.详细设计.编码.测试等.由于缺乏相关知识的储备,导致这个Demo系列的文章层次 ...
- 如何卸载CentOS自带的apache
查看安装的组件: rpm -qa | grep httpd 如果预装有apache,那么会显示像httpd-2.2.3-22.el5.centos这种的组件名. 卸载组件: rpm -e httpd- ...
- Swift大写和小写字符串
您可以通过字符串的 uppercaseString 和 lowercaseString 属性来访问一个字符串的大写/小写版本. 复制纯文本新窗口 let normal = "Could yo ...