温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

log4j2.xml中如何配置 logback

发布时间:2021-07-30 14:33:36 来源:亿速云 阅读:135 作者:Leah 栏目:大数据

这期内容当中小编将会给大家带来有关log4j2.xml中如何配置 logback ,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="off">

<Properties>
   <Property name="LOG_HOME">E:/logs</Property>
   <Property name="LOG_NAME">shou</Property>
   <Property name="LOG_PATTERN">%d|1771|shou||%p||%c|%m|%t||||%ex%n</Property>
</Properties>

<Appenders>
   <!--commented by ysma RFC5424是日志输出格式,通常会涉及日志服务器中template的配置
   <Syslog name="LBSYSLOG" format="RFC5424" host="10.40.16.62"
         port="515" protocol="TCP" appName="shou1771" messageId="shou"
         facility="LOCAL2" newLine="true" mdcId="mdc" includeMDC="true"
         newLineEscape="#NewLine#" exceptionPattern="%ex"
         immediateFlush="false" connectTimeoutMillis="3000" reconnectionDelayMillis="3000">
      <LoggerFields>
         <KeyValuePair key="syslogk1" value="%l"/>
         <KeyValuePair key="syslogk2" value="%X{syslogk2}"/>
         <KeyValuePair key="syslogk3" value="%X{syslogk3}"/>
         <KeyValuePair key="syslogk4" value="%X{syslogk4}"/>
         <KeyValuePair key="syslogk5" value="%X{syslogk5}"/>
      </LoggerFields>
   </Syslog>-->

   <!--打印日志到控制台-->
   <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="${LOG_PATTERN}"/>
   </Console>

   <!-- DEBUG日志格式 RollingFile 滚动日志的配置 filePattern需要%i 的关键字和 yyyy-MM-dd的格式 这样 DefaultRolloverStrategy 才能有效按天删除过期日志文件-->
   <RollingFile name="shou_debug_appender" fileName="${LOG_HOME}/${LOG_NAME}-debug.log"
             filePattern="${LOG_HOME}/${LOG_NAME}-debug.log.%d{yyyy-MM-dd}-%i.gz" append="true" immediateFlush="true">
      <Filters>
         <!-- 控制输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
         <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
      </Filters>
      <PatternLayout>
         <pattern>${LOG_PATTERN}</pattern>
      </PatternLayout>
      <Policies>
         <!--interval,表示多久滚动一次。默认是1 hour。modulate=true用来调整时间:比如现在是早上3am,interval是4,那么第一次滚动是在4am,接着是8am,12am...而不是7am    是基于时间的滚动 rollover-->
         <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
         <!--日志文件最大的大小 是基于大小的滚动  即超过500m就滚动一次日志-->
         <SizeBasedTriggeringPolicy size="500 MB"/>
      </Policies>
      <DefaultRolloverStrategy max="7"/>
   </RollingFile>

   <!-- INFO日志格式 -->
   <RollingFile name="shou_info_appender" fileName="${LOG_HOME}/${LOG_NAME}-info.log"
             filePattern="${LOG_HOME}/${LOG_NAME}-info.log.%d{yyyy-MM-dd}-%i.gz" append="true" immediateFlush="true">
      <Filters>
         <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
      </Filters>
      <PatternLayout>
         <pattern>${LOG_PATTERN}</pattern>
      </PatternLayout>
      <Policies>
         <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
         <SizeBasedTriggeringPolicy size="500 MB"/>
      </Policies>
      <!--保留7天的日志 默认也是保留7天-->
      <DefaultRolloverStrategy max="7"/>
   </RollingFile>

   <!-- ERROR日志格式 -->
   <RollingFile name="shou_error_appender" fileName="${LOG_HOME}/${LOG_NAME}-error.log"
             filePattern="${LOG_HOME}/${LOG_NAME}-error.log.%d{yyyy-MM-dd}-%i.gz" append="true" immediateFlush="true">
      <Filters>
         <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
      </Filters>
      <PatternLayout>
         <pattern>${LOG_PATTERN}</pattern>
      </PatternLayout>
      <Policies>
         <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
         <SizeBasedTriggeringPolicy size="500 MB"/>
      </Policies>
      <DefaultRolloverStrategy max="7"/>
   </RollingFile>

</Appenders>
<Loggers>
   <!-- 配置日志的根节点 Logger中没有明确指定输出路径的都会进入到root中依据level进行输出-->
   <Root level="INFO">
      <AppenderRef ref="shou_info_appender"/>
      <AppenderRef ref="shou_error_appender" />
   </Root>

   <!-- 第三方日志系统 additivity=false标识不走root模式输出日志, AppenderRef 指定了输出路径-->
   <Logger name="com.esup" level="DEBUG" additivity="false">
      <AppenderRef ref="shou_debug_appender"/>
      <AppenderRef ref="shou_info_appender"/>
      <AppenderRef ref="shou_error_appender"/>
   </Logger>
   <Logger name="com.shou" level="DEBUG" additivity="false">
      <AppenderRef ref="shou_debug_appender"/>
      <AppenderRef ref="shou_info_appender"/>
      <AppenderRef ref="shou_error_appender"/>
   </Logger>
