slf4j初步使用之以当前登录用户命名文件名

    slf4j(simple logging facade for java)是Java的简单的日志门面,它不是具体的日志解决方案,它只服务于各种各样 slf4j-logo的日志系统。

    实际上,SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类。而在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算用那个具体的日志系统。只需要在项目中加入定的slf4j-logo.jar包就可以。这个和Spring的IOC思想有点像,想用哪个就用哪个,随意切换。

    使用slf4j这种记录日志的方式的特点很明显:1、如果我们需要记录的是底层类库或者组件这种东西,就可以不影响或强制要求用户选择哪种日志系统。2、如果我们用特定的日志系统写了代码,但是有一天要求换另一种日志系统,如果之前就用slf4j的api写的,那就很简单,但是如果用具体的一种方式写了以后,那在切换就很麻烦。

   SLF4J一般都是和logback.xml配合使用的,那我们来看看最基本的logback配置

  



    
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread] %class:%line >>
                %msg%n
            
            UTF-8
        
        
            info
        
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread] %class:%line >>
                %msg%n
            
            UTF-8 
        
    

    
        /opt/logs/insurance/infoInsure_sql.log
        
            /opt/logs/insurance/infoInsure.%d{yyyy-MM-dd}.log
        
        
            debug
        
        
            %date{yyyy-MM-dd HH:mm:ss}[%level][%thread][%logger:%line]-%mdc{client} %msg%n
            UTF-8
        
    


    
        /opt/logs/insurance/infoInsure.log
        
            /opt/logs/insurance/infoInsure.%d{yyyy-MM-dd}.log
        
        
            info
        
        
            %date{yyyy-MM-dd HH:mm:ss}[%level][%thread][%logger:%line]-%mdc{client} %msg%n
            UTF-8
        
    

    
        /opt/logs/insurance/errorInsure.log
        
            /opt/logs/insurance/errorInsure.%d{yyyy-MM-dd}.log
        
        
            ERROR
        
        
            %date{yyyy-MM-dd HH:mm:ss}[%level][%thread][%logger:%line]-%mdc{client} %msg%n
            UTF-8
        
    

    

        
    

    
        
        
        
    

以上配置信息中,我们只是控制输出了级别日志,像INFO,ERROR,WARING,当然,我们要做其他的操作就需要继续添加appender。

例如我们现在有一个需求,是需要生成登录用户自己的文件夹,方便开发员管理日志,那么我们就可以使用slf4j里的MDC实现。

当log使用了最外层的appender时可以使用mdc将一些值放在容器里,然后嵌套的那个appender就可以使用这个容器的值。下面来看具体代码的实现


SLF4J使用步骤

1》、在pom.xml内引入slf4j的jar包,和logback的包


    	ch.qos.logback
    	logback-classic
    	1.1.3
	
	
    	ch.qos.logback
    	logback-access
    	1.1.3
	
	
    	ch.qos.logback
    	logback-core
   	 	1.1.3
	
	
    	org.slf4j
    	slf4j-api
    	1.7.12
	
2》、在resource下新建logback.xml文件,最基本的配置我在上面已经贴出,这里就不重复了,我们具体来看我们要实现的

  
        
        	account
        	unknown
        
        
        	
        		${LOG_HOME}/${account}/login.log
        		true
        		
        			[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] --%mdc{client} %msg%n  
        		
        	
        
      

我们在一个appender里面嵌套了一个appender,主要实现的是我们在discriminator里的key,这个key是MDC里面的键值映射的键,那么我们在file里配置日志存放路径时,就可以使用变量形式来使用这个key的值了。我们在要打印日志类中,得到appender的name

private static final Logger login=LoggerFactory.getLogger("LoginInfoFile");
在需要输出日志的方法中,把我们登录的对象存进MDC中

MDC.put("account", gymOwner.getAccount());

然后输出日志

login.info("当前登录用户:"+gymOwner.getAccount());
		login.info("登录时间:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));

我们还需要声明logger,不然是不起作用的


     	
如果还要写其他相关 类的日志,只要在多写几个appender,然后把名字修改就可以了

执行完项目后现在我们在指定的路径内,就可以看到我们的日志文件了

slf4j初步使用之以当前登录用户命名文件名_第1张图片slf4j初步使用之以当前登录用户命名文件名_第2张图片

这样按照用户生成的日志文件夹就实现了,是不是很容易呢




你可能感兴趣的:(slf4j初步使用之以当前登录用户命名文件名)