log4j2的使用

1.快速使用

导入依赖

		<!-- Web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions><!-- 去掉springboot默认配置logback -->
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
		 <!-- 引入log4j2依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
		<!-- 异步日志 -->
        <dependency>
          <groupId>com.lmax</groupId>
          <artifactId>disruptor</artifactId>
          <version>3.4.2</version>
        </dependency>

 导入log4j2.xml到resources目录下

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<appenders>
		<!-- 控制台输出的日志格式 -->
		<console name="Console" target="SYSTEM_OUT">
			<PatternLayout
					pattern="%d{HH:mm:ss} %-5level %class %L %M -- %msg%n" />
		</console>
		<!-- fileName:输出路径 filePattern:命名规则 -->
		<!-- name 配置的名字,唯一 -->
		<!-- 这个配置的作用,是指定 DEBUG级别的日志,输出到对应文件中-->
		<RollingFile name="RollingFileDebug"
					 fileName="D:/logs/debug.log"
					 filePattern="D:/logs/$${date:yyyy-MM-dd}/debug-%d{yyyy-MM-dd}-%i.log">
			<Filters>
				<!--Filters决定日志事件能否被输出。过滤条件有三个值:ACCEPT(接受), DENY(拒绝) or NEUTRAL(中立).-->
				<!--如果接受/拒绝,日志到这里就会记录,然后结束,如果是中立,则会继续记录.-->
				<!--
					level:将被过滤的级别。
					onMatch:默认值是NEUTRAL
					onMismatch:默认是DENY
				-->
				<!-- 过滤的日志级别是debug-->
				<ThresholdFilter level="DEBUG"/>
				<!-- 如果当前记录的日志级别>info则返回 onMatch 的值,小于info则onMismatch 的值-->
				<ThresholdFilter level="INFO" onMatch="DENY" onMismatch="NEUTRAL" />
			</Filters>
			<!-- 输出格式 -->
			<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %class{36} %L %M - %msg%n" />

			<Policies>
				<!-- 单个日志文件的大小限制 -->
				<SizeBasedTriggeringPolicy size="100 MB" />
			</Policies>
			<!-- 最多保留20个日志文件 -->
			<DefaultRolloverStrategy max="20" />
		</RollingFile>

		<RollingFile name="RollingFileInfo"
					 fileName="D:/logs/info.log"
					 filePattern="D:/logs/$${date:yyyy-MM-dd}/info-%d{yyyy-MM-dd}-%i.log">
			<Filters>
				<ThresholdFilter level="INFO" />
				<ThresholdFilter level="WARN" onMatch="DENY"
								 onMismatch="NEUTRAL" />
			</Filters>
			<!-- 输出格式 -->
			<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" />
			<Policies>
				<!-- SizeBasedTriggeringPolicy单个文件的大小限制 -->
				<SizeBasedTriggeringPolicy size="100 MB" />
			</Policies>
			<!-- DefaultRolloverStrategy同一个文件下的最大文件数 -->
			<DefaultRolloverStrategy max="20" />
		</RollingFile>

		<RollingFile name="RollingFileWarn"
					 fileName="D:/logs/warn.log"
					 filePattern="D:/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
			<Filters>
				<ThresholdFilter level="WARN" />
				<ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL" />
			</Filters>
			<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" />
			<Policies>
				<!--<TimeBasedTriggeringPolicy modulate="true" interval="1"/> -->
				<SizeBasedTriggeringPolicy size="100 MB" />
			</Policies>
			<!--最多保留20个日志文件 -->
			<DefaultRolloverStrategy max="20" min="0" />
		</RollingFile>

		<RollingFile name="RollingFileError"
					 fileName="D:/logs/error.log"
					 filePattern="D:/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
			<Filters>
				<ThresholdFilter level="ERROR" />
				<ThresholdFilter level="FATAL" onMatch="DENY" onMismatch="NEUTRAL" />
			</Filters>
			<PatternLayout attern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" />
			<Policies>
				<!--<TimeBasedTriggeringPolicy modulate="true" interval="1"/> -->
				<SizeBasedTriggeringPolicy size="100 MB" />
			</Policies>
			<!--最多保留20个日志文件 -->
			<DefaultRolloverStrategy max="20" min="0" />
		</RollingFile>
	</appenders>

	<loggers>
		<!-- 设置当前的默认日志级别-->
		<root level="INFO">
			<!--配置生效的位置,如果不配置则不输出-->
			<appender-ref ref="Console"/>
			<appender-ref ref="RollingFileDebug"/>
			<appender-ref ref="RollingFileInfo"/>
			<appender-ref ref="RollingFileWarn"/>
			<appender-ref ref="RollingFileError"/>
		</root>
		<!--额外配置的logger-->
		<!--记录druid-sql的记录-->
		<logger name="druid.sql.Statement" level="debug" additivity="false">
			<appender-ref ref="druidSqlRollingFile"/>
		</logger>
		<!-- log4j2自带的过滤标签,额外指定 特定包的日志级别 -->
		<logger name="org.springframework.web" level="error"></logger>
		<logger name="org.springframework.core" level="error"></logger>
		<logger name="org.springframework.beans" level="error"></logger>
		<!--异步日志配置-->
		<!--<AsyncLogger name="org.springframework" level="info" includeLocation="true">
		<AppenderRef ref="RollingFileError"></AppenderRef>
		</AsyncLogger>
		<AsyncLogger name="org.mybatis" level="error" includeLocation="true">
		<AppenderRef ref="RollingFileError"></AppenderRef>
		</AsyncLogger>
		<AsyncLogger name="com.alibaba.druid" level="error"  includeLocation="true">
		<AppenderRef ref="RollingFileError"></AppenderRef>
		</AsyncLogger>

		<AsyncRoot level="debug" includeLocation="true">
		<appender-ref ref="Console"/>
		<appender-ref ref="RollingFileInfo"/>
		<appender-ref ref="RollingFileWarn"/>
		<appender-ref ref="RollingFileError"/>
		</AsyncRoot>-->
	</loggers>
