log4j(二)——如何控制日志信息的输出?
一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述
二:先看栗子再来下结论
import org.apache.log4j.*;
import test.log4j.bean.Person;
//by godtrue
public class UseLog4j {
//日志记录器
private static Logger LOGGER = LogManager.getLogger(UseLog4j.class);
//循环次数
private static long CYCLE = 102;
//程序入口——主函数
public static void main(String[]args){
long startTime = System.currentTimeMillis();
/**
* 使用自定义的log4j的环境配置
*/ /**
* 一:定义日志信息的格式化方式,Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:
* 1)%t 用来输出生成该日志事件的线程的名称
* 2)%p 用于输出日志事件的优先级,即DEBUG,INFO,WARN,ERROR,FATAL
* 3)%r 用于输出从layout(布局)的构建到日志事件创建所经过的毫秒数
* 4)%c 用于输出日志事件的category(类别),通常就是所在类的全名
* 5)%F 用于输出被发出日志记录请求,其中的文件名
* 6)%d 用于输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:20017年02月18日 22:10:28,921
* 7)%L 用于输出日志事件的发生位置,即在代码中的行数。举例:10
* 8)%l 用于输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
* 9)%% 用于输出%标志
* 10)%M 用于输出打印该条日志的方法名
* 11)%m 用于输出代码中指定的消息
* 12)%n 用于输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
*
*
* 当我们运行程序后发现,因为输出的日志信息长短不一,所以对不齐,看起来不好看,那么有什么法子呢?log4j也发现这个问题,并且为我们提供了格式修饰符
* 格式修饰符:可以控制输出字段的最小字段宽度、最大字段宽度、字段对齐格式,如下所示:
* 序号 格式修饰符 对齐方式 最小宽度 最大宽度 备注(对%c来使用格式修饰符,所以改变的是类别名称)
*
* 1) %-20c 左对齐 20 none 用空格右垫,如果类别名称少于20个字符长
* 2) %20c 右对齐 20 none 用空格左垫,如果类别名称少于20个字符长
* 3) %.30c 左对齐 none 30 从开始截断,如果类别名称超过30个字符长
* 4) %-20.30c 左对齐 20 30 用空格右侧垫,如果类别名称短于20个字符。但是,如果类别名称长度超过30个字符,那么从开始截断。
* 5) %20.30c 右对齐 20 30 用空格左侧垫,如果类别名称短于20个字符。但是,如果类别名称长度超过30个字符,那么从开始截断。
*
*/
//试验,并查看日志格式化后的效果
//String pattern = "[1]%t - [2]%p - [3]%r - [4]%c - [5]%F - [6]%d - [7]%L - [8]%l - [9]%% - [10]%M - [11]%m[12]%n"; //运行程序看看,是不是我们期待的日志输出样子
//试验,并查看日志格式化后的效果
String pattern = "[1]%-10p - [2]%10p - [3]%.3p - [4]%-10.3p - [5]%10.3p 。 %n"; //运行程序看看,是不是我们期待的日志输出样子 /**
* 二:定义日志输出的风格样式,日志输出的风格主要有以下几种(通过官方文档我们会发现还有其他的):
* 1)org.apache.log4j.HTMLLayout(以HTML表格形式布局),
* 2)org.apache.log4j.PatternLayout(可以灵活地指定布局模式,这个在我的实际工作中是最常用的),
* 3)org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
* 4)org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
*/
Layout layout = new PatternLayout(pattern); /**
* 三:定义日志输出的目的地,日志输出的目的地主要中以下几种(通过官方文档我们会发现还有好多种类的):
* 1)org.apache.log4j.ConsoleAppender(控制台),
* 2)org.apache.log4j.FileAppender(文件),
* 3)org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
* 4)org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件,这个在我的实际工作中也是最常用的),
* 5)org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
*/
Appender appender= new ConsoleAppender(layout); //配置日志输出的定义,主要有三点:1:输出什么级别的日志信息,2:将日志信息输出到那里,3:输出的日志以什么格式展示
BasicConfigurator.configure(appender); /**
* 日志输出的级别,主要有以下几种:
* 1)ALL 各级包括自定义级别。
* 2)TRACE 最详细的信息。一般这些信息只记录到日志文件中。自版本1.2.12[3]。
* 3)DEBUG 流经系统的详细信息。一般这些信息只记录到日志文件中。
* 4)INFO 令人感兴趣的运行时事件(启动/关闭)。一般这些信息将立即呈现在状态控制台上,因而要保守使用,并保持到最低限度。
* 5)WARN 使用已过时的API,API的滥用,潜在错误,其他不良的或意外的运行时的状况(但不一定是错误的)。一般这些信息将立即呈现在状态控制台上。
* 6)ERROR 其他运行时错误或意外情况。一般这些信息将立即呈现在状态控制台上。
* 7)FATAL 导致应用程序提前终止的严重错误。一般这些信息将立即呈现在状态控制台上。
* 8)OFF 最高级别,用于关闭日志记录。
*
* 日志的级别之间的大小关系如右所示:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
*/
for(int i=0;i<CYCLE;i++){
if(i<100){
try{
LOGGER.info(new Person("godtrue",100/i,'M'));//打印对象的信息
}catch(Exception e){
LOGGER.error(i+"岁的小孩还不存在嘛!");//打印对象的信息
}finally{
LOGGER.warn("现在大部分人的年龄都在0到100岁之间的!");//打印对象的信息
}
}else{
LOGGER.info("我是一棵树,我今年活了"+i+"岁!哈哈,我厉害吧!");//打印对象的信息
}
}
LOGGER.debug("此程序的运行时间是:"+(System.currentTimeMillis()-startTime));//打印程序运行的时间
}
}
三:结论
1)如果将上述代码中的注释全部去掉,你会发现这段代码其实是相当的简单的,注释是试验的时候添加上的,也是我想记住的知识点,它们就是使用log4j框架控制日志输出的方式了
2)上面的代码有以下几部分构成
2-1)控制日志信息输出格式的——pattern
2-2)控制日志信息输出样式的——layout
2-3)控制日志信息输出目的地的——appender
2-4)控制日志信息输出的——LOGGER,他可以调用不同级别的日志输出方法,然后根据配置的日志输出级别来控制什么方法会被调用,这个后面会再次讲到的
3)无论是通过配置文件控制,还是通过程序本身控制,我们想控制的基本是 2) 所描述的这些部分,这些功能也是一个日志框架提供的最基本的功能
log4j(二)——如何控制日志信息的输出?的更多相关文章
- (转)log4j(二)——如何控制日志信息的输出?
一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述 1 先看栗子再来下结论 import org.apache.log4j.*; import test.log4j.bean ...
- log4j(三)——如何控制不同级别的日志信息的输出?
一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述 二:老规矩,先来个栗子,然后再聊聊感受 import org.apache.log4j.*; //by godtrue p ...
- (转)log4j(三)——如何控制不同级别的日志信息的输出?
一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述 1 老规矩,先来个栗子,然后再聊聊感受 package test.log4j.test3; import org.apac ...
- log4j(四)——如何控制不同风格的日志信息的输出?
一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述 二:老规矩,先来个栗子,然后再聊聊感受 import org.apache.log4j.*; //by godtrue p ...
- (转)log4j(四)——如何控制不同风格的日志信息的输出?
一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述 1 老规矩,先来个栗子,然后再聊聊感受 import org.apache.log4j.*; //by godtrue p ...
- Log4J是Apache组织的开源一个开源项目,通过Log4J,可以指定日志信息输出的目的地,如console、file等。Log4J采用日志级别机制,请按照输出级别由低到高的顺序写出日志输出级别。
Log4J是Apache组织的开源一个开源项目,通过Log4J,可以指定日志信息输出的目的地,如console.file等.Log4J采用日志级别机制,请按照输出级别由低到高的顺序写出日志输出级别. ...
- log4j+AOP 记录错误日志信息到文件中
AOP 采用异常通知切入,把指定包的异常记录到日志文件. 先看log4j.properties ,控制台输出的是普通信息, 文件输出的是异常信息. log4j.rootLogger=DEBUG, Co ...
- eclipse 远程链接访问hadoop 集群日志信息没有输出的问题l
Eclipse插件Run on Hadoop没有用到hadoop集群节点的问题参考来源 http://f.dataguru.cn/thread-250980-1-1.html http://f.dat ...
- Java学习-046-日志抓取合并后排序问题解决方案之 --- log4j 二次定制,实现日志输出添加延时10ms
自3月25至今,已经好久没有写学习日志了,今天在写日志抓取合并的小方法,发现抓取后的日志并米有依据系统执行的日志顺序排序.日志抓取排列逻辑如下: 通过日志标识,从各个日志文件(例如 use.log,e ...
随机推荐
- Java集合遍历时删除
public static void main(String[] args){ List<Integer> list = new ArrayList<Integer>(); l ...
- 理解JavaScript函数参数
前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型,甚至可以不传参数. arguments javascri ...
- JavaScript判断变量是否为数组的方法(Array)
废话不多说直接上一个代码: 1.这里是通用的检测方法 /* * 判断是否是数组 */ function isArray(obj){ return Object.prototype.toString.c ...
- 保存登录plsql developer 的用户名和密码
1 保存用户名 tools -> Preferences -> User Interface - Options 勾选 Autosave username . 保存 2 保存密码 tool ...
- 我们为什么要使用Spring Cloud?简介
转载:https://blog.csdn.net/smallsunl/article/details/78778790 单体架构 在网站开发的前期,项目面临的流量相对较少,单一应用可以实现我们所需要的 ...
- Nginx+Lua+Redis构建高并发应用
一. 源文来自:http://www.ttlsa.com/nginx/nginx-lua-redis/ 二. 预览如下:
- nuxt框架学习
1.static和assets文件夹区别 相同点:都可以存放静态文件 不同:assets下的文件 webpack会处理:static文件夹下的文件不会处理. 2.middleware middlewa ...
- Webwork【02】前端OGNL试练
1.OGNL 出现的意义 在mvc中,数据是在各个层次之间进行流转是一个不争的事实.而这种流转,也就会面临一些困境,这些困境,是由于数据在不同世界中的表现形式不同而造成的: a. 数据在页面上是一个扁 ...
- 用pyenv和virtualenv搭建单机多版本python虚拟开发环境
作为主流开发语言, 用python 开发的程序越来越多. 方便的是大多linux系统里面都默认集成了python, 开发可以随时随地开始. 但有时候这也成为了一个短板, 比如说有时候我们需要开发和调试 ...
- [nQSError: 37001]Could not connect to the Oracle BI Server Instance
[nQSError: 37001]Could not connect to the Oracle BI Server Instance 使用本机的OBIEE Client 的Oracle BI管理工具 ...