log4j介绍和使用(转)

log4j教程(史上最详细):https://blog.csdn.net/dyz4001/article/details/81103863

最详细的Log4J使用教程:https://blog.csdn.net/u013870094/article/details/79518028

log4j的内容介绍:

1 . 为什么要使用日志

答 : 开发阶段发现程序的问题 , 排除错误 , 产品阶段 , 可以记录系统运行的一些状态信息 , 程序运行的状态 ;

2 . System . out . println的局限性

答 : 1 . 不能在运行时打开或者关闭 ;

       2 . 不能选择包或者类 , 在运行的时候打开或者关闭 ;

       3 . 输出的信息没有分级 ;

       4 . 只能输出文本信息 ;

       5 . 不能改变输出位置 ; 

3 . 什么是log4j ? 

答 : log4j是目前最流行的java开源日志处理框架 , 是Apache的子项目 ; 

4 . 关于配置文件

答 : log4j中的xml配置文件要优先于properties文件 ;

5 . log4j的特性

答 : 1 . 线程安全 ;

       2 . log4j是经过优化速度的 ;

       3 . log4j是基于一个名为记录器的层次结构 ;

       4 . log4j的支持每个记录器多输出追加器(appender) ;

       5 . log4j支持国际化 ;

       6 . log4j并不限于一组预定义的设备 ;

       7 . 日志行为可以使用配置文件在运行时设置 ;

       8 . log4j设计从一开始就是处理java异常 ;

       9 . log4j有多个级别 , 通过控制这些级别可以实现将某些不想输出的信息过滤掉 ;

       10 . 日志输出的格式可以通过拓展Layout类容易的改变 ;

       11 . 日志输出的目标 , 以及在写入策略可通过实现Appender程序接口改变 ;

       12 . log4j会故障停止 , 然而 , 尽管它肯定努力确保传递 , log4j不保证每个日志语句将被传递到目的地 ;

6 . log4j的主要组成部分

答 : 1 . loggers : 负责捕获记录信息 ;

       2 . appenders : 负责发布日志信息 , 以不同的首选目的地 ;

       3 . layouts : 负责格式化不同风格的日志信息 ;

7 . log4j级别(从小到大)

答 : ALL : 各级包括自定义级别 ;

      TRACE : 指定细粒度比DEBUG更低的信息事件 ;

      DEBUG : 调试级别 ;

      INFO : 表明消息在粗粒度级别上突出强调应用程序是非常有帮助的 , 也就是输出一些提示信息 ;

      WARN : 输出潜在的有可能出错的情形 , 也就是输出警告信息 ;

      ERROR : 指出发生的不影响系统继续运行的错误信息 ;

      FATAL : 指出严重的错误 , 这些错误将会导致系统终止运行 ;

      OFF : 为最高级别 , 用于关闭所有日志信息的输出 ;

核心规则 : log4j只会输出级别大于或者等于指定级别的信息 ;

8 . properties文件配置

答 : 1 . 配置根Logger , 语法为 :

           log4j.rootLogger = [ level ] , appenderName , appenderName ……

       注意 : 1 . 第七条中虽然罗列了很多级别 , 但log4j推荐只使用四个级别 , 优先级从高到低分别是ERROR , WARN , INFO , DEBUG ; 

                 2 . appenderName指的是日志输出的地址 , 可以同时指定n个 ;

       2 . 配置日志输出的目的地Appender以及每个输出文件的各项属性 , 语法为 :

            log4j.appender.appenderName = fully.qualified.name.of.appender.class

            log4j.appender.appenderName.option1 = value1

       注意 : log4j中提供的appender有以下几种 :

                1 . org.apache.log4j.ConsoleAppender(控制台) ;

                2 . org.apache.log4j.FileAppender(文件) ;

                3 . org.apache.log4j.DailyRollingFileAppender(按照一定的频度滚动产生日志记录文件 , 默认每天产生一个文件) ;

                4 . org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件) ;

                5 . org.apache.log4j.WriterAppender(将日志信息以流格式发送到指定的位置) ;

       3 . 配置日志信息的格式或者布局layout以及布局的各项属性 , 语法为 :

            log4j.appender.appenderName.layout = fully.qualified.name.of.appender.class

            log4j.appender.appenderName.layout.option1 = value

       注意 : log4j中提供的layout有以下几种 :

               1 . org.apache.log4j.HTMLLayout(以HTML表格形式布局) ; 

               2 . org.apache.log4j.PatternLayout(可以灵活的指定布局模式 , 需要配置layout.ConversionPattern属性) ;

               3 . org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串) ; 

               4 . org.apache.log4j.TTCCLayout(包含日志产生的时间 , 线程 , 类别等等信息) ;

