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

1 先看栗子再来下结论

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));//打印程序运行的时间
    }
}

运行结果:

ps:

String pattern = "[1]%-10p - [2]%10p - [3]%.3p  - [4]%-10.3p - [5]%10.3p 。 %n"; //运行程序看看,是不是我们期待的日志输出样子对于上述日志样式中的[4] [5] 当日志内容发生截取时候,就不会实现左右对齐补充空格的样式;

例如String pattern = "[1]%-10p - [2]%10p - [3]%.3p  - [4]%-10.3p - [5]%10.4p 。 %n"; //运行程序看看,是不是我们期待的日志输出样子

当设置最大长度为4时候,没有发生截取的字符串会按照对齐的方式自动对齐。

2 结论

1)如果将上述代码中的注释全部去掉,你会发现这段代码其实是相当的简单的,注释是试验的时候添加上的,也是我想记住的知识点,它们就是使用log4j框架控制日志输出的方式了

2)上面的代码有以下几部分构成

2-1)控制日志信息输出格式的——pattern

2-2)控制日志信息输出样式的——layout

2-3)控制日志信息输出目的地的——appender

2-4)控制日志信息输出的——LOGGER,他可以调用不同级别的日志输出方法,然后根据配置的日志输出级别来控制什么方法会被调用,这个后面会再次讲到的

3)无论是通过配置文件控制,还是通过程序本身控制,我们想控制的基本是  2) 所描述的这些部分,这些功能也是一个日志框架提供的最基本的功能

 

(转)log4j(二)——如何控制日志信息的输出?相关推荐

  1. log4j(四)——如何控制不同风格的日志信息的输出?

    一:测试环境与log4j(一)--为什么要使用log4j?一样,这里不再重述 二:老规矩,先来个栗子,然后再聊聊感受 import org.apache.log4j.*; //by godtrue p ...

  2. log4j日志信息配置文件详解

    转自 log4J 日志信息log4j.properties配置说明 使用log4j 记录日志甚是方便,其提供了两种日志配置方式,log4j.propertes和log4j.xml,这篇文件先贴出log ...

  3. java log4j基本配置及日志级别配置详解,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  4. 使用Log4j为项目配置日志输出应用详细总结及示例演示.

    Log4j组件构成 Log4j由三个重要的组件构成: 1.日志信息的优先级(Logger) 2.日志信息的输出目的地(Appender) 3.日志信息的输出格式(Layout). 概要: 日志信息的优 ...

  5. 日志log4j配置详情,日志log具体到你想不到

    一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局). 1.Loggers Loggers组件在此系统中被分为五个级别:DE ...

  6. muduo网络库学习(九)日志类Logger和LogStream,将日志信息打印到屏幕

    每一个成熟的项目都有大大小小的日志系统,在关键的地方打印日志信息,常用来跟踪程序运行,查找错误原因等,可以节省大量的debug时间 muduo的日志信息有5个级别 TRACE,细粒度最高的日志信息,打 ...

  7. 用Log4Net来记录系统的日志信息

    [http://www.cnblogs.com/xhwy/archive/2011/11/25/2263495.html] 几乎所有的大型应用都会有自己的用于跟踪调试的API.因为一旦程序被部署以后, ...

  8. python读取日志匹配日志信息(二)

    python读取日志匹配日志信息 一.绪论 1.python获取远程服务器上的日志(远程获取日志连接:python远程连接linux) 2.python读取服务器日志,进行分析获取到需要的数据 3.将 ...

  9. 如何在Unity控制台中输出第三方C# dll中的Console.Writeline日志信息

    最近在做项目的时候有一个功能需要调用第三方C#库中的方法,虽然执行起来也都没有什么问题, 但是某些情况下,为了调试需要,希望能够输出C#库中的Log信息,方便排查. 但是C# dll中输出日志时都是使 ...

  10. 日志信息jar包 slf4j-api、slf4j-log4j12、log4j 之间的关系和使用

    slf4j-api.slf4j-log4j12.log4j 之间的关系: 首先系统包含slf4j-api作为日志接入的接口:编译时slf4j-api中public final class Logger ...

最新文章

  1. 毒霸主程序集成反流氓
  2. 测序数据的处理方法及装置制造方法及图纸
  3. html文件修改后缀为aspx之后在ie6中格式显示不正确问题的解决办法
  4. java 日志输出 log4j 简介
  5. mysql数据库约束无符号_mysql 数据类型 约束条件
  6. 搜狗浏览器也可以直接安装Chrome插件,太棒了
  7. 你的微博也被盗赞?试试HSTS强制HTTPS加密
  8. Netty入门笔记-Linux网络I/O模型介绍
  9. 相关函数: atof, atoi, atol, strtod, strtoul
  10. 反转 鼠标_灵动轻巧也有好体验,电竞鼠标不能仅看“块头”
  11. c语言c99标准_从年薪10万到年薪30万,C语言程序员必读的5本书
  12. java sec_java.security文件
  13. 详解相机的sensor工作原理
  14. Photoshop插件-证件照-2寸裁剪-2寸排版-脚本开发-PS插件
  15. 2019年工作总结——没有岁月可回首,珍惜当下不负流年
  16. ipad 开源协议_开源iPad替代品,创用CC满12岁,甚至更多
  17. Cocos Creator Layout组件
  18. python多线程读取列表
  19. canvas高效绘制10万图形,你必须知道的高效绘制技巧
  20. python可以用保留字作为函数的名字吗_Python不允许使用关键字作为变量名,允许使用内置函数名作为变量名,但这会改变函数名的含义...

热门文章

  1. Torch7 out of memory 解决方法
  2. 现代通信原理3.3:两个重要的信号处理模块-乘法器与滤波器
  3. DL实战(3):cfNet- Matlab配置
  4. 2018_09_21_生活记录_参加人工智能大会
  5. 基于离线策略的强化学习(PPO)
  6. 入坑AI一路过来走过的弯路和思考
  7. 695.岛屿的最大面积(力扣leetcode) 博主可答疑该问题
  8. Redis4.0之持久化存储
  9. Exadata 18.1新特性--计算节点升级增强
  10. c#的装箱和拆箱及值类型和引用类型