日志是系统开发过程中用于排查问题重要的记录。通常使用日志来记录系统运行的行为,什么时间点发生了什么 事情。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. 最详细最权威的Android 编码规范

    1. 前言 这份文档参考了 Google Java 编程风格规范和 Google 官方 Android 编码风格规范.该文档仅供参考,只要形成一个统一的风格,见量知其意就可. 1.1 术语说明 在本文 ...

  2. Linux 系统的用户和组

    目录 1. 用户及组相关文件 2. 用户相关查询 2.1 直接通过cat文件查看用户及组文件内容 2.2 使用下面查询命令查看 3. 使用操作命令修改用户及组相关文件 3.1 专有编辑命令(仅限高级用 ...

  3. VUE路由携带参数的三种方式

    vue 通过路由在进行页面跳转时,会经常携带参数用于同步页面间的数据 路由中携带参数的方式总结如下: 路由定义示例: { name: 'list', path: '/list', component: ...

  4. ajax与axios

  5. Ant将Jmeter的jtl文件转为html文件报“前言中不允许有内容”

    ant执行jmeter的脚本的时候提示“Fatal Error! 前言中不允许有内容” 解决办法: 在jmeter的bin目录中找到jmeter.properties: 将文件中#jmeter.sav ...

  6. 单例模式实例&多线程应用

    单例模式是指:对于一个类在内存中只能存在唯一一个对象,这种设计模式叫做单例设计模式. 单例设计模式的写法: 1. 设置私有(private)的构造方法. 2. 实例化一个该类的对象作为成员变量,并设置 ...

  7. Gradle的使用及下载

    1在官网下载Gradle 基本学这个的都有JDK和JVM所以只需要在环境变量中配置即可 点击hettp://start.spring.io/即可使用

  8. Win32-Application的窗口和对话框

    Win32 Application,没有基于MFC的类库,而是直接调用C++接口来编程. 一.弹出消息窗口 (1)最简单的,在当前窗口中弹出新窗口.新窗口只有“YES”按钮. int APIENTRY ...

  9. RN 各种小问题

    问题:vs code 无法启动 双击无反应 方法:控制台 输入 netsh winsock reset 重启 vs 问题:RN Debugger Network 不显示 源网页:https://git ...

  10. VSS2005源代码管理启用http方式

    一直在使用vss管理源代码,在服务器上使用文件共享当方式.最近安全形式升级,禁止使用文件共享,因此要升级到http方式. 按照网上的教程,一路前行. 1.登录服务器桌面,打开vss administr ...