9 . 控制台选项

答 : 1 . log4j.appender.appenderName.Threshold = error

           用法 : rootLogger里配置debug , 然后某个文件专门存储error以及更高级别的错误信息 , 那么就在这个配置这个文件的时候指定Threshold属性为error ;

       2 . log4j.appender.appenderName.ImmediateFlush=true

           用法 : 默认值是true , 意味着所有的消息都会被立即输出 , false则是不输出 ;

       3 . log4j.appender.appenderName.target=System.out

           用法 : 默认值为System.out , 输出到控制台 , 还可以取值System.err , 当做错误信息输出 , 输出的信息全部为红色 ;

       4 . log4j.appender.appenderName.File=../../../../logs/log.appenderName.txt

           用法 : 指定日志输出到指定位置 , 用的是相对于配置文件根目录的相对路径 ;

       5 . log4j.appender.appenderName.File.Append=true

           用法 : 默认值是true , 即将消息追加到指定文件中 , 如果取值为false , 则会覆盖之前的日志内容 ;

       6 . log4j.appender.appenderName.MaxFileSize=20MB

           用法 : 后缀可以是KB , MB , GB , 当日志文件的大小到达指定大小后 , 将会自动滚动 , 即将原来的内容移到fileName.1文件中 , 用记事本打开该文件即可看到原来的内容 , 改属性只能在 appender=org.apache.log4j.RollingFileAppender 时使用 ;

       7 . log4j.appender.appenderName.MaxBackupIndex=10

           用法 : 指定可以产生滚动文件的最大数量 , 与RollingFileAppender和MaxFileSize属性一起使用 , 当MaxBackupIndex=n的时候 , 最大日志存在数量为n+1 , 即log.txt , log.txt.1 , ... , log.txt.n , 当在服务器上运行的时候 , 如果对日志数量没有限制 , 那么随之时间的推移 , 日志文件会越来越多 , 占用的内存也将越来越多 , 直到占满整个盘 ;

       8 . log4j.appender.appenderName.DatePattern='.'yyyy-MM-dd

           用法 : 该属性在 log4j.appender.appenderName=org.apache.log4j.DailyRollingFileAppender 时使用 , DailyRollingFileAppender默认的频度是每天产生一个日志记录文件 , 可以在DatePattern属性值中指定其他的频度 , 常用的几个频度如下 :

            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 : 每分钟产生一个日志记录文件 ;

            注意 : 该属性指定值之后 , 将会按照指定的频度来生成日志记录文件 , 假设指定生成一个名为 log.txt 的文件 , 频度指定为每分钟产生一个日志记录文件 , 当达到指定频度后 , 会将log.txt文件中记录的之前的日志记录 , 重新写入一个名为 log.txt.yyyy-MM-dd-HH-mm的文件中 , 而此时 log.txt 文件中存放的是新生成的日志信息 , 该过程循环往复 ;

10 . ConversionPattern参数