</configuration>

log4j2在开发中一般使用同步日志;上线改为异步日志。 由于开发的时候会不停重启服务器,这时异步线程可能会出现数据丢失。

2.符号说明

PatternLayout格式化符号说明:
%p 或 %level:输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL。
%d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。
%r:输出自应用程序启动到输出该log信息耗费的毫秒数。
%t:输出产生该日志事件的线程名。
%class:输出日志信息所属的类目,通常就是所在类的全名。
%M:输出产生日志信息的方法名。
%F:输出日志消息产生时所在的文件名称。
%L:输出代码中的行号。
%m 或%msg或%message::输出代码中指定的具体日志信息。
%n:输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”。
%x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%:输出一个“%”字符。
另外,还可以在%与格式字符之间加上修饰符来控制其最小长度、最大长度、和文本的对齐方式。如:
1)%-20:“-”号表示左对齐,不满足20个字符则以空格代替。
2)%.30:指定输出category的名称,最大的长度是30,如果category的名称长度大于30的话,就会将左边多出的字符截掉,但小于30的话也不会补空格。

3.异常之后发送邮件

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

 spring:  
  mail:
    protocol: smtp
    host: smtp.163.com
    port: 465
    username: 19937782588@163.com
    password: SYRZLRNOCSLFQJKA
    properties:
      mail:
        smtp:
          auth: true
          ssl:
            enable: true

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<appenders>
		<!--  name 标签名字
			subject 邮件标题
			to:发送给谁,多个人用,分隔  aaa@163.com,bbb@qq.com
			from:发送邮件的账户  (需要在邮箱后台,设置中,开启SMTP服务)
			smtpProtocol  smtp 发送的协议
			smtpUsername  发送账号
			smtpPassword  发送密码
			smtpHost  服务器地址:
								POP3服务器: pop.163.com
								SMTP服务器: smtp.163.com
								IMAP服务器: imap.163.com
			smtpPort 发送端口, 163的是465  加上会报错 Got bad greeting from SMTP host smtp.163.com, port 465 , response [EOF]

		-->
		<SMTP name="Mail"
              subject="异常信息[%p]"
              to="chengdujavasm@126.com"
              from="19937782588@163.com"
              smtpPassword="SYRZLRNOCSLFQJKA"
              smtpUsername="19937782588@163.com"
              smtpProtocol="smtp"
              smtpHost="smtp.163.com"
              bufferSize="10"
              ignoreExceptions="false"
              smtpDebug="true"
        >
            <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout>
                <pattern>%d %p [%C] [%t] [%l] %m%n</pattern>
            </PatternLayout>
        </SMTP>
	</appenders>

	<loggers>
		<!-- 设置当前的默认日志级别-->
		<!-- 默认是SpringBoot下所有包生效-->
		<root level="INFO">
			<!--配置生效的位置,如果不配置则不输出-->
			<appender-ref ref="Console"/>
			<appender-ref ref="RollingFileDebug"/>
			<appender-ref ref="RollingFileInfo"/>
			<appender-ref ref="RollingFileWarn"/>
			<appender-ref ref="RollingFileError"/>
		</root>
		<!--单独配置 自己的包-->
        <logger name="com.javasm" level="debug" additivity="true">
            <!--输入日志到邮件-->
            <appender-ref ref="Mail" level="error"/>
        </logger>
	</loggers>
</configuration>

 

 

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值