logback 中配置不同请求打印不同日志以及输出到不同的文件中去

需求:

公司为了给某个项目统一的日志信息,要求其其它所有项目把被请求的地址相关信息,单独输出到某些日志中,,原来的日志格式还不能变,但是新的日志格式和原来的日志格式不一样呀,我的大哥

以前都没有管过日志的配置,现在这个事情让我做,一脸懵逼,但是活还得干!!!!

网上到处搜找不到答案,看原来的日志以及debug到logback源码中找到的解决答案
其实很简单,真的,我这里只是详细列出具体解决方式,如果需要具体了解logback中各个配置的含义,移步这篇文章Java日志框架:logback详解

解决方式如下:

原来的logback.xml 格式如下


<configuration scan="true" scanPeriod="60 seconds" >
	
	
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>[${server-name}] %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level [%logger] %msg%npattern>
			<charset>UTF-8charset>  
		encoder>
	appender>
	
	
    <appender name="FILE_DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
	    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>/home/app/logs/${server-name}-debug-%d{yyyy-MM-dd}.logfileNamePattern>
            
            <maxHistory>30maxHistory>
        rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%npattern>
            <charset>UTF-8charset>
        encoder>
  appender>
  
    <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
  
    	<filter class="ch.qos.logback.classic.filter.ThresholdFilter">   
	      <level>INFOlevel>   
	    filter> 
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>/home/app/logs/${server-name}-info-%d{yyyy-MM-dd}.logfileNamePattern>
            
            <maxHistory>45maxHistory>
        rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%npattern>
            <charset>UTF-8charset>
        encoder>
    appender>
  
    <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
    	<filter class="ch.qos.logback.classic.filter.ThresholdFilter">   
	      <level>ERRORlevel>   
	    filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>/home/app/logs/${server-name}-error-%d{yyyy-MM-dd}.logfileNamePattern>
            <maxHistory>60maxHistory>
        rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [${server-name}] [%thread] %-5level %logger - %msg%npattern>
            <charset>UTF-8charset>
        encoder>
    appender>
	<root level="debug">
		<appender-ref ref="STDOUT" />
		<appender-ref ref="FILE_INFO" />
		<appender-ref ref="FILE_DEBUG" />
		<appender-ref ref="FILE_ERROR" />
	root>

configuration>

只需要在原来的 子节点加
如下代码即可




	<appender name="REQUEST_PATH_STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>[${server-name} %d{yyyy-MM-dd HH:mm:ss.SSS}] |pattern>
			<charset>UTF-8charset>  
		encoder>
	appender>
	
<appender name="REQUEST_PATH" class="ch.qos.logback.core.rolling.RollingFileAppender">
    	<filter class="ch.qos.logback.classic.filter.ThresholdFilter">   
	      <level>ERRORlevel>   
	    filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>/home/app/logs/request/request_path-%d{yyyy-MM-dd}.logfileNamePattern>
            <maxHistory>60maxHistory>
        rollingPolicy>
        <encoder>
            <pattern>[${server-name} %d{yyyy-MM-dd HH:mm:ss.SSS}] |pattern> 
            <charset>UTF-8charset>
        encoder>
		
        <logger name="OAMH_PC_OPERATION" level="info" additivity=false>
        	<appender-ref ref="REQUEST_PATH"/>
        	<appender-ref ref="REQUEST_PATH_STDOUT"/>
    	logger>
    appender>

因为我要打的日志是所有请求地址的,所以我直接写了一个aop 动态代理到requestMapping上面来就可以了,,然后在我的Aop类中加上这样一行代码

   Logger logger = LoggerFactory.getLogger("OAMH_PC_OPERATION");

这样,通过这个logger输出的日志就是按照我们新需求来输入的,对原来的输出方式一点影响都没有。

如果你仔细的学习过logback, 当接手到这个需求是不是觉得很简单很简单

最后也是最重要的,

通过这个事情给我了一个暗示,那就是如果接手了一个自己不了解的技术,或者知识点,首先要把这个知识点搞懂了,再下手操作,就会很简单,不然的话,真不知道该如何下手

你可能感兴趣的:(javaWeb,logback)