• slf4+log4j2简单配置


    在网上看了好多的,还没有完全了解门面日志,简单的配置了一下,到是能用,以后再慢慢积累。闲话少说,直接上代码:

    1.导包

        <!-- 
                    引入slf4j的核心包
            url:::https://mvnrepository.com/artifact/org.slf4j/slf4j-api 
         -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>
    
        <!-- 
                    引入slf4j对应log4j2的中间件
            url:::https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl
         -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <scope>runtime</scope>
            <version>2.11.0</version>
        </dependency>
    
        <!-- 
                    引入log4j2核心包
            URL::https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core
         -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <scope>runtime</scope>
            <version>2.11.0</version>
        </dependency>

    2.配置文件,文件名log4j2.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE xml>
    
    <!-- status="OFF",可以去掉,它的含义为是否记录log4j2本身的event信息,默认是OFF -->
     <configuration status="OFF">
         <!-- 日志文件位置及名称 -->
         <Properties>
             <!-- 日志名称 -->
             <Property name="infoLog">info.log</Property>
             <Property name="errorLog">error.log</Property>
             
             
             <!-- 日志位置 -->
             <!-- 日志位置在tomcat根目录下 -->
             <!-- <Property name="tomcatClasspath" >${sys:catalina.home}/logInfo</Property> -->
             <!-- 日志位置在自定义磁盘位置 -->
             <Property name="tomcatClasspath" >C:/Users/Administrator/Desktop/logInfo</Property>
             <!-- 日志位置在eclipse根目录下 -->
             <!-- <Property name="tomcatClasspath" >logInfo</Property> -->
         </Properties>
         
         <!-- 输出终端配置 -->
         <appenders>
             <!-- 1.输出控制台的配置 target有两种输出方式:SYSTEM_OUT(默认)、SYSTEM_ERR    -->
             <Console name="Console" target="SYSTEM_ERR">
                 <!-- 控制台只输出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>
             
             <!-- 2.将日志保存到指定文件 -->
             <!-- append属性,每次运行tomcat时是否覆盖指定的日志文件(TRUE表示消息增加到指定文件中,false表示消息覆盖指定的文件内容,默认值是true) -->
             <File name="errorFile" fileName="${tomcatClasspath}/${infoLog}" append="true">
                 <!--  添加过滤器,可以有选择的输出类别; 将level及其以上级别的日志(onMatch)保存到指定文件,其他级别的直接拒绝(onMismatch) -->
                 <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
                 <!-- 保存日志的格式:        年-月-日       at  时分秒  时区 日志级别 类的完全限定名 所在行 所在方法 - 具体日志信息-->
                 <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
             </File>
             
             <!-- 这个会打印出所有信息,每次大小超过 size,则这size大小的日志会自动存入按年份-月份 建立的文件夹下面并进行压缩,作为存档 -->
             <!-- filePattern:压缩后的文件路径 -->
             <RollingFile name="RollingFile" fileName="${tomcatClasspath}/${errorLog}" filePattern="${tomcatClasspath}$${date:yyyy-MM}/app-%d{yyyyMMddHHmmssSSS}.log.gz" immediateFlush="true">
                 <!-- 日志输出格式 -->
                 <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS z} %-5level %class{36} %L %M - %msg%xEx%n"/>
                 <!-- 日志文件大小(256KB  或  1MB) -->
                 <SizeBasedTriggeringPolicy size="128KB"/>
                 <!-- 最多保留文件数 -->
                 <DefaultRolloverStrategy max="2"/>
             </RollingFile>
             
             
         </appenders>
         
        <!-- logger配置,只有定义了logger并引入的appender,appender才会生效 -->
        <loggers>
            <!--建立一个logger,此logger监听name对应的包名下的日志输出,level表示日志级别-->
            <!-- <Logger name="com.goatherd.erp.ssm.controller" level="trace" additivity="true">
                <AppenderRef ref="Console" />
            </Logger> -->
        
            <!--建立一个logger,此logger监听name对应的包名下的日志输出,level表示日志级别-->
            <!-- <Logger name="com.goatherd.erp.ssm.controller" level="info" additivity="true">
                <AppenderRef ref="errorFile" />
            </Logger> -->
        
            <!-- 将业务dao接口填写进去,并用控制台输出即可,这样只要调用到该包下的dao就会在控制台输出,适合测试用 -->
            <logger name="com.goatherd.erp.ssm.dao" level="TRACE" additivity="false">
                <appender-ref ref="Console" />
            </logger>
            
            <!-- 建立一个默认的root的logger。 -->
            <!-- 如果没有这个Root也会保存,所以不是很明白这个的作用。 -->
            <!-- 如果Root中引用的和Logger中引用的重复,则日志记录也会重复。 -->
            <!-- 属性level是日志的级别,level将和引用里的级别组合使用(level高于引用中的级别则按照此level,level低于引用中的级别则按引用中的级别)-->
            <Root level="trace">
                <!-- <AppenderRef ref="Console" /> -->
                <AppenderRef ref="errorFile" />
                <AppenderRef ref="RollingFile" />
            </Root>
        </loggers>
     </configuration>

    3.Controller测试

        Logger logger = LoggerFactory.getLogger(LoginController.class);
        @Resource
        private TestDao testDao;
        @RequestMapping("/login.do")
        @ResponseBody
        public JsonResult login(String username,String password,String randomcode,HttpServletRequest request) {
            String[] err = null;
            try {
                String a = err[0];
            } catch (Exception e1) {
                logger.error(e1.getMessage(),e1);
                logger.info(e1.getMessage(),e1);
            }
            System.out.println("登录 。。。。。。");
            logger.trace("trace---1");
            logger.debug("debug---2");
            logger.info("info-----3");
            logger.warn("warn-----4");
            logger.error("error---5");
            testDao.selectUserInfo();
            Subject subject = SecurityUtils.getSubject();
            AuthenticationToken token = new UsernamePasswordToken(username, password);
            String msg = null;
            int state = 0;
            try {
                subject.login(token);//执行认证操作. 调用realm
            }catch(UnknownAccountException u){
                msg = "账号错误";state = 1;
            }catch(IncorrectCredentialsException i){
                msg = "密码错误";state = 1;
            }catch (AuthenticationException e) {
                msg = "认证失败";state = 1;
            }  
            return new JsonResult(state,null,msg);
        }

    4.junit测试类

    public class TestDAO {
        private TestDao testDao;
        
        private ApplicationContext config;
        @Before
        public void init(){
            String[] conf = {"config/spring-mvc.xml", "config/spring-mybatis.xml"};
            config = new ClassPathXmlApplicationContext(conf);  
        }  
        @Test
        public void test01() {
            testDao = config.getBean("testDao",TestDao.class);
            System.out.println(testDao.selectUserInfo());
    //这里测试的话就会将SQL打印出来了 } }

     5.文件位置

       5.1如果文件放在resource的根目录下,则不需要配置

       5.2如果文件放在resource的其他目录下,在web.xml中配置

      <!-- log4j2配置文件的位置i -->
      <context-param>  
        <param-name>log4jConfiguration</param-name>  
        <param-value>classpath:config/log4j2.xml</param-value>  
      </context-param> 
      
     <listener>
        <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
     </listener>

      但是需要增加一个jar包:

        <!-- 
            用于解决web环境下关闭服务器时可能出现的log4j线程无法及时关闭的warn,web工程需要包含log4j-web,非web工程不需要
            https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-web
         -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-web</artifactId>
            <scope>runtime</scope>
            <version>2.11.0</version>
        </dependency>
  • 相关阅读:
    【转载】区间DP
    基础DP的一些知识总结(未完成)
    POJ2718 递归套递归
    Hadoop Illuminated——Chapter4 BigData
    Hadoop Illuminated——Chapter3 Why do I Need Hadoop?
    一条SQL语句是怎么执行的
    Github 《算法竞赛进阶指南》资源
    Hadoop——搭建Hadoop的全分布模式
    Hadoop——免密码登陆的原理和配置
    洛谷——排序P1781宇宙总统
  • 原文地址:https://www.cnblogs.com/goatherd/p/11543697.html
Copyright © 2020-2023  润新知