日志是系统开发过程中用于排查问题重要的记录。通常使用日志来记录系统运行的行为,什么时间点发生了什么 事情。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日志框架学习零到壹(一)的更多相关文章

  1. log4j日志框架学习

    初识Log4j:      log4j有三个部分:           1.loggers 负责捕获日志信息.           2.appenders  负责输出信息到不同的目的地         ...

  2. Log4j日志框架小记

    人啊,总是在学习中发现不足,不足中学习,学习中成长. 今天来系统记录一下对于常用日志组件的理解.配置.使用. 仅供参考, 错误之处请各路好汉不吝笔墨批评指正. 转载请注明出处 Log4j日志框架是Ap ...

  3. SpringBoot系列之切换log4j日志框架

    SpringBoot系列之使用切换log4j日志框架 ok,在pom文件右键->Diagrams->show Dependencies....,如图,找到spring-boot-start ...

  4. springboot日志框架学习------slf4j和log4j2

    springboot日志框架学习------slf4j和log4j2 日志框架的作用,日志框架就是用来记录系统的一些行为的,可以通过日志发现一些问题,在出现问题之后日志是好的一个帮手. 市面上的日志框 ...

  5. 一、log4j日志框架的理论和不同场景使用

    1.日志框架: 工作中要进行Java输出日志时,你需要一个或者多个日志框架.框架能提供对象.方法和必要的配置来发送日志信息.Java语言本身有自带的日志实现包java.util.logging.还有很 ...

  6. Slf4j+Log4j日志框架入门

    (一).日志系统介绍 slf4j,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统.简答的讲就是slf4j是一系列的 ...

  7. Spring源码学习:第2步--使用SLF4j+Log4j日志框架替换掉其自身的commons-logging日志框架

    正如Spring官方文档所述,其底层的实现选择了commons-logging作为日志框架.这一"失足"性的选择,竟连Spring自身都抱怨.但是,谁叫Spring如此优秀呢,即使 ...

  8. 日志框架学习(log4j2+slf4j)

    现在比较吊的就是这个log4j2这个日志框架了,功能强悍.slf4j是个日志框架的统一接口,方便扩展,切换框架啥的. 配置SSM+log4J2+SL4J https://blog.csdn.net/c ...

  9. SpringBoot整合log4j日志框架

    Spring Boot 2.x默认使用Logback日志框架,要使用 Log4j2必须先排除 Logback. 加入修改依赖 <dependency> <groupId>org ...

随机推荐

  1. [工作积累] D3D10+ 中 Pixel Shader 的input semantic和参数顺序

    由于semantic的使用,我们有理由相信 vertex shader的output 和 pixel shader的input是按照semantic来匹配的,而跟传入顺序无关.印象dx9时代是这样. ...

  2. 使用IDEA创建SSM框架

  3. c# 公元转农历

    void Main() { ,,); GetLunarDisplay(date).Dump(); } public List<string> GetLunarYearList() { va ...

  4. C++ 基于凸包的Delaunay三角网生成算法

    Delaunay三角网,写了用半天,调试BUG用了2天……醉了. 基本思路比较简单,但效率并不是很快. 1. 先生成一个凸包: 2. 只考虑凸包上的点,将凸包环切,生成一个三角网,暂时不考虑Delau ...

  5. day-12函数对象

    函数默认值的细节 如果函数的默认参数的默认值为变量,在所属函数定义阶段一执行就被确定为当时变量存放的值,后面变化不会再变化 a = 100 def fn(num=a): a = 200 fn() 三元 ...

  6. 游戏编程模式 Game Programming Patterns (Robert Nystrom 著)

    第1篇 概述 第1章 架构,性能和游戏 (已看) 第2篇 再探设计模式 第2章 命令模式 (已看) 第3章 享元模式 (已看) 第4章 观察者模式 (已看) 第5章 原型模式 (已看) 第6章 单例模 ...

  7. [随笔][Java][总结][java 类型系统]

    java 的类型系统大体分为两类,对象和基本类型.java使用静态类型检查来保证类型安全.每个变量在使用之前需要声明.非静态类型的语言不要求变量在使用之前进行声明. 基本数据类型 java的基本类型不 ...

  8. day02 格式化字符串

    字符格式化2019-04-01 方法一 通过f + {} 格式化字符串 name = input("Name: ")age = input("Age:")sco ...

  9. zabbix3.4使用外部邮件报警

    打开web页面,找到 管理--报警媒介类型 打开 Email 填写外部邮箱信息 点击更新,这样发件人和邮箱服务器信息定义完成. 添加收件人信息: 接下来创建动作,配置---动作---选触发器 ok 过 ...

  10. bootloader介绍

    Bootloader是系统加电后运行的第一段软件代码,主要任务就是将内核映像从硬盘读到RAM中,然后跳转到内核的入口点去运行,也即开始启动操作系统. 简单的说,Bootloader就是在操作系统运行内 ...