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

一:测试环境与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) 所描述的这些部分,这些功能也是一个日志框架提供的最基本的功能

 

时间: 2024-07-28 15:12:23

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

log4j(三)——如何控制不同级别的日志信息的输出?

一:测试环境与log4j(一)--为什么要使用log4j?一样,这里不再重述 二:老规矩,先来个栗子,然后再聊聊感受 import org.apache.log4j.*; public class UseLog4j { //日志记录器 private static Logger LOGGER = LogManager.getLogger(UseLog4j.class); //程序入口--主函数 public static void main(String[]args){ //设置日志信息的格式化

(转)log4j(三)——如何控制不同级别的日志信息的输出?

一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述 1 老规矩,先来个栗子,然后再聊聊感受 package test.log4j.test3; import org.apache.log4j.*; //by godtrue public class UseLog4j { //日志记录器 private static Logger LOGGER = LogManager.getLogger(UseLog4j.class); //程序入口——主函数 public stati

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

一.测试环境 与log4j(一)--为什么要使用log4j?一样,这里不再重述 二.老规矩,先来个例子,然后再聊聊感受 package com.sc.log4j; import org.apache.log4j.Appender; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.ConsoleAppender; import org.apache.log4j.Layout; import org.apache.

Java日志信息存库(log4j篇)

一.Log4j简介 在一个完整的J2EE项目开发中,日志是一个非常重要的功能组成部分.它可以记录下系统所产生的所有行为,并按照某种规范表达出来.我们可以通过日志信息为系统进行排错,优化系统的性能,或者根据这些信息调整系统等行为.Log4j是Apache针对于日志信息处理的一个开源项目,其最大特点是通过一个配置文件就可以灵活地控制日志信息的输出方式(控制台.文件和数据库等).日志输出格式及日志信息打印级别等,而不需要修改应用的代码. 二.编写背景 作为一名程序猿在开发中总能遇到一些比较奇葩的需求,

log4j 日志信息的引入(通用版)——解决项目运行过程中的日志信息

定义 log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程等:我们也可以控制每一条日志的输出格式:通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程.最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码. 一.log4j.properties 的使用详解 1.输出级别的种类 ERROR.WARN.INFO.D

配置log4j日志信息

一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置. 1.Loggers Loggers组件在此系统中被分为五个级别:DEBUG.INFO.WARN.ERROR和FATAL.这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR <

Java学习-046-日志抓取合并后排序问题解决方案之 --- log4j 二次定制,实现日志输出添加延时10ms

自3月25至今,已经好久没有写学习日志了,今天在写日志抓取合并的小方法,发现抓取后的日志并米有依据系统执行的日志顺序排序.日志抓取排列逻辑如下: 通过日志标识,从各个日志文件(例如 use.log,error.log 等)中获取所需日志列表 合并日志列表 升序排序 输出日志报告 结果最后获取日志信息后,发现实际产出结果与预期结果不相符,如下所示: 1 2016-04-10 22:54:23,042 - INFO - [main] [cn.ffp.autotest.api.report.Repor

JAVA中使用log4j及slf4j进行日志输出的方法

JAVA中输出日志比较常用的是log4j,这里讲下log4j的配置和使用方法,以及slf4j的使用. 一.下载log4j的架包,并导入项目中,如下: 二.创建log4j.properties配置文件 1.log4j配置文件的位置: (1)如果是java project项目,则在项目的根目录下创建log4j.properties而不是在src目录下. (2)如果是java web项目,则在src目录下创建log4j.properties配置文件,因为这个时候tomcat会去默认的加载这个配置文件,

Log4J日志配置详解和自定义log4j日志级别及输出日志到不同文件实现方法

Log4J日志配置详解 一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders(输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置. 1.Loggers Loggers组件在此系统中被分为五个级别:DEBUG.INFO.WARN.ERROR和FATAL.这五个级别是有顺序的,DEBUG < INFO < WARN <