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.properties配置内容如下:

1 log4j.rootLogger=info,logTest
2 log4j.appender.logTest=org.apache.log4j.DailyRollingFileAppender
3 log4j.appender.logTest.File=/logs/LogTest/logTest.log
4 log4j.appender.logTest.DatePattern=‘.‘yyyy-MM-dd‘.log‘
5 log4j.appender.logTest.layout=org.apache.log4j.PatternLayout
6 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对象。

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

(2)使用logger输出日志。

1 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对象。

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

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

(3)使用logger输出日志。

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

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

时间: 2024-10-08 17:05:50

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

Java项目中如何使用log4j和slf4j实现日志打印

什么是log4j? Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程等:我们也可以控制每一条日志的输出格式:通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程.最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码. 什么是slf4j? SLF4J,即简单日志门面(Simple Logging Facade fo

Java中Excel导入功能实现、excel导入公共方法_POI -

这是一个思路希望能帮助到大家:如果大家有更好的解决方法希望分享出来 公司导入是这样做的 每个到导入的地方 @Override public List<DataImportMessage> materialDataImport2(byte[] fileBytes, String fileName) { //return DataImport(fileBytes, fileName, "inv_m"); File file = FileUtils.getFileFromByte

Java中利用MessageFormat对象实现类似C# string.Format方法格式化

我们在写C#代码的时候常常会使用到string.Format("待格式化字符串{0},{1},....",参数1,参数2,...),来格式化字符串,特别是拼接字符的时候,这种方式使得代码更为直观清楚. 最近使用java时候却java的string.Format与c#重点string.Format用法不一样,java中的string.format更类似于C语言的sprintf()方法 例如: String str=null; str=String.format("Hello,%

Java中String类与Integer类的几个方法

计算诸如-123,456,789 + 123,123的值 import java.math.BigInteger; import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner cin = new Scanner(System.in); String str1, str2; BigInteger a, b; while(cin.hasNext()){ str1 = cin.

java中两double相加精度丢失问题及解决方法

在讨论两位double数0.1和0.2相加时,毫无疑问他们相加的结果是0.2.但是问题总是如此吗? 下面我们让下面两个doubles数相加,然后看看输出结果: @Test public void testBig(){ System.out.println(0.11+2001299.32); } 控制台输出2001299.4300000002 我们吃惊的发现,结果并不是我们预想的那样,这是为什么呢?又如何解决呢? 现贴出BigDecimal的一个构造函数的文档供大家参考 BigDecimal pu

Java中使用Log4j记录错误、输出日志

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

SSM框架下结合 log4j、slf4j打印日志

首先加入log4j和slf4j的jar包 <!-- 日志处理 <!-- slf4j日志包--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.21</version> </dependency> <dependency> <groupId>

java web使用log4j无法写入到日志文件

项目环境 1.项目类型:java web 2.web容器:tomcat 3.框架:spring 4.调用代码:spring配置的定时任务,任务执行类用@Component注入(开始还以为是这里出了问题 ̄□ ̄||) 主要现象 1.启动tomcat后,发现日志无法写入 2.删除日志文件再次启动,日志文件没有新建 3.单独在类中执行main方法里的log操作可以写入到文件中 4.启动tomcat后,日志可以输入到控制台,但是不能写入到文件中 log4j.properties ####写入到文件!!没反

Java中在类定义时对HashSet的初始化方法

Java中很多时候都要用到HashSet的查找功能,那么在类的定义时,数据成员假如就是HashSet类型的,我们定义数据成员之后,不好直接调用add函数来实现初始化,这个时候怎么办? 我们可以这样来做: public static final HashSet<String> salesWords = new HashSet<String>() {{ add("销售额"); add("销售"); add("销售金额"); a