Log4j日志框架学习零到壹(一)
日志是系统开发过程中用于排查问题重要的记录。通常使用日志来记录系统运行的行为,什么时间点发生了什么 事情。Java中常用的莫过于Log4j框架了。下面主要围绕Log4j的基础知识、Log4j的使用方式以及实际开发过程中使用slf4j+log4j做日志等几方面进行展开:
(一)Log4j的基础知识
log4j是java中常用的一种日志框架,可以用来控制日志的输出格式、输出位置等。输出位置可以是控制台、文件、数据库、指定服务器等。下面介绍的内容,主要是常用的一些配置方式。
(1)常用日志级别
log4j中提供了不同的日志级别,所谓日志级别,就是可以在不同的场景下控制日志的输出。通过日志级别的控制,可以将不同级别的日志输出到不同的位置。常用的日志级别主要有以下四种:
DEBUG、INFO、WARN、ERROR
他们的级别从左到右依次是从低到高。如果输出DEBUG级别的日志,那么DEBUG、INFO、WARN、ERROR级别的日志都会输出。
通常通过控制日志级别将日志输出到不同的文件,便于异常情况的排查。
(2)Log4j的配置方法
使用Log4j需要配置log4j.properties配置文件(还可以使用xml格式配置,该部分以properties格式介绍)。
下面介绍一下配置文件的配置方法,通过该部分的介绍,可以轻松读懂别人的配置文件,亦能自己配置配置文件。
- log4j根配置
log4j.rootLogger=WARN, Console, File1
通过log4j.rootLogger配置整个应用的日志输出级别和输出位置。
WARN指定了日志的输出级别,Console和File1指定了日志输出的位置,名称随便起,但是一般起的要有意义,以增强可读性。
如果需要对具体的包、或者类单独控制日志的输出,可以按包进行配置,配置方式如下:
log4j.logger.com.iot=DEBUG, File2
改配置的意思是com.iot包下的所有类的日志输出级别是DEBUG,输出位置是File2。
- log4j.appender配置
appender是配置文件的输出位置,在根配置中,指定了文件的输出位置名字,那么该部分就是指定具体输出位置的形式
log4j提供了四种常用的输出位置控制,他们是:
- org.apache.log4j.ConsoleAppender (输出到控制台)
- org.apache.log4j.FileAppender (输出到文件中)
- org.apache.log4j.DailyRollingFileAppender(输出到文件中,但是每天产生一个日志文件)
- org.apache.log4j.RollingFileAppender(输出到文件中,可以指定文件的大小,当达到指定的大小就会产生新的日志文件)
通常使用第一种、第三种和第四种,第二种使用较少,因为只能往一个文件中写日志,日志会越来越大,查看不方便。
使用方式:
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender #RollingFile
log4j.appender.RollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RollingFile.File=../logs/jeesite/jeesite.log
其中加红表粗的字体是根配置中指定的输出位置名,在这里具体指定了是用的输出实现。如果是输出到文件,需要指定文件的路径。
这里特别强调,如果使用RollingFileAppender,需要指定文件的大小,和文件的个数;
使用MaxFileSize指定文件的大小,即当日志文件大小大于1KB时,就会产生新的日志文件。但是硬盘空间有限,日志文件不能无限量的增加,所以需要限制文件的个数。
使用MaxBackupIndex指定文件的个数,达到该个数之后,再次产生的日志文件会覆盖掉老的日志文件。
- 日志的输出格式layout
一个好的日志格式,可以一眼能发现关键信息所在。log4j提供了集中日志格式实现:
- org.apache.log4j.HTMLLayout(以HTML表格形式布局)
- org.apache.log4j.PatternLayout(自定义布局格式)
- org.apache.log4j.SimpleLayout(简单的日志布局格式)
- org.apache.log4j.TTCCLayout(包含日志产生的时间,线程,类别等信息)
通常使用第二种自定义布局格式,通过layout指定具体的布局格式,使用方式:
log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout
使用了自定义布局格式,就需要自定义布局格式,通过layout.ConversionPattern指定日志格式,如下所示:
log4j.appender.RollingFile.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
注:-5代表占5个字符,为了输出对齐使用。
其中各字母的含义如下:
- 使用Threshold指定具体的日志级别
在根配置中,指定了日志级别,该级别是对所有的输出位置进行控制的。但是比如我们需要将ERROR级别的日志输出到一个文件中,那么就需要通过Threshold来指定了。使用方法:
log4j.appender.RollingFile.Threshold=ERROR
(二)Log4j的使用方式
上面介绍了Log4j的基础知识和常用的配置方式,那么在使用的过程中,有以下几个步骤:
(1)导入log4j的jar包
(2)按照需求编写log4j.properties配置文件
例如:
log4j.rootLogger=DEBUG, Console, File #Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d %-5p [%c{}] - %m%n #File
log4j.appender.File=org.apache.log4j.FileAppender
log4j.appender.File.File=E://servlet.log
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=%d %-5p [%c{}] - %m%n
(3)在web.xml中配置log4j
- 通过servlet配置log4j
编写一个servlet,令其随web应用的启动而启动。
直接代码:
web.xml配置:
<servlet>
<servlet-name>log4jServlet</servlet-name>
<servlet-class>Log4jServlet</servlet-class>
<init-param>
<param-name>log4j</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</init-param>
<load-on-startup></load-on-startup><!-- 指定servlet随web应用部署而自启动,值越小,优先级越高 -->
</servlet>
<servlet-mapping>
<servlet-name>log4jServlet</servlet-name>
<url-pattern>/log4jServlet.do</url-pattern>
</servlet-mapping>
Log4jServlet代码:
public class Log4jServlet extends HttpServlet { @Override
public void init() throws ServletException {
super.init();
String prefix = getServletContext().getRealPath("/");
String log4jFile = getServletConfig().getInitParameter("log4j");
String log4jConfigPath = prefix + log4jFile;
PropertyConfigurator.configure(log4jConfigPath);
}
}
- 通过listener启动
直接上代码:
web.xml文件:
<context-param>
<param-name>log4j</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</context-param> <listener>
<listener-class>LogListener</listener-class>
</listener>
listener监听器实现代码:
public class LogListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) { }
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
ServletContext ctx = servletContextEvent.getServletContext();
String prefix = ctx.getRealPath("/");
String log4jFile = ctx.getInitParameter("log4j");
String log4jConfigPath = prefix + log4jFile;
PropertyConfigurator.configure(log4jConfigPath);
System.out.println("initialized log4j finish");
}
}
如果使用spring,那么可以直接使用spring提供的log4j加载监听器,具体使用可查资料。
(4)日志使用
配置好上面的过程之后,就可以在代码中直接使用了,使用代码:
private final static Logger logger = Logger.getLogger(LogServlet.class); public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
logger.debug("执行servlet");
logger.info("执行servlet");
logger.warn("执行servlet");
logger.error("执行servlet"); }
上面的代码执行完,就会根据日志的配置,在预期的位置输出日志
(三)实际开发过程中使用slf4j+log4j做日志
上面内容讲完之后,就可以在开发过程中使用log4j框架进行日志输出了。但是通常在开发中我们经常会见到slf4j。
SLF4J:即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统,SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。
有关slf4j的详细东西,这里不做过多介绍,只介绍如何使用slf4j+log4j实现日志记录。
基本的配置和使用log4j相同,但是需要导入下面三个包
使用的过程中,Logger类的定义如下:
private final static org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(LogServlet.class);
其他的和单独使用log4j没有什么区别。
Log4j日志框架学习零到壹(一)的更多相关文章
- log4j日志框架学习
初识Log4j: log4j有三个部分: 1.loggers 负责捕获日志信息. 2.appenders 负责输出信息到不同的目的地 ...
- Log4j日志框架小记
人啊,总是在学习中发现不足,不足中学习,学习中成长. 今天来系统记录一下对于常用日志组件的理解.配置.使用. 仅供参考, 错误之处请各路好汉不吝笔墨批评指正. 转载请注明出处 Log4j日志框架是Ap ...
- SpringBoot系列之切换log4j日志框架
SpringBoot系列之使用切换log4j日志框架 ok,在pom文件右键->Diagrams->show Dependencies....,如图,找到spring-boot-start ...
- springboot日志框架学习------slf4j和log4j2
springboot日志框架学习------slf4j和log4j2 日志框架的作用,日志框架就是用来记录系统的一些行为的,可以通过日志发现一些问题,在出现问题之后日志是好的一个帮手. 市面上的日志框 ...
- 一、log4j日志框架的理论和不同场景使用
1.日志框架: 工作中要进行Java输出日志时,你需要一个或者多个日志框架.框架能提供对象.方法和必要的配置来发送日志信息.Java语言本身有自带的日志实现包java.util.logging.还有很 ...
- Slf4j+Log4j日志框架入门
(一).日志系统介绍 slf4j,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统.简答的讲就是slf4j是一系列的 ...
- Spring源码学习:第2步--使用SLF4j+Log4j日志框架替换掉其自身的commons-logging日志框架
正如Spring官方文档所述,其底层的实现选择了commons-logging作为日志框架.这一"失足"性的选择,竟连Spring自身都抱怨.但是,谁叫Spring如此优秀呢,即使 ...
- 日志框架学习(log4j2+slf4j)
现在比较吊的就是这个log4j2这个日志框架了,功能强悍.slf4j是个日志框架的统一接口,方便扩展,切换框架啥的. 配置SSM+log4J2+SL4J https://blog.csdn.net/c ...
- SpringBoot整合log4j日志框架
Spring Boot 2.x默认使用Logback日志框架,要使用 Log4j2必须先排除 Logback. 加入修改依赖 <dependency> <groupId>org ...
随机推荐
- django from表单验证
django from表单验证 实现:表单验证 工程示例: urls.py 1 2 3 4 5 6 7 8 9 from django.conf.urls import url from djan ...
- Pycharm桌面图标(Fedora)
1.解压pycharm压缩包至/usr/local/pycharm文件夹下 2.在/usr/share/applications/目录下,新建Pycharm.desktop文件,内容如下: [Desk ...
- 算法题:给出一组数字,拼接一个最大的值 PHP
举例如下:'9235','42','9','5','8','32','136','343','45' 则拼接的最大的数为 : 9-9235-8-5-45-42-343-32-136 网上坑多,想了很久 ...
- Python控制台颜色
Python控制台颜色 格式:\033[显示方式;前景色;背景色m 说明: 前景色 背景色 颜色 30 40 黑色 31 41 红色 32 42 绿色 33 43 黃色 34 44 蓝色 35 45 ...
- Evosuite使用方法入门
Evosuite使用方法入门 1.简要介绍 EvoSuite开源工具可以基于Eclipse进行测试用例的自动生成,生成的测试用例符合Junit标准(直接生成可进行Junit的java文件),满 ...
- cookie 就是一些字符串信息
什么是 Cookie “cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie.你可以使用JavaScript 来创建和取回cookie 的 ...
- Linux ①
目录 一.计算机简单认识 二.linux初始 三.安装虚拟机 四.安装Linux系统 五. 使用xshell 6 进行远程控制 六.linux文档与目录结构 七.常用命令 一.计算机简单认识 1.服务 ...
- DNS实战--1
DNS(Domain Name System,域名系统)因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户方便的访问互联网,而不用去记住能够被机器读取的IP数串.通过主机名,最终得到该主 ...
- 基于scrapy源码实现的自定义微型异步爬虫框架
一.scrapy原理 Scrapy 使用了 Twisted异步网络库来处理网络通讯.整体架构大致如下 Scrapy主要包括了以下组件: 引擎(Scrapy)用来处理整个系统的数据流处理, 触发事务(框 ...
- 高度自适应的div
需求:有一个高度自适应的div,里面有两个div,一个高度100px,希望另一个填满剩下的高度 1.用flex 来实现 思路:flex 垂直布局(column),第一个元素固定高度,第二个元素flex ...