</Loggers>
</Configuration>

logback配置样例

<?xml version="1.0" encoding="UTF-8"?>
<!--
scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
-->
<configuration scan="false" scanPeriod="60 seconds" debug="false">
    <!-- 定义日志的根目录 -->
    <property name="LOG_HOME" value="/home/lbyw/logs" />
    <!-- 定义日志文件名称(项目应用名称) -->
    <property name="appName" value="butt-service"/>
    <!-- 定义当前项目所属项目部门 -->
    <property name="projectDept" value="1771"/>
    <!-- ch.qos.logback.core.ConsoleAppender 表示控制台输出 -->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <!-- <pattern>%date [ %thread ] - [ %-5level ] [ %logger{50} : %line ] - %m%n</pattern> -->
            <pattern>%date|${projectDept}|${appName}|%X{logType}|%level|%X{traceId}|%logger|%message|%thread|%X{col2}|%X{col3}|%X{col4}|%exception%n</pattern>
        </layout>
    </appender>

    <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->  
    <appender name="appLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 指定日志文件的名称 -->
        <file>${LOG_HOME}/${appName}.log</file>
        <!--
		        当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名
		        TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动。
        -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--
			            滚动时产生的文件的存放位置及文件名称 %d{yyyy-MM-dd}:按天进行日志滚动 
			            %i:当文件大小超过maxFileSize时,按照i进行文件滚动
            -->
            <fileNamePattern>${LOG_HOME}/${appName}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <!-- 
			            可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每天滚动,
			            且maxHistory是365,则只保存最近365天的文件,删除之前的旧文件。注意,删除旧文件是,
			            那些为了归档而创建的目录也会被删除。
            -->
            <MaxHistory>365</MaxHistory>
            <!-- 
            	当日志文件超过maxFileSize指定的大小是,根据上面提到的%i进行日志文件滚动 注意此处配置SizeBasedTriggeringPolicy是无法实现按文件大小进行滚动的,必须配置timeBasedFileNamingAndTriggeringPolicy
            -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!--
			  日志输出格式:
			  timestamp|project|app|logtype|level|traceid|logger|msg|col1|col2|col3|col4|exception
			 
			  说明:
			  timestamp: 统一格式yyyy-MM-dd HH:mm:ss.SSS,如2018-08-20 00:00:01,095
			  project: 项目:1771/7881/uhaozu
			  app: 具体应用:www/order/intf
			  logtype: 日志种类,自定义名称,和col配合记录自定义信息
			  traceid: 唯一线程号,invokeNO
			  msg: log4j或logback输出的正文
			  exception: JavaStack
			  col1-col4:预留的4个字段,col1-col2是字符串,col3-col4是数字,内容自定义;
			 
			  特别说明:
			  logtype和col字段结合,可满足日志自定义的场景,前提是自己记住col的含义,如:
			     记录用户操作的耗时: logtype="useractiontime",col1=userid,col2="login",col3=0.5
			     记录某个重要方法的耗时:logtype="methodtime", col1=方法名称, col3=0.8
			     日志文件地址/home/lbyw/logs下
        -->    
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%date|${projectDept}|${appName}|%X{logType}|%level|%X{traceId}|%logger|%message|%thread|%X{col2}|%X{col3}|%X{col4}|%exception%n</pattern>
        </layout>
    </appender>
    

    <!-- 
		logger主要用于存放日志对象,也可以定义日志类型、级别
		name:表示匹配的logger类型前缀,也就是包的前半部分
		level:要记录的日志级别,包括 TRACE < DEBUG < INFO < WARN < ERROR
		additivity:作用在于children-logger是否使用 rootLogger配置的appender进行输出,
		false:表示只用当前logger的appender-ref,true:
		表示当前logger的appender-ref和rootLogger的appender-ref都有效
    -->
    <!-- SpringBoot的高级Profile功能 -->
    <springProfile name="dev">
	    <!-- Butt service logger -->
	    <logger name="com.liebao.butt" level="debug" additivity="false">
	    	<appender-ref ref="stdout" />
	    </logger>
	    <!-- SQL logger -->
	    <logger name="tk.mybatis.mapper.common.base" level="debug" additivity="false">
	    	<appender-ref ref="stdout" />
	    </logger>
	    <!-- Spring framework web logger -->
	    <logger name="org.springframework.web.servlet.DispatcherServlet" level="debug" additivity="false">
	    	<appender-ref ref="stdout" />
	    </logger>
	</springProfile>
    <!-- 
	    root与logger是父子关系,没有特别定义则默认为root,任何一个类只会和一个logger对应,
	    要么是定义的logger,要么是root,判断的关键在于找到这个logger,然后判断这个logger的appender和level。 
    -->
    <root level="info">
        <appender-ref ref="stdout" />
        <appender-ref ref="appLogAppender" />
    </root>
</configuration>

上述就是小编为大家分享的log4j2.xml中如何配置 logback 了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI