在项目中我们必不可少需要打印日志,通过日志我们可以查看系统的运行状态是否正常,当程序出现异常的时候,我们也可以通过查看日志来定位问题的位置,给程序员的工作带来了极大的便利。

以下这边博客的内容是我从一位大神的博客中参考过来的。希望大家都有所收益。

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打印日志的更多相关文章

  1. 使用 log4j 打印日志

    开发阶段:发现程序的问题,排错 产品阶段:记录程序运行的状况 Maven中配置依赖 通过配置文件输出日志的格式,输送的位置等 一.入门实例 1.新建一个JAva工程,导入包log4j-1.2.17.j ...

  2. log4j 打印日志

    # Set log levels #     设置日志级别 log4j.rootLogger = INFO, DebugFile,Console, LogFile, ErrorFile ## Disa ...

  3. log4j打印日志配置

    1.所需的jar包 <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifa ...

  4. Spring boot使用log4j打印日志

    先将maven中spring-boot-starter的日志spring-boot-starter-logging去掉 <dependency> <groupId>org.sp ...

  5. java项目添加log4j打印日志+转换系统时间

    1.pom.xml文件引入依赖如下: <dependency> <groupId>org.springframework.boot</groupId> <ar ...

  6. apache log4j打印日志源码出口

    Throwable.class: public void printStackTrace(PrintStream s) { synchronized (s) { s.println(this); St ...

  7. log4j输出日志乱码(转)

    log4j日志文件乱码问题的解决方法 log4j日志文件中文乱码处理方法 log4j 控制台和文件输出乱码问题解决 写在前面,第三篇文章中将原因解释的最清楚,为什么设置为UTF-8或者GBK就生效了, ...

  8. Log4j配置的经典总结,打印日志文件,日志存库

        一.介绍 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制 日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Sy ...

  9. 使用log4j2打印Log,log4j不能打印日志信息,log4j2不能打印日志信息,log4j和logj2,idea控制台信息乱码(文末)

    说来惭愧,今天就写了个"hello world",了解了一下log4j的日志. 本来是想在控制台打印个log信息,也是遇到坎坷重重,开始也没去了解log4j就来使用,log4j配置 ...

随机推荐

  1. 简单科普下hosts文件原理与制作

    简单科普下hosts文件原理与制作 hosts文件是一个用于储存计算机网络中各节点信息的计算机文件.这个文件负责将主机名映射到相应的IP地址.hosts文件通常用于补充或取代网络中DNS的功能.和DN ...

  2. Java-MyBatis-MyBatis3-XML映射文件:XML映射文件

    ylbtech-Java-MyBatis-MyBatis3-XML映射文件:XML映射文件 1. XML 映射文件 MyBatis 的真正强大在于它的映射语句,这是它的魔力所在.由于它的异常强大,映射 ...

  3. 基于SpringBoot免费开源的微信管家平台,Jeewx-Boot 1.0.3 版本发布

    项目介绍 JeewxBoot 是一款基于SpringBoot的免费微信开发平台.支持微信公众号.小程序官网.微信抽奖活动.Jeewx-Boot实现了微信公众号管理.小程序CMS.微信抽奖活动等基础功能 ...

  4. C++ 连接上期所CTP交易行情接口

    CTP相关接口和文档下载: http://www.simnow.com.cn/static/softwareDownload.action 相关库文件以及头文件如下: 遇到的问题: 1.运行直接退出了 ...

  5. matlab调用keras深度学习模型(环境搭建)

    matlab没有直接调用tensorflow模型的接口,但是有调用keras模型的接口,而keras又是tensorflow的高级封装版本,所以就研究一下这个……可以将model-based方法和le ...

  6. Linux 静态IP配置

    静态配置文件# vim /etc/sysconfig/network-scripts/ifcfg-不同系统不一样主要几个配置TYPE=EthernetBOOTPROTO=static/noneNAME ...

  7. charles-截取移动端请求-设置代理

    Charles 上的设置 1.    要截取 iPhone 上的网络请求,我们首先需要将 Charles 的代理功能打开.在 Charles 的菜单栏上选择 “Proxy”–>“Proxy Se ...

  8. Jeecg-Boot 开发环境准备(二):开发工具安装

    目录索引: 后端开发工具 前端开发工具 Nodejs镜像 WebStorm入门配置 JeecgBoot采用前后端分离的架构,官方推荐开发工具 前端开发: Webstrom 或者 IDEA 后端开发: ...

  9. csdn vip文章:使用matlab模拟镜头失真

    原文地址 https://blog.csdn.net/lircsszz/article/details/80249017 最近在研究图像校正,现将镜头失真中常见的径向畸变(radial distort ...

  10. Java文件写入

    一,FileWritter写入文件 FileWritter, 字符流写入字符到文件.默认情况下,它会使用新的内容取代所有现有的内容,然而,当指定一个true (布尔)值作为FileWritter构造函 ...