按照需求自定义日志输出
(本次采用的日志框架是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成功”,“失败”);
}
}
`
`
按照需求自定义日志输出相关推荐
- HAproxy增加日志记录功能和自定义日志输出内容、格式
http://blog.51cto.com/eric1/1854574 一.增加haproxy日志记录功能 1.1 由于数据分析的需要,我们必须打开haproxy日志,记录相关信息. 在配置前,我 ...
- Python之向日志输出中添加上下文信息
除了传递给日志记录函数的参数(如msg)外,有时候我们还想在日志输出中包含一些额外的上下文信息.比如,在一个网络应用中,可能希望在日志中记录客户端的特定信息,如:远程客户端的IP地址和用户名.这里我们 ...
- log4j2日志输出到控制台-Maven工程
log4j2简介: Apache Log4j 2 is an upgrade to Log4j that provides significant improvements over its pred ...
- logrus包设置自定义日志格式
logrus内置的日志格式只有两种: logrus.TextFormatter:纯文本 logrus.JSONFormatter:JSON 源码中有这个接口: // The Formatter int ...
- log4j输出多个自定义日志文件、动态配置多个日志文件
转:http://blog.sina.com.cn/s/blog_8417657f0101lskw.html log4j的强大功能无可置疑,但实际应用中免不了遇到某个功能需要输出独立的日志文件的情况, ...
- golang xorm 自定义日志记录器,使用zap实现日志输出、切割日志
目录 1.准备并下载好需要的包 2. 连接postgresql数据库 3. zap日志工具 4.实现xorm 自定义日志记录器 5.使用 完整代码 1.准备并下载好需要的包 xorm.io/xorm ...
- slf4j-log4j12加log4j自定义配置包路径日志输出
项目日志在定位问题原因上起着重要的作用,有用的日志输出能提高解决问题的效率,所以日志配置还是很关键的,对一个项目来说有用的日志包路径一般都是项目自己包路径下的日志,集成的框架和依赖包中的包路径下的日志 ...
- 【超哥原创分享】自定义实现日志输出,抛弃任何依赖包,日志输出随心走,弃繁就简,简而不凡
简要说明: 现在日志输出框架太多,想找个简单的用用,结果没找到.日志输出中又不想做任何依赖处理,所以就自己做了一个日志输出.完整代码如下: package com.liangchao.luckdraw ...
- 基于.NetCore3.1系列 —— 日志记录之自定义日志组件
前言 回顾:日志记录之日志核心要素揭秘 在上一篇中,我们通过学习了解在.net core 中内置的日志记录中的几大核心要素,在日志工厂记录器(ILoggerFactory)中实现将日志记录提供器(IL ...
最新文章
- Promise入门详解和基本用法 我来教你
- JS获取iFrame的内容
- 最详细支付宝接口申请、使用!!!带详细流程--实践--支付宝当面付申请
- http工具类(支持https,连接池和失败重试)
- html表格边框设置波浪线,SVG CSS3 按钮悬停边线环绕+波浪线+选择框动效
- 如何获取字符串中某个具体的数值--通过json.load转化成字典形式获取
- 会导致所有者权益减少的项目是_处置固定资产而发生的净损失为什么会导致所有者权益减少...
- mysql环境搭载后老出错_使用Docker在window10下搭建SWOFT开发环境,mysql连接错误
- htmlunit爬取js异步加载后的页面
- BJOI2018 简要题解
- 服务器是什么?本机服务器的查询。
- java速成 转载lvsi
- 京东T9架构师手把手教你怎么写年薪50万的java简历
- 修改华为 Echolife HG8010h 的超级用户密码
- 图书信息管理系统(SSM框架)
- Web.xml 错误或异常页面配置
- directx安装后找不到_如何下载,安装,更新到最新的DirectX
- TCP/IP卷一:20---链路层之(环回地址)
- 联表查询求和的一些问题
- windows下安装kafka总结
热门文章
- Python问题:bash: syntax error near unexpected token `newline'
- 小白知识之:聊聊显卡(功能,分类,原理,接口,性能评价)
- STM32+AS608指纹模块
- React教程(详细版)
- [源码和文档分享]使用TransparentBlt函数实现绘制透明位图
- 越来越好用的免费办公软件,在NAS上体验Docker版ONLYOFFICE Docs的新功能
- addslashes是用PHP,如何在PHP中使用addslashes()函数?
- Manjaro开机挂载NTFS硬盘
- 双11,美的、格力们又盯上了厨房小家电
- 机器人学中的状态估计学习笔记(二)第三章线性高斯系统的状态估计