答 : 假设当前java文件名为Test , 所在包名为log4j :

       1 . %c : 显示当前logger空间全称 , 例如 : log4j.Test ;

            %c{层数} : 最内层的java文件为第一层 , 例如 : %c{1} , 显示为Test , 当层数大于实际存在的最大层数时 , 显示最大实际存在层数 ;

       2 . %10c : 若名字空间长度小于10 , 则在左边将欠缺的长度用空格补齐 , 该种情况为默认的右对齐方式 ;

            %-10c : 若名字空间长度小于10 , 则在右边将欠缺的长度用空格补齐 , 该种情况为默认的左对齐方式 ;

       3 . %.3c : 从空间名最右边开始显示指定的长度 , 超出该长度的部分将被截取 ;

       4 . %10.15c : 若空间名长度小于10 , 则左边将欠缺的长度用空格补齐 , 若长度超过15 , 则将多余部分截取 ;

       7 . %-10.15c : 若空间名长度小于10 , 则右边将欠缺的长度用空格补齐 , 若长度超过15 , 则将多余部分截取 ;

       8 . %d : 显示日志记录时间 , 默认时间格式为ISO8601定义的日期格式 ;

            %d{yyyy-MM-dd HH:mm:ss} : 按照指定的时间格式显示日期 ;

       9 . %d{ABSOLUTE} : 22:15:30,076 ;

            %d{DATE} : 12 Oct 2018 22:15:30,076 ;

            %d{ISO8601} : 2018-07-20 22:23:30,076 ;

       10 . %F : 显示调用logger的源文件名 , 例如 : Test.java ;

       11 . %l : 输出日志事件的发生位置 , 包括类目名 , 发生的线程 , 以及在代码中的行数 , 例如 : log4j.log4jTest.main(log4jTest.java:40) ;

       12 : %m : 显示输出消息 ;

       13 . %M : 显示调用logger的方法名 ;

       14 . %n : 换行符 ;

       15 : %p : 显示该条目的优先级 ; 

       16 . %r : 显示从程序启动时到记录该条日志时已经经过的时间 , 单位毫秒 ;

       17 . %t : 显示产生该日志条目的线程名 ;

       18 . %x : 按NDC(Nested Diagnostic Context , 线程堆栈) : 顺序输出日志 ;

              %X : 按MDC(Mapped Diagnostic Context , 线程映射表)输出日志 , 通常用于多个客户端连接同一个服务器 , 方便服务器区分是哪个客户端访问留下来的日志 ;

       19 . %% : 显示一个百分号 ;

11 . LevelRangeFilter(分级过滤器)

答 : 如果想要实现不同级别的日志分别输出到不同的位置 , 可以在properties配置文件中加入如下语句进行限制 , 例如 :

       log4j.appender.appenderName.Threshold=debug
       log4j.appender.appenderName.filter.filterName=org.apache.log4j.varia.LevelRangeFilter
       log4j.appender.appenderName.filter.filterName.LevelMin=debug
       log4j.appender.appenderName.filter.filterName.LevelMax=debug

       解释 : 将最低输出级别LevelMin和最高输出级别LevelMax都设置为debug , 那么就只能输出debug级别的日志信息了 ;

log4j使用:

一.java项目:

1.新建一个JAva工程,导入包log4j-1.2.17.jar,整个工程最终目录如下

2、src同级创建并设置log4j.properties

 ### 设置###
log4j.rootLogger = debug,stdout,D,E

### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 输出DEBUG 级别以上的日志到=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 输出ERROR 级别以上的日志到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://logs/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

3、设置日志内容

package com.mucfc;
import org.apache.log4j.Logger;

public class Test {
	private static Logger logger = Logger.getLogger(Test.class);  
 
    public static void main(String[] args) {  
        // 记录debug级别的信息  
        logger.debug("This is debug message.");  
        // 记录info级别的信息  
        logger.info("This is info message.");  
        // 记录error级别的信息  
        logger.error("This is error message.");  
    }  
 
}

4、输出结果

(1)首先是控制台的信息

(2)再来看输出的文件

内容如下,发现已按照要求输出到对应的文档中去了。

二、Web项目中使用Log4j实例 

在J2EE应用使用Log4j,必须先在启动服务时加载Log4j的配置文件进行初始化,可以在web.xml中进行。

1、web应用的log4j使用基本上都采用:新建一个servlet,这个servlet在init函数中为log4j执行配置。一般就是读入配置文件。所以需要在web.xml中为这个servlet配置,同时设定load-on-startup为1。

2、这个servlet配置log4j就是读出配置文件,然后调用configure函数。这里有两个问题:一、需要知道文件在哪里;二、需要正确的文件类型

3、配置文件位置在web.xml中配置一个param即可,路径一般是相对于web的root目录

4、文件类型一般有两种,一个是Java的property文件,另一种是xml文件

配置文件的大致内容:log4j可以指定输出的log级别的最低等级,以及log的输出配置格式,每个log可以指定多个输出方式

(1)创建Web工程,整个工程最后目录如下

