• log4j日志输出到文件的配置


    1.Maven的dependency

    2.log4j.properties的配置

    3.Junit的Test类

    4.web.xml的配置(非必要)

    5.spring的db.config的配置(非必要)

    一.maven的dependency

    <!--log4j-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.3</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
        </dependency>
    <!--junit-->
     <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
     </dependency>

    这些jar包都可以去maven中央仓库下载到,http://search.maven.org/

    二.log4j.properties的配置。

    #所有日志
    log4j.rootLogger = DEBUG,stdout,file
    
    log4j.logger.org.apache.ibatis=warn
    log4j.logger.java.sql=warn
    log4j.logger.org.springframework=warn
    
    # Druid
    log4j.logger.druid.sql=DEBUG
    log4j.logger.druid.sql.DataSource=warn
    log4j.logger.druid.sql.Connection=warn
    log4j.logger.druid.sql.Statement=DEBUG
    log4j.logger.druid.sql.ResultSet=warn
    #设置包名的输出级别
    log4j.logger.cn.wdq=DEBUG,wdq
    
    #控制台输出
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.Threshold=DEBUG
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}[ %p ]%m%n
    
    #所有文件输出
    log4j.appender.file = org.apache.log4j.FileAppender
    log4j.appender.file.File = ${webApp.root}/wdq_logs/allDEBUG.log
    log4j.appender.file.Encoding=UTF-8
    log4j.appender.file.name = fileLogDemo
    log4j.appender.file.Threshold=DEBUG
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}[ %p ]%m%n
    log4j.appender.file.append = true
    
    #wdq下所有包的文件输出
    log4j.appender.wdq = org.apache.log4j.FileAppender
    log4j.appender.wdq.File = ${webApp.root}/wdq_logs/package_wdq.log
    log4j.appender.wdq.Encoding=UTF-8
    log4j.appender.wdq.name = fileLogDemo
    log4j.appender.wdq.Threshold=DEBUG
    log4j.appender.wdq.layout=org.apache.log4j.PatternLayout
    log4j.appender.wdq.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}[ %p ]%m%n
    log4j.appender.wdq.append = true
    log4j.properties是默认加载的文件名,如果要另外起名字,还需要在web.xml里面进行配置,如果是测试用的,最好用默认的名字,这跟Spring的Application.xml有点像。
    log4j.rootLogger = DEBUG,stdout,file中的DEBUG是日志输出优先级,从高到低依次为error,warn,info,debug,低级别的可以输出高级别的日志,如debug可以输出任何优先级的
    日志,但是info只能输出info,warn,error级别的日志。stdout,file这两个有点类似于变量名,可以自定义名称,可以用这两个东西进行控制台或者文件的输出。比如控制台的为
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender;保存为文件的为log4j.appender.file = org.apache.log4j.FileAppender。还有另外三种按天生成的,流形式生成的,
    滚动形式的,这里就不介绍了(反正我也忘了...),具体可以去官方文档看一下appender的几种输出形式。值得一提的是1.文件编码(Encoding):这个要定义为UTF-8不然输出到文件里面有时候部分类
    的编码不一致,有导致部分乱码。2.文件的名字和存储路径(File):如上,我写的是${webApp.root}/wdq_logs/package_wdq.log,这个其实是在web.xml里面定义好的。如果没有定义,那么
    将会输出到你项目的磁盘根目录。文件名的格式有常用的.log和.html,推荐用.log,方便项目里面的所有人查看。3.(追加方式append):设置属性为true,如果是false的话就会覆盖掉原先的日志而不是
    追加到后面。
    三.Junit的测试类的输出
    package cn.wdq.test;
    
    import org.apache.log4j.Logger;
    import org.junit.Test;
    
    public class LoggerTest {
        Logger logger= Logger.getLogger(LoggerTest.class);
        @Test
        public void printLogger(){
            logger.error("直接输出吧");
            try {
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    控制台输出效果

    文件输出效果


    四.web.xml的配置(非必要)
    <!--log4j-->
        <!--给日志配置路径-->
        <context-param>
            <param-name>webAppRootKey</param-name>
            <param-value>webApp.root</param-value>
        </context-param>
        <!--<context-param>
            <param-name>log4jConfigLocation</param-name>
            <param-value>classpath:log4j2.xml</param-value>
        </context-param>-->
        <listener>
            <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
        </listener>

    1.使用默认的名字(log4j.properties),就不用配置log4jConfigLocation(上面注释掉的部分)。不然就指定路径(log4j2.xml是我现在用不到的部分),我现在放的是在根目录,直接classpath:log4j2.xml。
    classpath是
    指定路径的格式,此外还有classpath.*:log4j2.xml。他们两个的区别是classpath是默认加载第一个,加载到就结束。classpath.*还会搜索后面还有没有匹配项。
    2.如果指定绝对路径就不用配置webAppRootKey,这个是把文件放到webapp下面的。value值可以自定义,但是name值只能是webAppRootKey。配置了之后就要配置listener监听,不然就忽略。
    官方的说的默认加载顺序为1.* 2.*(前面这两个我忘了...与java相关的就后面的两个)3.log4j.properties和3.log4j.xml。现在网上有很多老旧的文章是1.X的版本的xml配置方法。
    我这里要说的是2.X的。他们两者的区别如下
    1.X
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
    <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
      <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
        </layout>
      </appender>
      <category name="org.apache.log4j.xml">
        <priority value="info" />
      </category>
      <Root>
        <priority value ="debug" />
        <appender-ref ref="STDOUT" />
      </Root>
    </log4j:configuration>
    

      2.X

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration>
      <Appenders>
        <Console name="STDOUT" target="SYSTEM_OUT">
          <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
        </Console>
      </Appenders>
      <Loggers>
        <Logger name="org.apache.log4j.xml" level="info"/>
        <Root level="debug">
          <AppenderRef ref="STDOUT"/>
        </Root>
      </Loggers>
    </Configuration>
    

      

    五、Spring的db.config的配置(非必要)
    我是启用了mybatis和druid连接池,所以会加一句
    filters: stat,log4j

    这样可以监听到log4j日志。





  • 相关阅读:
    centOS7 安装docker
    go中json的tag使用
    secureCRT操作redis-cli时, 不断追加ip:port
    golang gorm框架的默认时区问题
    java Date 转mysql timestamp 秒数不一致
    golang sqlx查询时, struct字段冲突
    golang入门time与string转换, time加减时间, 两个时间差
    idea设置每次打开手动选择工作空间
    panic: reflect.Value.Interface: cannot return value obtained from unexported field or method
    Render函数(4):开发可进行排序的表格组件
  • 原文地址:https://www.cnblogs.com/coder-wdq/p/8097889.html
Copyright © 2020-2023  润新知