JAVA中输出日志比较常用的是log4j,这里讲下log4j的配置和使用方法,以及slf4j的使用方法。

 一、下载log4j的架包,并导入项目中,如下:

二、创建log4j.properties配置文件

1、log4j配置文件的位置:

(1)如果是java project项目,则在项目的根目录下创建log4j.properties而不是在src目录下。

(2)如果是java web项目,则在src目录下创建log4j.properties配置文件,因为这个时候tomcat会去默认的加载这个配置文件,而不需要我们手动的加载log4j的配置文件。

log4j.properties配置内容如下:

 log4j.rootLogger=info,logTest
log4j.appender.logTest=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logTest.File=/logs/LogTest/logTest.log
log4j.appender.logTest.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.logTest.layout=org.apache.log4j.PatternLayout
log4j.appender.logTest.layout.ConversionPattern=[LogTestInfo] [%d][%c][%-5p]%m%n

2、log4j配置项的说明:

(1)第一行中rootLogger配置的是整个项目的日志输出,也可以只针对某一个模块进行日志输出,比如第一行配置成log4j.logger.com.logTest.project=info,logTest,则日志只输出项目路径com/logTest/project下的。

info为日志级别,可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL。配置为info这样只显示INFO, WARN, ERROR的日志信息。

logTest为日志配置的名称,对应的详细配置在下面。

(2)第二行是指定日志输出的类型。

可选参数如下:

org.apache.log4j.ConsoleAppender(控制台)

org.apache.log4j.FileAppender(文件)

org.apache.log4j.DailyRollingFileAppender(每隔一段时间产生一个日志文件)

org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)

org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

(3)第三行是指定日志文件输出的路径及文件名。

1)如果输出到指定位置:log4j.appender.logTest.File=D:\\logTest.log

2)如果输出到当前tomcat工作目录下:log4j.appender.logTest.File=${catalina.home}/logTest/logTest.log

(4)第四行是配合第二行设置,对日志产生的时间间隔进行格式化设置,格式化后的文本会作为日志文件的后缀。

以上面第四行的设置为例,即每天产生一个新的logTest.log日志文件,并将前一天的日志命名为logTest.log.2017-07-07.log。注意:DatePattern中不用处理的文字要放到单引号(')中,如上面的(.)和(.log)。

可选参数如下:

1)'.'yyyy-MM:每月

2)'.'yyyy-ww:每周

3)'.'yyyy-MM-dd:每天

4)'.'yyyy-MM-dd-a:每半天

5)'.'yyyy-MM-dd-HH:每小时

6)'.'yyyy-MM-dd-HH-mm:每分钟

(5)第五行是指定日志输出的格式。

可选参数如下:

1)org.apache.log4j.HTMLLayout(以HTML表格形式布局)

2)org.apache.log4j.PatternLayout(可以灵活地指定布局模式)

3)org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)

4)org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

(6)第六行是配合第五行设置,对日志输出进行格式化设置。

以第六行设置为例,[LogTestInfo] [%d][%c][%-5p]%m%n 的输出结果为:

格式化参数说明如下:

%m 输出代码中指定的消息。

%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。

%r 输出自应用启动到输出该log信息耗费的毫秒数。

%c 输出所属的类目,通常就是所在类的全名。

%t 输出产生该日志事件的线程名。

%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”。

%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MM dd HH:mm:ss,SSS}。

%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

%%: 输出一个"%"字符。

%F: 输出日志消息产生时所在的文件名称。

%L: 输出代码中的行号。

可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:

1)%20c:指定输出类目的名称,最小的宽度是20,如果类目的名称小于20的话,默认的情况下右对齐。

2)%-20c:指定输出类目的名称,最小的宽度是20,如果类目的名称小于20的话,"-"号指定左对齐。

3)%.30c:指定输出类目的名称,最大的宽度是30,如果类目的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。

4)%20.30c:如果类目的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉。

三、日志输出代码例子

(1)在类中创建一个logger对象。

 private Logger logger = Logger.getLogger(this.getClass());

(2)使用logger输出日志。

 logger.info("TestInfo 1");

输出效果:

到这里,log4j的配置及使用就讲完了。下面顺便讲下slf4j的使用。

四、slf4j配合log4j的使用

  SLF4J:即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。

  在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统,SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。

(1)下载slf4j的架包,并导入项目中,如下:

(2)直接使用上面第二点中log4j的配置即可,不用另外配置slf4j。

(3)在类中创建logger对象。

 private Logger logger = LoggerFactory.getLogger(this.getClass());

这里注意要使用slf4j架包中的Logger,而不是log4j架包中的Logger。

(3)使用logger输出日志。

 logger.info("TestInfo 1");
logger.info("TestInfo {}","1");