(2)web.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>  
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns="http://java.sun.com/xml/ns/javaee"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
    id="WebApp_ID" version="3.0">  
    <display-name>LogLearning</display-name>  

    <servlet>  
        <servlet-name>Log4JTestServlet</servlet-name>  
        <servlet-class>com.mucfc.Log4JTestServlet</servlet-class>  
    </servlet>  

    <!--用来启动 log4jConfigLocation的servlet -->  
    <servlet>  
        <servlet-name>Log4JInitServlet</servlet-name>  
        <servlet-class>com.mucfc.Log4JInitServlet</servlet-class>  
        <init-param>  
            <param-name>log4j-properties-location</param-name>  
            <param-value>/WEB-INF/classes/log4j.properties</param-value>  
        </init-param>  
        <load-on-startup>1</load-on-startup>  
    </servlet>  

    <servlet-mapping>  
        <servlet-name>Log4JTestServlet</servlet-name>  
        <url-pattern>/test</url-pattern>  
    </servlet-mapping>  

</web-app>

 (3)配置文件log4j.properties

### set log levels ###  
log4j.rootLogger = debug,stdout,D,E  

log4j.appender.stdout = org.apache.log4j.ConsoleAppender  
log4j.appender.stdout.Target = System.out  
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout  
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n  

log4j.appender.D = org.apache.log4j.DailyRollingFileAppender  
log4j.appender.D.File = F://logs/log.log  
log4j.appender.D.Append = true  
log4j.appender.D.Threshold = DEBUG   
log4j.appender.D.layout = org.apache.log4j.PatternLayout  
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n  

log4j.appender.E = org.apache.log4j.DailyRollingFileAppender  
log4j.appender.E.File =F://logs/error.log   
log4j.appender.E.Append = true  
log4j.appender.E.Threshold = ERROR   
log4j.appender.E.layout = org.apache.log4j.PatternLayout  
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

(4)web容器一来就初始化的servlet

Log4JInitServlet.java

package com.mucfc;  
 
import java.io.File;  
import java.io.IOException;  
 
import javax.servlet.ServletConfig;  
import javax.servlet.ServletContext;  
import javax.servlet.ServletException;  
import javax.servlet.annotation.WebServlet;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
 
import org.apache.log4j.BasicConfigurator;  
import org.apache.log4j.PropertyConfigurator;  
 
/** 
 * Servlet implementation class Log4JInitServlet 
 */  
@WebServlet("/Log4JInitServlet")  
public class Log4JInitServlet extends HttpServlet {  
    private static final long serialVersionUID = 1L;  
 
    /** 
     * @see HttpServlet#HttpServlet() 
     */  
    public Log4JInitServlet() {  
        super();  
        // TODO Auto-generated constructor stub  
    }  
 
    /** 
     * @see Servlet#init(ServletConfig) 
     */  
    public void init(ServletConfig config) throws ServletException {  
        System.out.println("Log4JInitServlet 正在初始化 log4j日志设置信息");  
        String log4jLocation = config.getInitParameter("log4j-properties-location");  
 
        ServletContext sc = config.getServletContext();  
 
        if (log4jLocation == null) {  
            System.err.println("*** 没有 log4j-properties-location 初始化的文件, 所以使用 BasicConfigurator初始化");  
            BasicConfigurator.configure();  
        } else {  
            String webAppPath = sc.getRealPath("/");  
            String log4jProp = webAppPath + log4jLocation;  
            File yoMamaYesThisSaysYoMama = new File(log4jProp);  
            if (yoMamaYesThisSaysYoMama.exists()) {  
                System.out.println("使用: " + log4jProp+"初始化日志设置信息");  
                PropertyConfigurator.configure(log4jProp);  
            } else {  
                System.err.println("*** " + log4jProp + " 文件没有找到, 所以使用 BasicConfigurator初始化");  
                BasicConfigurator.configure();  
            }  
        }  
        super.init(config);  
    }  
 
    /** 
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
     */  
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
        // TODO Auto-generated method stub  
    }  
 
    /** 
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
     */  
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
        // TODO Auto-generated method stub  
    }  
 
}

调用日志Log4JTestServlet,java

package com.mucfc;  
 
import java.io.IOException;  
 
import javax.servlet.ServletConfig;  
import javax.servlet.ServletException;  
import javax.servlet.annotation.WebServlet;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
 
import org.apache.log4j.Logger;  
 
/** 
 * Servlet implementation class Log4JTestServlet 
 */  
