log4j2.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<!-- status="OFF"拌滋,可以去掉朴沿,它的含義為是否記錄log4j2本身的event信息,默認(rèn)是OFF -->
<configuration status="info" monitorInteval>
<!-- 定義下面的引用名 -->
<Properties>
<!--linux目錄 /logs -->
<!--<property name="basePath">/logs</property>-->
<property name="basePath">${sys:catalina.home}/logs/webchat</property>
<property name="rolling_pattern">%d{yyyy-MM-dd}-%i.gz</property>
<property name="every_file_size">10MB</property><!-- 日志切割的最小單位 -->
<property name="log_pattern">%d{yyyy-MM-dd HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n</property>
</Properties>
<!--先定義所有的appender -->
<appenders>
<!--這個輸出控制臺的配置 -->
<Console name="Console" target="SYSTEM_OUT" >
<!--控制臺只輸出level及以上級別的信息(onMatch)败砂,其他的直接拒絕(onMismatch) -->
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
<!--這個都知道是輸出日志的格式 -->
<PatternLayout pattern="${log_pattern}" charset="UTF-8"/>
</Console>
<!--這個會打印出所有的信息赌渣,每次大小超過size,則這size大小的日志會自動存入按年份-月份建立的文件夾下面并進(jìn)行壓縮昌犹,作為存檔 -->
<!-- 按月生成歸檔日志锡垄,可以使用 filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz" -->
<RollingFile name="RollingFile" fileName="${basePath}/sinter.log"
filePattern="${basePath}/sinter.log${rolling_pattern}" >
<PatternLayout pattern="${log_pattern}" charset="UTF-8"/>
<SizeBasedTriggeringPolicy size="${every_file_size}" />
</RollingFile>
<!--fileName com.sinter.interceptor.IndexInterceptor.java 方法日志 -->
<RollingFile name="InterceptorRollingFile" fileName="${basePath}/interceptor.log"
filePattern="${basePath}/sinter.log${rolling_pattern}" >
<PatternLayout pattern="${log_pattern}" charset="UTF-8"/>
<SizeBasedTriggeringPolicy size="${every_file_size}" />
</RollingFile>
<!--fileName com/sinter/controller/login/LoginController.java sendCode方法日志 -->
<!-- <File name="sendCodeFile" fileName="${basePath}/sendCode.log" append="false">
<PatternLayout pattern="${log_pattern}"/>
</File>-->
<RollingFile name="sendCodeRollingFile" fileName="${basePath}/sendCodeRollingFile.log" append="true"
filePattern="${basePath}/sendCodeRollingFile.log${rolling_pattern}">
<PatternLayout pattern="${log_pattern}" charset="UTF-8"/>
<Policies>
<SizeBasedTriggeringPolicy size="${every_file_size}"/>
<!-- 每天凌晨0點(diǎn) 匹配的所有文件在10天或更長時間內(nèi)將在翻滾時間刪除。-->
<CronTriggeringPolicy schedule="0 0 0 * * ?"/>
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="${basePath}" maxDepth="2">
<IfFileName glob="*.gz" />
<IfLastModified age="10d" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
</appenders>
<!--然后定義logger祭隔,只有定義了logger并引入的appender货岭,appender才會生效 -->
<loggers>
<!--建立一個默認(rèn)的root的logger路操,需要在root的level中指定輸出的級別, -->
<root level="INFO" >
<appender-ref ref="RollingFile" />
<appender-ref ref="Console" />
</root>
<!--將logger中的 additivity 屬性配置為 false千贯,則這個logger不會將日志流反饋到root中屯仗。-->
<Logger name="sendCodeLogger" additivity="false" level="INFO">
<!--<appender-ref ref="sendCodeFile" level="INFO" />-->
<appender-ref ref="sendCodeRollingFile" level="INFO" />
</Logger>
<Logger name="interceptorLogger" additivity="false" level="INFO">
<appender-ref ref="InterceptorRollingFile" level="INFO" />
</Logger>
</loggers>
</configuration>
java類中代碼片段如下
@Controller
@RequestMapping("/login")
public class LoginController extends BaseController{
static Logger sendCodeLogger = LogManager.getLogger("sendCodeLogger");
@RequestMapping(value = "/sendCode", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
@ResponseBody
public String sendCode(String phone,HttpServletRequest request) {
String result = "error";
try {
String ip = CommonUtil.getRemoteIp(request);
sendCodeLogger.info("###################ip為: "+ip);
Enumeration em = request.getParameterNames();
sendCodeLogger.info("###################開始記錄手機(jī)驗(yàn)證碼接口中的HttpServletRequest.getParameterNames");
while (em.hasMoreElements()) {
String name = (String) em.nextElement();
String value = request.getParameter(name);
sendCodeLogger.info("getParameter參數(shù):"+name+" = "+value);
}
sendCodeLogger.info("###################結(jié)束記錄getParameter參數(shù)");
...