log4j2的一些配置,为某个类某个方法单独文件打印日志,定时删除日志
log4j2.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?> <!-- status="OFF",可以去掉,它的含义为是否记录log4j2本身的event信息,默认是OFF --> <configuration status="OFF"> <!-- 定义下面的引用名 --> <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大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 --> <!-- 按月生成归档日志,可以使用 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点 匹配的所有文件在10天或更长时间内将在翻滚时间删除。--> <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> <!--建立一个默认的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("###################开始记录手机验证码接口中的HttpServletRequest.getParameterNames"); while (em.hasMoreElements()) { String name = (String) em.nextElement(); String value = request.getParameter(name); sendCodeLogger.info("getParameter参数:"+name+" = "+value); } sendCodeLogger.info("###################结束记录getParameter参数");