log4j2.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!-- maven项目文件位置: src\main\resources -->
<!-- 全局异步 :log4j2.component.properties文件 添加 -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector -->
<!-- status="off" : 用于设置log4j自身内部运行日志输出(只输出到控制台),可以不设置  " -->
<!-- monitorInterval="1800" : Log4j能够自动检测修改配置文件和重新配置本身, 设置间隔秒数 -->
<configuration status="off">
	<properties>
		<!--变量定义 -->
		<property name="base_dir">${catalina.base}/logs/home/</property>
		
		<property name="base_dir_info_file_name">info</property>
		<property name="base_dir_error_file_name">error</property>
		<property name="base_dir_warn_file_name">warn</property>
		<property name="base_dir_rolling_file_name">rolling</property>
		<property name="base_dir_file_ext">.log</property>
		
		<property name="base_dir_file_old_name">-%d{yyyy-MM-dd-HH}_%i</property>
		<property name="base_dir_file_old_ext">.log.gz</property>
		
		<!-- 发送邮件 -->
		<property name="mail_subject">error log</property>
		<property name="mail_from">***@qq.com</property>
		<property name="mail_smtp_protocol">smtps</property>
		<property name="mail_smtp_host">smtp.qq.com</property>
		<property name="mail_smtp_port">465</property>
		<property name="mail_smtp_user_name">****</property>
		<property name="mail_smtp_password">****</property>
		<property name="mail_buffer_size">50</property>
		<property name="mail_to">***@qq.com</property>  <!-- 发送地址 -->
		<property name="mail_cc">***@qq.com</property>  <!-- 抄送地址 -->
		<property name="mail_reply_to">****@qq.com</property> <!-- 回复邮箱地址 -->
		<property name="mail_smtp_debug">false</property>
		
		<!--
           %d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间
           %t 输出当前线程名称
           %-5level 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
           %logger 输出logger名称,因为Root Logger没有名称,所以没有输出
           %p : 日志输出格式
           %c : logger的名称
           %m : 日志内容,即 logger.info("message")
           %n : 换行符
           %C : Java类名
           %L : 日志输出所在行数
           %M : 日志输出所在方法名
           %F :	输出所在的类文件名,如Client.java
           hostName : 本地机器名
           hostAddress : 本地ip地址
        -->
		<property name="log_pattern">hostAddress-%d [%t] %-5p %C %M %L -%m%n</property>
		<!-- 日志切割的最小单位 -->
		<property name="every_file_size">100M</property> 
	</properties>
	
	<appenders>
		<Console name="console" target="SYSTEM_OUT">
			<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
			<ThresholdFilter level="DEBUG" onMatch="ACCEPT" />  
      		<PatternLayout pattern="${log_pattern}"/>  
    	</Console>
    	
    	<!--<File>输出结果到指定文件</File>-->
        <!--<RollingFile>同样输出结果到指定文件,但是使用buffer,速度会快点</RollingFile>-->
        <!--filePattern:表示当日志到达指定的大小或者时间,产生新日志时,旧日志的命名路径。-->
        <!--PatternLayout:和log4j一样,指定输出日志的格式,append表示是否追加内容,值默认为true-->
    	<RollingFile name="infoFile" fileName="${base_dir}${base_dir_info_file_name}${base_dir_file_ext}" filePattern="${base_dir}${base_dir_info_file_name}${base_dir_file_old_name}${base_dir_file_old_ext}">
            <PatternLayout pattern="${log_pattern}" />
            <Filters>
            	<!-- 如果类中的日志是warn级别,则匹配第一个过滤器,被直接DENY(拒绝),不被记录到文件中 -->
                <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL" />
                
                <!-- 如果类中的日志是info级别,则不匹配第一个过滤器,由于采用的是中立的策略,会接着走到第二个过滤器,由 -->
                <!-- 于匹配第二个,且被accept,则该日志记录到info日志文件中。这样就实现的前面提到的不同级别日志输出到对 -->
                <!-- 应的日志文件中。 -->
                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>  
            
            <Policies>
            	<!-- 按天分 每隔24小时产生新的日志文件-->  
        		<!-- <TimeBasedTriggeringPolicy modulate="true" interval="1"/> -->
        		
        		<!-- 按文件大小分 -->
        		<SizeBasedTriggeringPolicy size="${every_file_size}" />  
        		<!-- 每隔24小时产生新的日志文件-->
        		<TimeBasedTriggeringPolicy/> 
    		</Policies>
    		
    		<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件 -->
    		<!-- 如果log4j2 记录的日志达到上限,旧的日志将被删除,腾出的空间用于记录新的日志 -->
            <DefaultRolloverStrategy max="20"/>          
        </RollingFile>
        
        <RollingFile name="warnFile" fileName="${base_dir}${base_dir_warn_file_name}${base_dir_file_ext}" filePattern="${base_dir}${base_dir_warn_file_name}${base_dir_file_old_name}${base_dir_file_old_ext}">
            <PatternLayout pattern="${log_pattern}" />
            <Filters>
                <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL" />
                <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            
            <Policies>
        		<TimeBasedTriggeringPolicy/>
        		<SizeBasedTriggeringPolicy size="${every_file_size}" />  
    		</Policies>
    		<DefaultRolloverStrategy max="20"/>
        </RollingFile>
        
        <RollingFile name="errorFile" fileName="${base_dir}${base_dir_error_file_name}${base_dir_file_ext}" filePattern="${base_dir}${base_dir_error_file_name}${base_dir_file_old_name}${base_dir_file_old_ext}">
            <PatternLayout pattern="${log_pattern}" />
            <Filters>
                <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <Policies>
        		<TimeBasedTriggeringPolicy/>
        		<SizeBasedTriggeringPolicy size="${every_file_size}" />  
    		</Policies>
    		<DefaultRolloverStrategy max="20"/>
        </RollingFile>
        
        <RollingFile name="rollingFile" fileName="${base_dir}${base_dir_rolling_file_name}${base_dir_file_ext}" filePattern="${base_dir}${base_dir_rolling_file_name}${base_dir_file_old_name}${base_dir_file_old_ext}">
            <PatternLayout pattern="${log_pattern}" />
            <Policies>
        		<TimeBasedTriggeringPolicy/>
        		<SizeBasedTriggeringPolicy size="${every_file_size}" />  
    		</Policies>
    		<DefaultRolloverStrategy max="20"/>
        </RollingFile>
        
         <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
         <!--  <File name="log" fileName="log/test.log" append="false">
             <PatternLayout pattern="${log_pattern}"/>
         </File> -->
         
         <!-- 按分钟分 -->
         <!-- <RollingRandomAccessFile name="_1min_appender" fileName="${MINUTE_HOME}/minute" filePattern="${MINUTE_HOME}/minute-%d{yyyy-MM-dd-HH-mm}.log">  
        	<PatternLayout pattern="%m%n"/>  
        	<Policies>  
    			<TimeBasedTriggeringPolicy interval="1" modulate="true" />  
			</Policies>  
   		</RollingRandomAccessFile> -->
   		
   		<!-- 发送邮件 -->
   		<SMTP name="Mail" subject="${mail_subject}" from="${mail_from}" to="${mail_to}" replyTo="${mail_reply_to}"  
         	 smtpProtocol="${mail_smtp_protocol}" smtpHost="${mail_smtp_host}" smtpPort="${mail_smtp_port}"
         	 smtpUsername="${mail_smtp_user_name}" smtpPassword="${mail_smtp_password}" smtpDebug="${mail_smtp_debug}" 
         	 bufferSize="${mail_buffer_size}" cc="${mail_cc}">
         	
    	</SMTP>
	</appenders>
	
	<loggers>
		<!-- 异步设置 -->
		<!-- 如果要加上位置信息比如哪个类,第几行,需要设置 includeLocation="true" -->
		<!-- 为Asynchronous Appenders 性能比同步快,比Asynchronous Loggers慢 -->
		<AsyncLogger name="AsyncMailLogger" level="ERROR" additivity="false" includeLocation="true">
			<AppenderRef ref="Mail"/>
		</AsyncLogger>
		<AsyncLogger name="AsyncRollingLogger" level="All" additivity="false" includeLocation="true">
			<AppenderRef ref="rollingFile"/>
		</AsyncLogger>
		
		<!-- Root level 是设置全局的信息显示级别 -->  
		<!-- 级别排序: All < Trace < Debug < Info < Warn < Error < Fatal < OFF -->
		<Root level="All">
			<AppenderRef ref="console"/>
			<AppenderRef ref="rollingFile"/>
			<AppenderRef ref="infoFile"/>
			<AppenderRef ref="warnFile"/>
			<AppenderRef ref="errorFile"/>
			<AppenderRef ref="Mail" level="Error"/>
		</Root>

		<!-- additivity="false" : 日志不再输出到控制台 -->
		<logger name="org.springframework" level="OFF" additivity="false"></logger>
		<logger name="org.apache.shiro" level="OFF" additivity="false"></logger>
       	<logger name="org.apache.http" level="OFF" additivity="false"/>
	</loggers>
