100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > layui自定义模块 日志打印使用 layui文件上传云服务器

layui自定义模块 日志打印使用 layui文件上传云服务器

时间:2020-05-30 00:11:27

相关推荐

layui自定义模块 日志打印使用 layui文件上传云服务器

1.layui自定义模块:方便接口调用

​ 异步请求url地址不方便

​ 解决:扩展模块

​ 1):定义对应js文件 ja>lay-module创建http目录创建http.js文件

​ 2):lay-config.js文件中引入模板

​ 3):页面使用引入js文件

不适用组件引入url方式,更简单

​ 1).js文件下创建http.js文件

const $api="http://localhost:8070/"

​ 2).使用

​ 引入js文件路径。url路径为 url:$api+’…’

2.layui文件上传 参考码云代码

使用fastDBS:轻量式分布式文件系统

layui具有文件上传组件

var uploadInst = upload.render({elem:"#test1",//绑定元素url:$api+"/img/uploadIma",//上传元素data:{/*第一次上传url为空,则直接进行对应上传操作上传完成后修改url地址如果第二次,url不为空,执行删除对应url图片删除对应组 group1group1/M00/00/00/rBAv0F7xZEuAc_x_AAHyWR0ahwQ566.png用户重复上传,需要把之前上传的图片删掉*/url:function(){return $("#uImg").attr("src");}},done:function(res){//上传完毕回调//group1/M00/00/00/rBAv0F7xZEuAc_x_AAHyWR0ahwQ566.pngconsole.log(res)//上传成功后显示$("#uImg").attr("src","http://47.114.97.182/"+res.data)},error:function(){//请求异常回调}})

/*** 图片文件上传* @param file* @return*/@PostMapping("uploadIma")public Dto uploadIma(MultipartFile file,String url){//问题 图片重复上传 界面最好显示对应图片if(file.isEmpty()){return DtoUtil.returnFail("文件夹为空",500);}if(url != null || url.equals("")){//执行删除操作 split:把字符串划分成数组 第0个值FastDFSClientUtils.delete(url.split("/")[0],url);}try{// //获取图片二进制流// String file1 = FastDFSClientUtils.upload(file.getBytes(),file.getOriginalFilename());// //服务器存储图片路径// String file2 = "http://47.114.97.182/";// //拼接字符串// String file3 = file2+file1;// //图片二进制流 获取图片名称后缀 上传成功后返回字符串// Image i = new Image();// i.setSrc(file3);return DtoUtil.returnSuccess("上传成功",FastDFSClientUtils.upload(file.getBytes(),file.getOriginalFilename()));}catch (Exception e){log.error("异常"+e);e.printStackTrace();}return DtoUtil.returnFail("上传失败,请联系管理员",50);}

工具类

package mon;import mon.NameValuePair;import org.csource.fastdfs.*;//import org.slf4j.Logger;//import org.slf4j.LoggerFactory;import java.io.*;public class FastDFSClientUtils {private static final String CONF_FILENAME = Thread.currentThread().getContextClassLoader().getResource("fastdfs_client.conf").getPath();// private static Logger logger = LoggerFactory.getLogger(FastDFSClientUtils.class);private static TrackerClient trackerClient;//加载文件static {try {ClientGlobal.init(CONF_FILENAME);TrackerGroup trackerGroup = ClientGlobal.g_tracker_group;trackerClient = new TrackerClient(trackerGroup);} catch (Exception e) {// logger.error("",e);}}/*** <B>方法名称:</B>上传方法<BR>* <B>概要说明:</B><BR>* @param file 文件* @param path 路径* @return 上传成功返回id,失败返回null*/public static String upload(File file, String path) {TrackerServer trackerServer = null;StorageServer storageServer = null;StorageClient1 storageClient1 = null;FileInputStream fis = null;try {NameValuePair[] meta_list = null; // new NameValuePair[0];fis = new FileInputStream(file);byte[] file_buff = null;if (fis != null) {int len = fis.available();file_buff = new byte[len];fis.read(file_buff);}trackerServer = trackerClient.getConnection();if (trackerServer == null) {//logger.error("getConnection return null");return null;}storageServer = trackerClient.getStoreStorage(trackerServer);storageClient1 = new StorageClient1(trackerServer, storageServer);String fileid = storageClient1.upload_file1(file_buff, getFileExt(path), meta_list);return fileid;} catch (Exception ex) {// logger.error("",ex);return null;}finally{if (fis != null){try {fis.close();} catch (IOException e) {//logger.error("",e);}}if (storageServer != null){try {storageServer.close();} catch (IOException e) {e.printStackTrace();}}if (trackerServer != null){try {trackerServer.close();} catch (IOException e) {e.printStackTrace();}}storageClient1 = null;}}/*** <B>方法名称:</B>上传方法<BR>* <B>概要说明:</B><BR>* @param data 数据* @param fileName 扩展名* @return 上传成功返回id,失败返回null*/public static String upload(byte[] data, String fileName) {TrackerServer trackerServer = null;StorageServer storageServer = null;StorageClient1 storageClient1 = null;try {NameValuePair[] meta_list = null; // new NameValuePair[0];trackerServer = trackerClient.getConnection();if (trackerServer == null) {//logger.error("getConnection return null");return null;}storageServer = trackerClient.getStoreStorage(trackerServer);storageClient1 = new StorageClient1(trackerServer, storageServer);String fileid = storageClient1.upload_file1(data, getFileExt(fileName), meta_list);return fileid;} catch (Exception ex) {// logger.error("",ex);return null;}finally{if (storageServer != null){try {storageServer.close();} catch (IOException e) {e.printStackTrace();}}if (trackerServer != null){try {trackerServer.close();} catch (IOException e) {e.printStackTrace();}}storageClient1 = null;}}/*** <B>方法名称:</B>下载方法<BR>* <B>概要说明:</B>通过文件id进行下载<BR>* @param fileId 文件id* @return 返回InputStream*/public static InputStream download(String groupName, String fileId) {TrackerServer trackerServer = null;StorageServer storageServer = null;StorageClient1 storageClient1 = null;try {trackerServer = trackerClient.getConnection();if (trackerServer == null) {//logger.error("getConnection return null");return null;}storageServer = trackerClient.getStoreStorage(trackerServer, groupName);storageClient1 = new StorageClient1(trackerServer, storageServer);byte[] bytes = storageClient1.download_file1(fileId);InputStream inputStream = new ByteArrayInputStream(bytes);return inputStream;} catch (Exception ex) {// logger.error("",ex);return null;} finally {if (storageServer != null){try {storageServer.close();} catch (IOException e) {e.printStackTrace();}}if (trackerServer != null){try {trackerServer.close();} catch (IOException e) {e.printStackTrace();}}storageClient1 = null;}}/*** <B>方法名称:</B>删除方法<BR>* <B>概要说明:</B>根据id来删除一个文件<BR>* @param fileId 文件id* @return 删除成功返回0,非0则操作失败,返回错误代码*/public static int delete(String groupName, String fileId) {TrackerServer trackerServer = null;StorageServer storageServer = null;StorageClient1 storageClient1 = null;try {trackerServer = trackerClient.getConnection();if (trackerServer == null) {//logger.error("getConnection return null");}storageServer = trackerClient.getStoreStorage(trackerServer, groupName);storageClient1 = new StorageClient1(trackerServer, storageServer);int result = storageClient1.delete_file1(fileId);return result;} catch (Exception ex) {// logger.error("",ex);return 0;} finally {if (storageServer != null){try {storageServer.close();} catch (IOException e) {e.printStackTrace();}}if (trackerServer != null){try {trackerServer.close();} catch (IOException e) {e.printStackTrace();}}storageClient1 = null;}}/*** <B>方法名称:</B><BR>* <B>概要说明:</B><BR>* @param oldFileId 旧文件id* @param file 新文件* @param path 新文件路径* @return 上传成功返回id,失败返回null*/public static String modify(String oldGroupName, String oldFileId, File file, String path) {String fileid = null;try {// 先上传fileid = upload(file, path);if (fileid == null) {return null;}// 再删除int delResult = delete(oldGroupName, oldFileId);if (delResult != 0) {return null;}} catch (Exception ex) {// logger.error("",ex);return null;}return fileid;}/*** <B>方法名称:</B>获取文件后缀名<BR>* <B>概要说明:</B>获取文件后缀名<BR>* @param fileName* @return 如:"jpg"、"txt"、"zip" 等*/private static String getFileExt(String fileName) {if (fileName==null || !fileName.contains(".")) {return "";} else {return fileName.substring(fileName.lastIndexOf(".") + 1);}}}

3.日志的使用

log4j配置使用

引入依赖

<dependency> <!-- 引入log4j2依赖 --><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency>

idea下载Maven Helper插件:用于解决jar包冲突

<!--<dependency> &lt;!&ndash; 引入log4j2依赖 &ndash;&gt;--> <!--<groupId>org.springframework.boot</groupId>--> <!--<artifactId>spring-boot-starter-log4j2</artifactId>--><!--</dependency>-->

配置文件

<?xml version="1.0" encoding="UTF-8"?><!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出--><!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数--><configuration monitorInterval="5"><!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --><!--变量配置,定义变量,方便在下面使用--><Properties><!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符--><!-- %logger{36} 表示 Logger 名字最长36个字符 --><property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" /><!-- 定义日志存储的路径 --><property name="FILE_PATH" value="D://log4j2" /><property name="FILE_NAME" value="shop" /></Properties><!--log4j2的记录方式有三个子节点Console:定义控制台的配置RollingFile:定义超过指定大小自动存档File:定义文件输出的配置--><appenders><console name="Console" target="SYSTEM_OUT"><!--输出日志的格式--><PatternLayout pattern="${LOG_PATTERN}"/><!--控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/></console><!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临时测试用--><File name="Filelog" fileName="${FILE_PATH}/test.log" append="false"><PatternLayout pattern="${LOG_PATTERN}"/></File><!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--><RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/info.log" filePattern="${FILE_PATH}/${FILE_NAME}-INFO-%d{yyyy-MM-dd}_%i.log.gz"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="${LOG_PATTERN}"/><Policies><!--interval属性用来指定多久滚动一次,默认是1 hour--><TimeBasedTriggeringPolicy interval="1"/><SizeBasedTriggeringPolicy size="10MB"/></Policies><!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖--><DefaultRolloverStrategy max="15"/></RollingFile><!-- 这个会打印出所有的warn及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--><RollingFile name="RollingFileWarn" fileName="${FILE_PATH}/warn.log" filePattern="${FILE_PATH}/${FILE_NAME}-WARN-%d{yyyy-MM-dd}_%i.log.gz"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="${LOG_PATTERN}"/><Policies><!--interval属性用来指定多久滚动一次,默认是1 hour--><TimeBasedTriggeringPolicy interval="1"/><SizeBasedTriggeringPolicy size="10MB"/></Policies><!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖--><DefaultRolloverStrategy max="15"/></RollingFile><!-- 这个会打印出所有的error及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--><RollingFile name="RollingFileError" fileName="${FILE_PATH}/errorPojo.log" filePattern="${FILE_PATH}/${FILE_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log.gz"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="errorPojo" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="${LOG_PATTERN}"/><Policies><!--interval属性用来指定多久滚动一次,默认是1 hour--><TimeBasedTriggeringPolicy interval="1"/><SizeBasedTriggeringPolicy size="10MB"/></Policies><!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖--><DefaultRolloverStrategy max="15"/></RollingFile></appenders><!--Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。--><!--然后定义loggers,只有定义了logger并引入的appender,appender才会生效--><loggers><!--过滤掉spring和mybatis的一些无用的DEBUG信息--><logger name="org.mybatis" level="info" additivity="false"><AppenderRef ref="Console"/></logger><!--监控系统信息--><!--若是additivity设为false,则 子Logger 只会在自己的appender里输出,而不会在 父Logger 的appender里输出。--><Logger name="org.springframework" level="info" additivity="false"><AppenderRef ref="Console"/></Logger><root level="info"><appender-ref ref="Console"/><appender-ref ref="Filelog"/><appender-ref ref="RollingFileInfo"/><appender-ref ref="RollingFileWarn"/><appender-ref ref="RollingFileError"/></root></loggers></configuration>

java使用static Logger log = LoggerFactory.getLogger(RotaionImgController.class);方法中log.info("进入list方法");//直接调方法即可 日志信息自动存储到本地路径文件下

java使用static Logger log = LoggerFactory.getLogger(RotaionImgController.class);方法中log.info("进入list方法");//直接调方法即可 日志信息自动存储到本地路径文件下

Logger 在每一个方法里面写代码量增加

结合spring AOP处理日志

在AOP中记录方法执行情况,方便查找后端处理情况

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。