• log4j2----JAVA日志打印


    注意:本篇文章是以log4j2.x 为例的,并不是log4j 1.x

    log4j 就是log for java  , log4j已经被移植到了C,C++,C#,Perl,Python和Ruby等语言中

    一.首先下载去官网下载log4j的jar 包

    http://logging.apache.org/log4j/2.x/download.html

    一般来说:Source是源代码版,你需要自己编译成可执行软件。
                      Binary是可执行版,直接可以拿来用的,他已经给你编译好的版本

    二.下载后解压,找到log4j-core-2.11.1.jar 和log4j-api-2.11.1.jar 这两个jar包,主要是这两个包

    三.打开eclipse,新建最简单的java project

    然后右键项目Bulid Path---->Confirgure Bulid Path ---->Libraries---->Add External JARs,选择两个主要的jar包

    可以看到,加入jar包后 ,会自动添加一个Referenced Libraries的目录,既“引用的库”,里面就是加入的两个包

    四.在src下新建配置文件log4j2.xml

    <?xml version="1.0" encoding="UTF-8"?>    
    <configuration status="error">  
    <!--     先定义所有的appender -->  
        <appenders>  
    <!--         这个输出控制台的配置 -->  
            <Console name="Console" target="SYSTEM_OUT">  
    <!--             控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->  
                <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>  
    <!--             这个都知道是输出日志的格式 -->  
                <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>  
            </Console>  
    
    <!--         文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用 -->  
    <!--         append为TRUE表示消息增加到指定文件中,false表示消息覆盖指定的文件内容,默认值是true -->  
            <File name="log" fileName="log/test.log" append="false">  
                <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>  
            </File>  
    
    <!--          添加过滤器ThresholdFilter,可以有选择的输出某个级别以上的类别  onMatch="ACCEPT" onMismatch="DENY"意思是匹配就接受,否则直接拒绝  -->  
            <File name="ERROR" fileName="logs/error.log">  
                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>  
                <PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>  
            </File>  
    
    <!--         这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->  
            <RollingFile name="RollingFile" fileName="logs/web.log"  
                         filePattern="logs/$${date:yyyy-MM}/web-%d{MM-dd-yyyy}-%i.log.gz">  
                <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>  
                <SizeBasedTriggeringPolicy size="2MB"/>  
            </RollingFile>  
        </appenders>  
    
    <!--     然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->  
        <loggers>  
    <!--         建立一个默认的root的logger -->  
            <root level="trace">  
                <appender-ref ref="RollingFile"/>  
                <appender-ref ref="Console"/>  
                <appender-ref ref="ERROR" />  
                <appender-ref ref="log"/>  
            </root>  
    
        </loggers>  
    </configuration>  

     五.在src下新建一个package----log4j_test , 在log4j_test包下新建一个测试类common.java

    package log4j_test;
    import org.apache.logging.log4j.Level;
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
    public class common {
        private static Logger logger = LogManager.getLogger(common.class.getName());
        
        public static void main(String[] args) throws Exception {
            // 记录debug级别的信息  
            logger.debug("This is debug message.");  
            // 记录info级别的信息  
            logger.info("This is info message.");  
            // 记录error级别的信息  
            logger.error("This is error message."); 
        }
    }

    至此已经搭建完毕,项目结构图如下:

    最后:运行程序,可以看到console窗口输出:

    我们打开workspace,项目目录下,查看会发现多了两个文件夹 log,logs,里面会有test.log,web.log,error.log这几个文件,都是xml文件配置后自动输出的结果:

    常见报错:

    LogManger找不到类似的,应该都是包导入错误,应该是log4j2.x的版本,不要弄错

     

    简单说下log4j和log4j2的区别

    1.log4j的配置文件是log4j.properties,而log4j2的配置文件变成了log4j2.xml格式的

    2.log4j的只需引入一个jar包   log4j.1.x.xx.jar, 而log4j2则需要两个 log4j.core.xxx.jar和log4j.api.xxx.jar

    3.调用方式不一致:

    log4j:

    import org.apache.log4j.Logger;
    private final Logger LOGGER = Logger.getLogger(Test.class.getName());

    log4j2:

    import org.apache.logging.log4j.Level;
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    private static Logger logger = LogManager.getLogger(Test.class.getName());

    4.文件渲染:

    log4j想要生效,我们需要在web.xml中进行配置,而log4j2则不需要,只需要配置好log4j2.xml即可

     <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
      </listener> <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>classpath:config/log4j.properties</param-value>
      </context-param>
      <context-param>
        <param-name>log4jRefreshInterval</param-name>
        <param-value>60000</param-value>
    

    详细的区别可参考:www.cnblogs.com/williamjie/p/9197738.html

    未完待续.......

  • 相关阅读:
    electron调用c#动态库
    Mybatis使用自定义类型转换Postgresql
    Spring Boot Security And JSON Web Token
    从零开始把项目发布到NPM仓库中心
    从零开始把项目发布到Nuget仓库中心
    从零开始把项目发布到maven仓库中心
    vue项目中如何在外部js中例如utils.js直接调用vue实例及vue上挂在的方法
    vue单页应用在页面刷新时保留状态数据的方法
    Vue watch 监听复杂对象变化,oldvalue 和 newValue 一致的解决办法。
    vue项目的登录跳转代码
  • 原文地址:https://www.cnblogs.com/kevinWu7/p/10163480.html
Copyright © 2020-2023  润新知