</configuration>

<!-- 
FailoverAppender   维护一个队列,系统将尝试向队列中的Appender依次输出LogEvent,直到有一个成功为止	
					官方:故障切换应用程序重复一组追加器。 如果主Appender失败,则二级追加器将按顺序尝试,直到一个成功或没有更多次要尝试 

FileAppender   	普通地输出到本地文件 
					官方:FileAppender 是一个OutputStreamAppender,用于写入fileName参数中指定的文件。 
					FileAppender使用FileManager(扩展OutputStreamManager)来实际执行文件I / O。 
					虽然不能共享来自不同配置的FileAppender,但如果管理器可访问,则FileManager可以是。 
					例如,servlet容器中的两个Web应用程序可以有自己的配置,并且如果Log4j在两个共同的ClassLoader中,
					则可以安全地写入同一个文件
					
FlumeAppender		将几个不同源的日志汇集、集中到一处。
					官方:这是在单独的jar中提供的可选组件。
					是一个分布式,可靠和可用的系统,用于从大量不同的源有效地收集,聚合和移动大量日志数据到集中式数据存储。 
					FlumeAppender使用LogEvents并将其作为序列化Avro事件发送到Flume代理以供消费。
					Flume Appender支持三种操作模式。
					它可以充当远程Flume客户端,通过Avro将Flume事件发送到配置了Avro Source的Flume代理。
					它可以充当嵌入式Flume代理,其中Flume事件直接传递到Flume进行处理。
					它可以将事件持久化到本地BerkeleyDB数据存储,然后异步发送事件到Flume,类似于嵌入Flume代理,但没有大多数Flume依赖。
					作为嵌入式代理的用法将导致消息被直接传递到Flume信道,然后控制将立即返回到应用程序。
					所有与远程代理的交互都将异步进行。
					将“type”属性设置为“嵌入”将强制使用嵌入式代理。
					此外,在追加器配置中配置代理属性还将导致使用嵌入的代理。

JMSQueueAppender VS. JMSTopicAppender  与JMS相关的日志输出

RewriteAppender   对日志事件进行掩码或注入信息

RollingFileAppender 对日志文件进行封存(详细)

RoutingAppender  	在输出地之间进行筛选路由

SMTPAppender  		将LogEvent发送到指定邮件列表

SocketAppender  	将LogEvent以普通格式发送到远程主机

SyslogAppender  	将LogEvent以RFC 5424格式发送到远程主机

AsynchAppender   	将一个LogEvent异步地写入多个不同输出地

ConsoleAppender  	将LogEvent输出到命令行(控制台)  				
 -->






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值