使用log4j记录日志
这里使用log4j的老版本,因为接触到的有相当多项目还在使用log4j 1.x版本,所以简单记录一下log4j v1的用法。
一、导入log4j 1.x的jar包
如果使用1.x版本,建议使用最后一次更新的版本,其他版本可以自己选择:https://mvnrepository.com/artifact/log4j/log4j
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
二、log4j的错误级别
在log4j中,一共有5个错误级别,分别是:
1、fatal(致命错误)
2、error(错误)
3、warn(警告)
4、info(提示信息)
5、debug(调试信息)
三、log4j日志输出方式
在log4j中,日志输出一般有控制台输出和日志文件两种方式,这两种方式并不冲突:
1、可以只将日志输出到控制台,而不输出到日志文件中;
2、可以只将日志输出到日志文件中,而不在控制台中打印;
3、可以将日志,既打印到控制台,又输出到日志文件中。
对于这两种方式,log4j有专门的的称呼:控制台输出对应console,日志文件输出对应logfile。
四、配置log4j
在配置log4j的时候需要注意,log4j v1,默认是使用*.properties文件进行配置;而目前log4j v2使用*.xml文件进行配置。
虽然文件名有区别,但是log4j查找配置文件时,都是去classpath目录下查找。
这里说的是log4j v1,所以创建log4j.properties文件,保存路径随意,只要编译后存放路径是classpath即可,一般来说,如果是maven项目,建议保存到resources目录下。
到先看一个配置示例,然后解释配置项
log4j.rootCategory=DEBUG, CONSOLE, LOGFILE log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=-%p - %d{yyyy-MM-dd HH:mm:ss} - %C - line:%L - %m%n log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=/opt/logs/app.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=-%p - %d{yyyy-MM-dd HH:mm:ss} - %C - line:%L - %m%n
下面将会对上面的配置文件进行详细解释。
4.1、log4j的全局配置
log4j.rootCategory=DEBUG, CONSOLE, LOGFILE
这一行配置,表示,log4j打印的日志错误级别是DEBUG(不区分大小写),日志会显示在控制台(console),同时也会将日志写到文件中(logfile)。
如果设置rootCategory=INFO和CONSOLE,那么日志的打印级别为INFO(所以debug级别日志不会打印),日志只会输出到控制台(console)。
4.2、控制台日志的配置
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=-%p - %d{yyyy-MM-dd HH:mm:ss} - %C - line:%L - %m%n
上面这三行配置,从左边的键就可以看出这是对显示在控制台的日志格式进行设置的。
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
表示向控制台输出日志时,使用org.apache.log4j.ConsoleAppender这个类来实现功能。
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
表示输出的格式使用org.apache.log4j.PatternLayout这个类来管理。
log4j.appender.CONSOLE.layout.ConversionPattern=-%p - %d{yyyy-MM-dd HH:mm:ss} - %C - line:%L - %m%n
指定输出的格式。其中常用的几个表达式如下:
%p | 输出日志的错误级别 |
%C | 包名.类名 |
%d{YYYY-MM-dd HH:mm:ss} | 时间 |
%L | 行号 |
%m | 日志输出的信息 |
%n | 换行 |
4.3、日志文件输出的配置
日志文件输出配置,几乎和控制台输出是一样的配置方法。
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
表示向文件输出日志时,使用org.apache.log4j.FileAppender这个类来实现功能。
log4j.appender.LOGFILE.File=/opt/logs/app.log
指定日志文件的保存路径(需要该路径有写权限)。
log4j.appender.LOGFILE.Append=true
设置是否以追加方式记录日志。
如果设置为false,那么项目重启后,向日志文件中写日志前,会将以前的日志先清空,然后再写入。
如果设置为true,那么项目重启后,向日志文件中写日志时,不会将以前的日志清空,以前的日志会一直保留。
这个可以根据自己的情况而定。
五、使用log4j进行日志记录
log4j v1和v2的用法会有一些区别,这里只给出了v1的用法:
package cn.ganlixin.logger; import org.apache.log4j.Logger;
import org.junit.Test; /**
* 描述: 测试使用log4j v1的版本用法
*/
public class TestLog4jV1 { @Test
public void testLog() {
// 创建logger,传入当前类的class对象即可
Logger logger = Logger.getLogger(TestLog4jV1.class);
logger.debug("debug msg");
logger.info("info msg");
logger.warn("warn msg");
logger.error("error msg");
logger.fatal("fatal msg");
}
}
可以看到控制台输出:
-DEBUG - 2018-12-05 16:40:39 - cn.ganlixin.logger.TestLog4jV1 - line:14 - debug msg
-INFO - 2018-12-05 16:40:39 - cn.ganlixin.logger.TestLog4jV1 - line:15 - info msg
-WARN - 2018-12-05 16:40:39 - cn.ganlixin.logger.TestLog4jV1 - line:16 - warn msg
-ERROR - 2018-12-05 16:40:39 - cn.ganlixin.logger.TestLog4jV1 - line:17 - error msg
-FATAL - 2018-12-05 16:40:39 - cn.ganlixin.logger.TestLog4jV1 - line:18 - fatal msg
六、注意事项
1、导入Looger包的时候,不要导错误的包,应该是:
import org.apache.log4j.Logger;
2、只有当错误级别高于或等于配置文件中是设定的级别时,日志才会被打印,否则就不有输出内容。
5个级别打印日志,分别是debug()、info()、warn()、error()、fatal(),如果配置文件中设置的错误级别是warn(警告级别),那么即使执行了debug()和info(),但是却并不会真的有输出日志;只有当使用warn或者比warn更高级别的error(),fatal()来打印日志的时候,才会真的输出日志。
七、设置特定的错误级别
我们的项目中,可能有的地方一点点细微的错误或者警告都很重要,而在有些地方,一些警告都可以忽略。所以,如果我们在log4j.properties中指定log4j追踪的错误级别,这个就有点抓不到重心的感觉。
log4j提供了一个功能,可以专门为某个包下面的类进行设置错误级别,也可以专门为某个特定的类设置错误级别,甚至可以专门为某个特定的方法设置错误级别。
# 将全局的日志级别配置为error
log4j.rootCategory=error, console, logfile # 将lixin.gan.mapp包下面的所有类的错误级别设置为debug
log4j.lixin.gan.mapper=debug # 将lixin.gan.service.impl.UserServiceImpl这个类的错误级别设置为error
log4j.lixin.gan.service.impl.UserServiceImpl=error # 将lixin.gan.service.impl.AdminServiceImpl类中的show方法的错误级别设置为error
log4j.lixin.gan.service.impl.AdminServiceImpl.show=error
使用log4j记录日志的更多相关文章
- 浅谈如何使用Log4j记录日志
一.什么是log4j Log4J是Apache的一个开放源代码的项目.通过使用Log4J,程序员可以控制日志信息输送的目的地,包括控制台,文件,GUI组件和NT事件记录器,也可以控制每一条日志的输出格 ...
- Log4j记录日志步骤
记录日志对调试Bug很有帮助 亲身体会 个人习惯用Log4J,大家可以在apache网站:jakarta.apache.org/log4j 可以免费下载到Log4j最新版本的软件包. Log4j支持 ...
- JAVA中使用LOG4J记录日志(转)
在项目开发中,记录错误日志是一个很有必要功能.一是方便调试:二是便于发现系统运行过程中的错误:三是存储业务数据,便于后期分析: 在java中,记录日志,有很多种方式. 比如,自己实现. 自己写类,将日 ...
- JAVA中使用LOG4J记录日志
在项目开发中,记录错误日志是一个很有必要功能.一是方便调试:二是便于发现系统运行过程中的错误:三是存储业务数据,便于后期分析: 在java中,记录日志,有很多种方式. 比如,自己实现. 自己写类,将日 ...
- log4j记录日志到指定文件
新建类文件: import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; /** * 记录日志到指定文件 ...
- Java Web Project自定义错误页面,log4j记录日志。
创建记录日志的文件LoggerHelper.java: package com.wyp.helper; import org.apache.log4j.Logger; public class Log ...
- log4j记录日志 和 webAppRootKey关系
今天发现一个问题,就是后台从某天开始不再记录日志了,最后发现是 webAppRootKey 的 value 的值必须要和log4j的注入变量要一致. 如下:web.xml文件的 webAppRootK ...
- 使用commons-logging和log4j记录日志
一,为什么要使用commons-logging+log4j? commons-logging和log4j都是Apache下的开源项目.commons-logging的目的是为“所有的Java日志实现” ...
- 在Spring项目中使用Log4j记录日志
(1)引入log4j的jar包: 官网下载地址:http://logging.apache.org/log4j/1.2/download.html (2)在web.xml中添加log4j配置: 1 2 ...
随机推荐
- 解决Eclipse点击运行后控制台不能自动弹出的问题
解决方案: 选择Window-->Preferences-->Run.Debug-->Console 勾选"Show when program writest to sta ...
- CISCO 过载NAT配置(小型网络)
一.实验涉及技术 vlan(虚拟局域网). svi(三层交换) .nat(网络地址转换).static router(静态路由) 三.实验目的: 通过配置过载NAT从而实现企业内网正常访问公网,PC ...
- java操作elasticsearch实现前缀查询、wildcard、fuzzy模糊查询、ids查询
1.前缀查询(prefix) //prefix前缀查询 @Test public void test15() throws UnknownHostException { //1.指定es集群 clus ...
- AOP的底层实现:JDK动态代理与Cglib动态代理
转载自 https://www.cnblogs.com/ltfxy/p/9872870.html SpringAOP底层的实现原理: JDK动态代理:只能对实现了接口的类产生代理.(实现接口默认JDK ...
- MapReduce过程详解及其性能优化
http://blog.csdn.net/aijiudu/article/details/72353510 废话不说直接来一张图如下: 从JVM的角度看Map和Reduce Map阶段包括: 第一读数 ...
- C#语言のC#扩展方法(.Net特性)
this在C#中的常见用法:1.在C#中,this关键字代表当前实例,我们可以用this.来调用当前实例的成员方法,变量,属性,字段等; 2.也可以用this来做为参数状当前实例做为参数传入方法. 3 ...
- 16.ajax_case01
# 抓取北京市2018年积分落户公示名单 # 'http://www.bjrbj.gov.cn/integralpublic/settlePerson' import csv import json ...
- ASP.NET 应用程序遭遇Server Application Unavailable问题的解决的方法
公司服务器有.NET2的应用在执行,而我使用了.NET4平台开发,本机測试没问题,扔服务器发现要么我的新平台不好使,要么.NET2的旧平台不好使,各种重新启动IIS服务和WWW服务都无济于事 当我意识 ...
- [Python] 个人TIPS
1.查询当前代码路径 import os os.getcwd() 2.尝试大文件读取时,可对pandas显示设置进行调整,使之得到更为全局或者局部的细节显示 pd.options.display.ma ...
- WPF之DataGrid应用 翻页
前几天打算尝试下DataGrid的用法,起初以为应该很简单,可后来被各种使用方法和功能实现所折磨.网络上的解决方法太多,但也太杂.没法子,我只好硬着头皮阅览各种文献资料,然后不断的去尝试,总算小有成果 ...