(本次采用的日志框架是Logback)
logback配置如下`<?xml version="1.0" encoding="UTF-8"?>
CRSwi-Inspection-WebServer
<!-- 日志记录器,日期滚动记录 -->
<appender name="FILELOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<Prudent>true</Prudent>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/xxxxsystem/xxxx.%d{yyyy-MM-dd}.log</fileNamePattern>
<MaxHistory>60</MaxHistory>
</rollingPolicy>
<!-- 日志文件的格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- <pattern>%d{yyyy.MM.dd HH:mm:ss}+%5level+%msg+++%n</pattern>-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>info</level>
</filter>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!--encoder 默认配置为PatternLayoutEncoder-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
</appender>
<!--自定义用户日志-->
<appender name="yhlog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- <File>${LOG_PATH}/yhlog/xx.%d{yyyy-MM-dd}.log</File>-->
<append>true</append>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/test/xx_service_operation.%d{yyyy-MM-dd}.log</fileNamePattern>
<MaxHistory>60</MaxHistory>
</rollingPolicy>
<encoder>
<!--<pattern>%d{YYYY.MM.DD HH:mm:ss} %-5level %logger Line:%-3L - %msg%n</pattern>-->
<pattern> %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<logger name="yhlog" level="INFO">
<appender-ref ref="yhlog"/>
</logger>
<logger name="org.springframework" level="WARN" />
<logger name="org.mybatis" level="INFO" />
<logger name="org.apache.ibatis" level="INFO" />
<!-- 生产环境下,将此级别配置为适合的级别,以免日志文件太多或影响程序性能 -->
<!--控制输出日志级别-->
<root level="debug">
<appender-ref ref="FILELOG" />
<!-- 生产环境将请stdout,testfile去掉 -->
<appender-ref ref="STDOUT" />
</root>
//日志处理类如下`package com.example.demo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
-
Log工具类
-
@author
-
@ClassName:LogUtils.java
-
@FileName:com.wisesoft.common.utils.LogUtils
-
@date 2019年7月26日
-
modify history
*/
public class LogsUtils {private final static Logger LOGGER = LoggerFactory.getLogger(“yhlog”);
/**
- context 长度限制
/
public static Integer CONTEXT_LENGTH = 128;
/* - operationType 长度限制
/
public static Integer OPERATION_TYPE_LENGTH = 8;
/* - 日志类型 用户操作日志
/
public static String LOG_TYPE_USER = “1”;
/* - 日志类型 系统操作日志
/
public static String LOG_TYPE_SYS = “0”;
/* - 日志级别 错误
/
public static String LOG_LV_ERROR = “1”;
/* - 日志级别 警告
/
public static String LOG_LV_WARNING = “2”;
/* - 日志级别 通知为系统日志使用
/
public static String LOG_LV_SYSTEM = “3”;
/* - 日志级别 信息日志为用户操作日志记录
/
public static String LOG_LV_USER = “4”;
/* - 日志操作者 业务系统后台运行的服务日志,默认为“YD”
/
public static String LOG_OPERATOR_AUTO_NAME = “YD”;
/* - 成功
/
public static String LOG_SUCCESS = “成功+操作成功”;
/* - 失败
/
public static String LOG_FAIL = “失败+操作失败”;
/* - 操作对象标识
/
public static String LOG_OPERATOR_FLAG = “test”;
/* - 操作对象类型
*/
public static String LOG_OPERATOR_TYPE = “软件模块”;
public static void logUser( String operator, String lv, String context, String operationObject, String operationType, String operationFlag, String operationObjectType, String result) {
/* if(!check(lv,context,operationObject,operationType,result)){
return;
}*/
String softName = “test”;
String ip = “192.168.0.114”;
if (ip != null) {LogBo log = new LogBo(); SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); String s = format.format(new Date()); log.setTime(s); log.setType(LOG_TYPE_USER); log.setLv(lv); log.setContext(context); log.setSoftName(softName + "+cccc.service"); log.setIp(ip); log.setOperator(operator); log.setOperationFlag(operationFlag); log.setOperationObjectType(operationObjectType); log.setOperationType(operationType); log.setOperationObject(operationObject); log.setResult(result); // log.setOperationObject(operationObject); LOGGER.info(log.toString()); }
}
public static void logSystem(HttpServletRequest request, String operator, String lv, String context, String operationObject, String operationType, String operationFlag, String operationObjectType, String result) {
/* if(!check(lv,context,operationObject,operationType,result)){
return;
}*/
String softName = “test”;
// String ip= IPAddressUtils.getServerIPAddr(request);;
String ip = “192.168.0.114”;
if (ip != null) {
LogBo log = new LogBo();
SimpleDateFormat format = new SimpleDateFormat(“yyyy.MM.dd HH:mm:ss”);
String s = format.format(new Date());
log.setTime(s);
log.setType(LOG_TYPE_SYS);
log.setLv(lv);
log.setContext(context);
log.setSoftName(softName + “ccv.service”);log.setIp(ip); log.setOperator(""); log.setOperationFlag(operationFlag); log.setOperationObjectType(operationObjectType); log.setOperationType(operationType); log.setOperationObject(operationObject); log.setResult(result); // log.setOperationObject(operationObject); LOGGER.info(log.toString()); }
}
/**
- 日志参数校验
- @param lv
- @param context
- @param operationObject
- @param operationType
- @param result
- @return
/
private static boolean check(String lv, String context, String operationObject, String operationType, String result) {
/ if(StringUtils.isEmpty(lv) || StringUtils.isEmpty(context) || StringUtils.isEmpty(operationObject)
|| StringUtils.isEmpty(operationType) || StringUtils.isEmpty(result)){
return false;
}*/
if (context.length() > CONTEXT_LENGTH) {
return false;
} else if (operationType.length() > OPERATION_TYPE_LENGTH) {
return false;
}
return true;
}
public static void logformmethodUser(HttpServletRequest request, String operator, String lv, String operationObject, String result) {
/* if(!check(lv,context,operationObject,operationType,result)){
return;
}*/String ip = "192.168.0.114"; ; if (ip != null) { LogBo log = new LogBo(); SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); String s = format.format(new Date()); log.setTime(s); log.setType(LOG_TYPE_USER); log.setLv(lv); log.setSoftName("asbd"); log.setIp(ip); log.setOperator(operator); // log.setOperationType(operationType); log.setOperationObject(operationObject); log.setResult(result); // log.setOperationObject(operationObject); LOGGER.info(log.toString()); }
}
- context 长度限制
}
测试输出类
package com.example.demo;
/**
- @bz: LFL
- @date 2020/7/7 7:18
*/
public class logtest {
public static void main(String[] args) {
//String operator, String lv, String context, String operationObject, String operationType, String operationFlag, String operationObjectType, String result
LogsUtils.logUser("/",“erro”,“我草”,“张三”,“xxx”,“xxxx”,“c成功”,“失败”);
}
}
`
`