@WebServlet("/Log4JTestServlet")  
public class Log4JTestServlet extends HttpServlet {  
    private static final long serialVersionUID = 1L;  
    private static Logger logger = Logger.getLogger(Log4JTestServlet.class);    
 
    /** 
     * @see HttpServlet#HttpServlet() 
     */  
    public Log4JTestServlet() {  
        super();  
        // TODO Auto-generated constructor stub  
    }  
 
    /** 
     * @see Servlet#init(ServletConfig) 
     */  
    public void init(ServletConfig config) throws ServletException {  
        // TODO Auto-generated method stub  
    }  
 
    /** 
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
     */  
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
        // 记录debug级别的信息    
        logger.debug("This is debug message.");    
        // 记录info级别的信息    
        logger.info("This is info message.");    
        // 记录error级别的信息    
        logger.error("This is error message.");    
    }  
 
    /** 
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
     */  
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
        doGet(request,response);  
    }  
 
}

接下来就是运行了,来看看结果:

输出结果:

三、Spring中使用Log4j

这里要实现web项目中利用Spring来使用Log4j

(1)接上面的工程,然后再导入Spring的包

(2)web.xml增加

<!-- 设置根目录 -->  
   <context-param>    
       <param-name>webAppRootKey</param-name>    
       <param-value>webapp.root</param-value>    
   </context-param>    

   <context-param>  
    <param-name>log4jConfigLocation</param-name>  
    <param-value>/WEB-INF/classes/log4j.properties</param-value>  
</context-param>  
<!-- 3000表示 开一条watchdog线程每60秒扫描一下配置文件的变化;这样便于日志存放位置的改变 -->  
<context-param>    
        <param-name>log4jRefreshInterval</param-name>    
        <param-value>3000</param-value>    
   </context-param>   
<listener>  
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  
</listener>

整个内容如下:

<?xml version="1.0" encoding="UTF-8"?>  
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns="http://java.sun.com/xml/ns/javaee"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
    id="WebApp_ID" version="3.0">  
    <display-name>LogLearning</display-name>  

    <servlet>  
        <servlet-name>Log4JTestServlet</servlet-name>  
        <servlet-class>com.mucfc.Log4JTestServlet</servlet-class>  
    </servlet>  

    <!--用来启动 log4jConfigLocation的servlet -->  
<!--     <servlet>  
        <servlet-name>Log4JInitServlet</servlet-name>  
        <servlet-class>com.mucfc.Log4JInitServlet</servlet-class>  
        <init-param>  
            <param-name>log4j-properties-location</param-name>  
            <param-value>/WEB-INF/classes/log4j.properties</param-value>  
        </init-param>  
        <load-on-startup>1</load-on-startup>  
    </servlet>-->  

    <servlet-mapping>  
        <servlet-name>Log4JTestServlet</servlet-name>  
        <url-pattern>/test</url-pattern>  
    </servlet-mapping>   

        <!-- Spring 容器加载 -->  
    <listener>  
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
    </listener>  
    <context-param>  
        <param-name>contextConfigLocation</param-name>  
        <param-value>classpath:applicationContext.xml</param-value>  
    </context-param>   

    <!-- 设置根目录 -->  
    <context-param>    
        <param-name>webAppRootKey</param-name>    
        <param-value>webapp.root</param-value>    
    </context-param>    

    <context-param>  
        <param-name>log4jConfigLocation</param-name>  
        <param-value>/WEB-INF/classes/log4j.properties</param-value>  
    </context-param>  
    <!-- 3000表示 开一条watchdog线程每60秒扫描一下配置文件的变化;这样便于日志存放位置的改变 -->  
    <context-param>    
         <param-name>log4jRefreshInterval</param-name>    
         <param-value>3000</param-value>    
    </context-param>   
    <listener>  
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  
    </listener>   

</web-app>

这里Log4JInitServlet.java就相当于没用到了。

(3)applicationContext.xml

没有内容:

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:aop="http://www.springframework.org/schema/aop"  
    xsi:schemaLocation="    
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">  
</beans>

(4)这样日志就跟随Spring窗口启动而启动了

程序一运行,就会自动把日志打印

log.log

error.log为空,因为它只打印error级别以上的信息

浏览器输入http://localhost:8080/LogLearning2/test

然后打开文件

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值