在編寫代碼的時候需要隨時查看工作日志,查看工作日志的好處就是隨時能檢查出錯誤。所以我一般就需要在編寫代碼的前期添加工作日志,以便更好的查看相關錯誤輸出。
以一個springmvc小demo為例子 主要是給controller類加一個日志顯示
1、先引進各個配置文件 主要把log4j.properties加進來 web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list> <welcome-file>/</welcome-file> <!--必須寫的 controller對/進行映射 使其直接訪問WEB-INF下的內容--> </welcome-file-list> <!-- 加載spring容器 在web.xml里面引入log4j--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:log4j.properties,applicationContext.xml</param-value> </context-param> <!--<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>--> <servlet> <servlet-name>ContextLoaderListener</servlet-name> <servlet-class>org.springframework.web.context.ContextLoaderListener</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <!-- springmvc的前端控制器 --> <servlet> <servlet-name>dispatcher-servlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- contextConfigLocation不是必須的, 如果不配置contextConfigLocation, springmvc的配置文件默認在:WEB-INF/servlet的name+"-servlet.xml" --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:dispatcher-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher-servlet</servlet-name> <!-- /:會攔截所有請求包括靜態資源。需要在springmvc.xml中添加靜態資源的映射。 所有的請求都會被攔截 交由springmvc去處理 但是本地的靜態文件是不用去處理攔截的(css js jsp)--> <url-pattern>/</url-pattern> </servlet-mapping> <!-- <!– 資源映射 url請求中只要是帶css/** 或者 js/**這種格式的 直接映射到WEB-INF/css或者js中–> 下面兩行配置在springmvc.xml中--> <!-- 解決post亂碼 --> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
2.具體含義解決都已經標注好 log4j.properties
### 設置 寫入顯示日志的級別 一般是INfo 也可以顯示debug error等級別 控制台輸出和文件輸出### log4j.rootLogger = INFO,Console,File ### 控制台日志### log4j.appender.Console = org.apache.log4j.ConsoleAppender log4j.appender.Console.Target = System.out log4j.appender.Console.layout = org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n ### 普通文件日志 ### log4j.appender.File = org.apache.log4j.RollingFileAppender log4j.appender.File.File = D:/LocalLog/info.log log4j.appender.File.MaxFileSize = 10MB ### 輸出日志 如果換成debug表示輸出debug以上的級別日志 ### log4j.appender.File.Threshold = ALL log4j.appender.File.layout = org.apache.log4j.PatternLayout log4j.appender.File.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
3.
package com.springmvc.controller;/** * Created by hoobey on 2017/12/10. */ import org.apache.log4j.Logger; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; /** * All rights Reserved, Designed By www.hoobey.cn * * @Description: 實現頁面的跳轉(用一句話描述該文件做什么) * Create by hoobey * User:user * Date:2017/12/10 * Time:下午 06:04 * 注意:本內容僅限於本公司內部傳閱,禁止外泄以及用於其他的商業目的 */ @Controller public class ViewController { private Logger log = Logger.getLogger(ViewController.class);//輸出Log日志 /** * 打開首頁 */ @RequestMapping("/") public String showIndex() { return "index"; } @RequestMapping("/view") public ModelAndView view(HttpServletRequest request){ // 只需要將想要訪問的頁面放在path里面,通過url傳進來就行了 http://localhost:8080/項目名/view?path=success String path = request.getParameter("path") +""; //頁面傳一個 ModelAndView mav = new ModelAndView(); //存儲項目路徑 前端界面使用的話直接EL表達式傳過去 ${conetxtPath} String contextPath = request.getContextPath(); mav.addObject("conetextPath",contextPath); System.out.println("項目路徑是:"+contextPath); mav.setViewName(path); return mav; } /*WEB-INF目錄下的任何資源都是無法直接通過瀏覽器的url地址去訪問的,保證了安全性。這也是我們為什么把頁面都放在該目錄下的原因 / 表示首先訪問的頁面是index.jsp */ }
tomcat啟動訪問項目后 在控制台下看到 當然在log4j.properties下可以設置顯示的等級 info error bug等 也可以配置輸出到本地 下面會進行大致展示
配置日志輸出到本地:
### 設置### log4j.rootLogger = debug,stdout,D,E ### 輸出信息到控制抬 ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n ### 輸出DEBUG 級別以上的日志到文件D:/LocalLog/debug.log ### log4j.appender.D = org.apache.log4j.FileAppender log4j.appender.D.File = D:/LocalLog/debug.log #true表示消息增加到指定文件,false則將消息 log4j.appender.D.Append = true 覆蓋指定的文件內容中,默認是true #全局的過濾器,把低於DEBUGDE的信息過濾不顯示出來,這里設置debug沒意義 log4j.appender.D.Threshold = DEBUG #指定布局模式 log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n ### 輸出ERROR 級別以上的日志到文件F://logs/error.log ### log4j.appender.E = org.apache.log4j.FileAppender log4j.appender.E.File = D://LocalLog/error.log log4j.appender.E.Append = true log4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayout log4j.appender.E.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n