先把日志配置文件logback.xml贴出来:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 -->
<substitutionProperty name="LOG_HOME" value="/app/ntytest/logs/" />
<property name="log.root.level" value="DEBUG" /> <!-- 日志级别 -->
<property name="log.other.level" value="INFO" /> <!-- 其他日志级别 -->
<property name="log.base" value="logs" /> <!-- 日志路径 -->
<!-- 模块名称, 影响日志配置名,日志文件名 -->
<property name="log.moduleName" value="ntytest" />
<property name="log.max.size" value="100MB" /> <!-- 日志文件大小 -->
<contextName>ntytest</contextName>
<jmxConfigurator />
<!-- 配置控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern><![CDATA[%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] [%X{lsf.requestNo}|%X{lsf.consumerIp}] %logger{56}.%method\(\):%L - %msg%n]]></pattern>
</layout>
</appender>
<!-- 按照每天生成日志文件,当日志文件大小超过1024M,则新建一个 -->
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoding>UTF-8</encoding>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名 -->
<FileNamePattern>${LOG_HOME}/NTY-CORE-SERVER-%d{yyyy-MM-dd}-%i.log
</FileNamePattern>
<!--日志文件保留天数 -->
<MaxHistory>30</MaxHistory>
<TimeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<MaxFileSize>1024MB</MaxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:
级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} |%-5level |NTY|NA|%thread|
%logger{50} -
%msg%n</pattern>
</encoder>
</appender>
<!-- 配置错误日志,filter设置日志级别为ERROR -->
<appender name="ERROR-FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoding>UTF-8</encoding>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名 -->
<FileNamePattern>${LOG_HOME}/NTY-CORE-ERROR-%d{yyyy-MM-dd}-%i.log
</FileNamePattern>
<!--日志文件保留天数 -->
<MaxHistory>30</MaxHistory>
<TimeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<MaxFileSize>1024MB</MaxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:
级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} |%-5level |NTY|NA|%thread|
%logger{50} -
%msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 配置monitor日志,主要用于公司发送告警邮件,设置logger即可,
调用:Logger logger = LoggerFactory.getLogger("MONITOR");
就能把日志打印到monitor文件中。
-->
<appender name="MONITOR-FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoding>UTF-8</encoding>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名 -->
<FileNamePattern>${LOG_HOME}/NTY-CORE-MONITOR-%d{yyyy-MM-dd}-%i.log
</FileNamePattern>
<!--日志文件保留天数 -->
<MaxHistory>30</MaxHistory>
<TimeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<MaxFileSize>1024MB</MaxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:
级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} |%-5level |NTY|NA|%thread|
%logger{50}|NA|
%msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 配置monitor日志输出 -->
<logger name="MONITOR">
<appender-ref ref="MONITOR-FILE" />
</logger>
<!-- root也是一个<logger>元素,只是这个是根,默认日志输出到此appender-ref文件中 -->
<root level="${log.level}">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
<appender-ref ref="ERROR-FILE" />
</root>
</configuration>
上述log代码配置了三种日志文件,分别是普通日志FILE,错误日志ERROR-FILE和告警日志MONITOR。采用RollingFileAppender滚动记录文件,先把日志记录到指定文件,当满足条件时,记录到其他文件。
java代码中调用为:
private final static Logger logger = LoggerFactory
.getLogger(EmailSendServcieImpl.class);
private final static Logger monitor = LoggerFactory
.getLogger("MONITOR");
monitor.warn("无模板单邮件发送|failure|" + (endTime - startTime) + " ms|
非法Email地址!serialNoI=" + serialNoI);
logger.warn(NTYErrorCode.NTY_ERROR_EMAIL_ADDR.getCode() + "非法Email地址:" + email1);
输出目录结构为: