java 日志实时输出前端_log4j输出日志到前端页面

一、简介

有些时候webapp有需求将日志输出到前台页面,便于开发者查看日志,本篇将介绍如何将日志输出到前台显示;

二、准备

WebSocket技术、log4j、miniui(本项目所用前端,其他也一样);

三、参考文档

四、过程

1、log4j配置

log4j.rootLogger=debug,stdout,WA

# 选用WriterAppender作为Appender,表示以流的形式输出,这个Appender一般很少用,是常用Appender的父类

log4j.appender.WA=org.apache.log4j.WriterAppender

log4j.appender.WA.Threshold=debug

log4j.appender.WA.layout=org.apache.log4j.PatternLayout

# %X{ip} 输出本服务器的ip,通过MDC输入(见后面描述)

log4j.appender.WA.layout.ConversionPattern=%d{ISO8601} - [%X{ip}] -%5p %c{1}:%L - %m%n

2、WebSocket后台编写

importjava.io.PipedReader;

importjava.io.PipedWriter;

importjava.io.Writer; importjava.net.InetAddress; importjavax.websocket.OnClose; importjavax.websocket.OnError; importjavax.websocket.OnOpen; importjavax.websocket.Sessi

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计方案: 1. 技术选型 - 前端框架:Bootstrap - 后端框架:Spring MVC + MyBatis - 数据库:MySQL 2. 系统功能 - 用户管理:包括用户的注册、登录、信息修改等; - 项目管理:包括项目的创建、修改、删除、查看等; - 任务管理:包括任务的创建、修改、删除、查看等; - 文件管理:包括文件的上传、下载、删除、查看等; - 日志管理:包括用户操作日志的记录和查看等。 3. 前端页面设计 - 登录页:包括用户名和密码输入框、登录按钮等; - 注册页:包括用户名、密码、邮箱等输入框、注册按钮等; - 项目列表页:包括项目列表、创建项目按钮等; - 项目详情页:包括项目信息、任务列表、文件列表等; - 任务详情页:包括任务信息、任务进度、任务附件等; - 文件列表页:包括文件列表、上传文件按钮等; - 日志列表页:包括用户操作日志列表等。 4. 后端代码示例 - 用户管理: ```java @Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping(value = "/register", method = RequestMethod.POST) public String register(User user) { userService.register(user); return "redirect:/login"; } @RequestMapping(value = "/login", method = RequestMethod.POST) public String login(User user, HttpSession session) { User loginUser = userService.login(user); if (loginUser == null) { return "redirect:/login?error=true"; } session.setAttribute("user", loginUser); return "redirect:/project/list"; } @RequestMapping("/logout") public String logout(HttpSession session) { session.invalidate(); return "redirect:/login"; } @RequestMapping("/info") public String info() { return "user_info"; } @RequestMapping(value = "/update", method = RequestMethod.POST) public String update(User user) { userService.update(user); return "redirect:/user/info"; } } ``` - 项目管理: ```java @Controller @RequestMapping("/project") public class ProjectController { @Autowired private ProjectService projectService; @RequestMapping("/list") public String list(Model model) { List<Project> projects = projectService.list(); model.addAttribute("projects", projects); return "project_list"; } @RequestMapping("/add") public String add() { return "project_add"; } @RequestMapping(value = "/save", method = RequestMethod.POST) public String save(Project project) { projectService.save(project); return "redirect:/project/list"; } @RequestMapping("/edit/{id}") public String edit(@PathVariable("id") int id, Model model) { Project project = projectService.get(id); model.addAttribute("project", project); return "project_edit"; } @RequestMapping(value = "/update", method = RequestMethod.POST) public String update(Project project) { projectService.update(project); return "redirect:/project/list"; } @RequestMapping("/delete/{id}") public String delete(@PathVariable("id") int id) { projectService.delete(id); return "redirect:/project/list"; } @RequestMapping("/detail/{id}") public String detail(@PathVariable("id") int id, Model model) { Project project = projectService.get(id); model.addAttribute("project", project); return "project_detail"; } } ``` - 任务管理: ```java @Controller @RequestMapping("/task") public class TaskController { @Autowired private TaskService taskService; @RequestMapping("/list") public String list(@RequestParam("projectId") int projectId, Model model) { List<Task> tasks = taskService.list(projectId); model.addAttribute("tasks", tasks); model.addAttribute("projectId", projectId); return "task_list"; } @RequestMapping("/add") public String add(@RequestParam("projectId") int projectId, Model model) { model.addAttribute("projectId", projectId); return "task_add"; } @RequestMapping(value = "/save", method = RequestMethod.POST) public String save(Task task) { taskService.save(task); return "redirect:/task/list?projectId=" + task.getProjectId(); } @RequestMapping("/edit/{id}") public String edit(@PathVariable("id") int id, Model model) { Task task = taskService.get(id); model.addAttribute("task", task); return "task_edit"; } @RequestMapping(value = "/update", method = RequestMethod.POST) public String update(Task task) { taskService.update(task); return "redirect:/task/list?projectId=" + task.getProjectId(); } @RequestMapping("/delete/{id}") public String delete(@PathVariable("id") int id, @RequestParam("projectId") int projectId) { taskService.delete(id); return "redirect:/task/list?projectId=" + projectId; } @RequestMapping("/detail/{id}") public String detail(@PathVariable("id") int id, Model model) { Task task = taskService.get(id); model.addAttribute("task", task); return "task_detail"; } } ``` - 文件管理: ```java @Controller @RequestMapping("/file") public class FileController { @Autowired private FileService fileService; @RequestMapping("/list") public String list(@RequestParam("projectId") int projectId, Model model) { List<File> files = fileService.list(projectId); model.addAttribute("files", files); model.addAttribute("projectId", projectId); return "file_list"; } @RequestMapping("/upload") public String upload(@RequestParam("projectId") int projectId, Model model) { model.addAttribute("projectId", projectId); return "file_upload"; } @RequestMapping(value = "/save", method = RequestMethod.POST) public String save(File file, MultipartFile uploadFile) throws IOException { String filename = uploadFile.getOriginalFilename(); String suffix = filename.substring(filename.lastIndexOf(".") + 1); String newName = UUID.randomUUID().toString() + "." + suffix; File dest = new File("d:/upload", newName); uploadFile.transferTo(dest); file.setFileName(newName); file.setFileType(uploadFile.getContentType()); file.setFileSize(uploadFile.getSize()); fileService.save(file); return "redirect:/file/list?projectId=" + file.getProjectId(); } @RequestMapping("/download/{id}") public void download(@PathVariable("id") int id, HttpServletResponse response) throws IOException { File file = fileService.get(id); String filePath = "d:/upload/" + file.getFileName(); FileInputStream fis = new FileInputStream(filePath); response.setCharacterEncoding("utf-8"); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(file.getFileName(), "utf-8")); IOUtils.copy(fis, response.getOutputStream()); fis.close(); } @RequestMapping("/delete/{id}") public String delete(@PathVariable("id") int id, @RequestParam("projectId") int projectId) { fileService.delete(id); return "redirect:/file/list?projectId=" + projectId; } } ``` - 日志管理: ```java @Controller @RequestMapping("/log") public class LogController { @Autowired private LogService logService; @RequestMapping("/list") public String list(Model model) { List<Log> logs = logService.list(); model.addAttribute("logs", logs); return "log_list"; } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值