slf4j有两种输出方式,除了像log4j那样拼接字符串输出外,还提供参数化的方式输出,即上面第二行的方式,用一对大括号来表示参数位,后面的1即为参数值。

JAVA中使用log4j及slf4j进行日志输出的方法详解的更多相关文章

  1. 《手把手教你》系列基础篇(九十一)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-下篇(详解教程)

    1.简介 为了方便查看和归档:(1)不同包的日志可能要放到不同的文件中,如service层和dao层的日志:(2)不同日志级别:调试.信息.警告和错误等也要分文件输出.所以宏哥今天主要介绍和分享的是: ...

  2. 《手把手教你》系列基础篇(九十)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-中篇(详解教程)

    1.简介 上一篇宏哥介绍是如何使用logback将日志输出到控制台中,但是如果需要发给相关人需要你拷贝出来,有时候由于控制台窗口的限制,有部分日志将会无法查看,因此我们还是需要将日志输出到文件中,因此 ...

  3. java中4种修饰符访问权限的区别及详解全过程

    java中4种修饰符访问权限的区别及详解全过程 http://jingyan.baidu.com/article/fedf0737700b3335ac8977ca.html java中4中修饰符分别为 ...

  4. “全栈2019”Java多线程第三十章:尝试获取锁tryLock()方法详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  5. “全栈2019”Java多线程第十二章:后台线程setDaemon()方法详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  6. “全栈2019”Java多线程第七章:等待线程死亡join()方法详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  7. “全栈2019”Java第六十五章:接口与默认方法详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. 《手把手教你》系列基础篇(八十七)-java+ selenium自动化测试-框架设计基础-Log4j 2实现日志输出-上篇(详解教程)

    1.简介 Apache Log4j 是一个非常古老的日志框架,并且是多年来最受欢迎的日志框架. 它引入了现代日志框架仍在使用的基本概念,如分层日志级别和记录器. 2015 年 8 月 5 日,该项目管 ...

  9. 《手把手教你》系列基础篇(八十八)-java+ selenium自动化测试-框架设计基础-Log4j 2实现日志输出-下篇(详解教程)

    1.简介 上一篇宏哥讲解和分享了如何在控制台输出日志,但是你还需要复制粘贴才能发给相关人员,而且由于界面大小限制,你只能获取当前的日志,因此最好还是将日志适时地记录在文件中直接打包发给相关人员即可.因 ...

随机推荐

  1. ionic3 笔记

    ionic3的常用命令: //新建项目.ionic start ionic_tab tabs // 新建页面ionic g page NewPage// 查看usb链接的手机adb devices c ...

  2. 【Tarjan】洛谷P3379 Tarjan求LCA

    题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每 ...

  3. Oracle之 11gR2 RAC 修改监听器端口号的步骤

    Oracle 11gR2 RAC 修改监听器端口号的步骤 说明:192.168.188.181 为public ip1192.168.188.182 为public ip2192.168.188.18 ...

  4. 使用GitHub+hexo搭建个人独立博客

    前言 使用github pages服务搭建博客的好处有: 全是静态文件,访问速度快: 免费方便,不用花一分钱就可以搭建一个自由的个人博客,不需要服务器不需要后台: 可以随意绑定自己的域名,不仔细看的话 ...

  5. JMeter-接口自动化之正则表达式关联

    jmeter中,接口自动化的关键在于参数关联.比如需要登录的接口,如何调用登录口令?一个增删改查的闭环,如何将接口参数上下传递?下面就以实际的例子来仔细说一说 1:登录接口 这里有一个实际的登录接口, ...

  6. 【译】巧用CSS变量实现自动前缀

    转:https://www.h5jun.com/post/autoprefixing-with-css-variables-lea-verou.html 最近,当我在制作 markapp.io 这个小 ...

  7. 前端学习:html基础学习一

    1.HTML的语法(主要内容HTML语法格式.文档注释.代码格式) HTML的特点 1.可以设置文本的格式,比如标题.字号.文本颜色.段落等等 2.可以创建列表(例如打开百度,我们可以看到这样的列表) ...

  8. Memory Map

    计算机最重要的功能单元之一是Memory.Memory是众多存储单元的集合,为了使CPU准确地找到存储有某个信息的存储单元,必须为这些单元分配一个相互区别的“身份证号”,这个“身份证号”就是地址编码. ...

  9. CSS基础知识(display和visibility、overflow、文档流)

    9.显示与隐藏 u  display属性: (1)none:隐藏元素,不会再占有页面的任何空间,即不会影响布局. (2)inline:默认值.将元素[显示]为内联元素     (与HTML元素本身无关 ...

  10. python模块学习:os模块

    一.os模块概述 Python os模块包含普遍的操作系统功能.例如文件的复制.创建.修改.删除文件及文件夹... 二.常用方法 1.os.listdir()   返回指定目录下的所有文件和目录名. ...