日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

springmvc+log4j操作日志记录,详细配置

發(fā)布時間:2025/5/22 c/c++ 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springmvc+log4j操作日志记录,详细配置 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

沒有接觸過的,先了解一下:log4j教程

部分內(nèi)容來:log4j教程?感謝!

需要導(dǎo)入包:

?log包:log4j-12.17.jar

第一步:web.xml配置

<!-- log4j配置,文件路徑,因?yàn)槭歉S項(xiàng)目啟動 --> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/log4j.xml</param-value> </context-param> <!-- 配置log4j.xml變量,如果需要動態(tài)的就使用下面方式,使用方法${name} --> <context-param> <param-name>controller</param-name> <param-value>controller-log</param-value> </context-param>
<context-param> <param-name>loggingLevel</param-name> <param-value>info</param-value> </context-param> <!-- 加載log4j配置文件 --><listener><listener-class>org.springframework.web.util.Log4jConfigListener</listener-class></listener>

第二步log4j.xml配置

(配置文件可以有兩種方式,一種是xml,一種是properties。個人比較喜歡xml,一目了然)

先講解一下核心對象:

logger對象:?Logger對象負(fù)責(zé)捕獲日志信息及它們存儲在一個空間的層次結(jié)構(gòu)。

Appender對象:下位層提供Appender對象。Appender對象負(fù)責(zé)發(fā)布日志信息,以不同的首選目的地,如數(shù)據(jù)庫,文件,控制臺,UNIX系統(tǒng)日志等。

layout對象:?該層提供其用于格式化不同風(fēng)格的日志信息的對象。布局層提供支持Appender對象到發(fā)布日志信息之前。

打個比方:logger是個情報(bào)站,負(fù)責(zé)收集他 所在地方(用name="xxx包"指定)下的所有信息。appender是發(fā)送出去的方式,如寫信(FileAppender)、電報(bào)(SMTPAppender)等多種。layout就是發(fā)送內(nèi)容以什么格式書寫,如自定義格式(PatternLayout),html(HTMLLayout)格式。

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <!-- 可以配置多個appender來對應(yīng)不同的輸出,如文件輸出,sql輸出,控制臺輸出,郵件輸出等 --> <!-- [控制臺STDOUT] 不同的輸出類型對應(yīng)著不同的calss,如控制臺輸出class對應(yīng)著 org.apache.log4j.ConsoleAppender --> <appender name="console" class="org.apache.log4j.ConsoleAppender"> <!-- name提供給logger或者root調(diào)用 --><param name="encoding" value="GBK" /> <!-- 保存字符集 --><param name="target" value="System.out" /> <!-- 輸出到控制臺 --><layout class="org.apache.log4j.PatternLayout"> <!-- loyout表示輸出方式,可以多種,class值區(qū)分,PatternLayout表示自定義格式 --> <param name="ConversionPattern" value="%d{ISO8601} 耗時:%r [日志來自:%-40.40c{3} 日志類型: %-5p 日志內(nèi)容:%m]%n" /> <!-- 輸出格式,后面解釋 --></layout> <!--filter過濾器設(shè)置輸出的級別:ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF所有下面輸出的是debug到warn不會有error和fatal--> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="levelMin" value="debug" /> <param name="levelMax" value="warn" /> <param name="AcceptOnMatch" value="true" /> <!-- 答案:http://bbs.csdn.net/topics/350195913 --></filter> </appender> <!-- [公共Appender] 這個class表示輸入到文件,并且按日期生成新文件--> <appender name="DEFAULT-APPENDER" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="${webapp.root}/logs/common-default.log" /> <!-- ${webapp.root}項(xiàng)目根路徑,自動獲得,不用配置,可自己在web.xml中配置 --><param name="Append" value="true" /> <!-- 是否項(xiàng)目重啟繼續(xù)保存之前日志 --><param name="encoding" value="GBK" /> <param name="threshold" value="all" /> <!-- 記錄所有類型日志,記錄它和比它等級高的日志all<debug --><param name="DatePattern" value="'.'yyyy-MM-dd'.log'" /> <!-- 日期格式 例子:common-default.log.2015-09-17.log--><layout class="org.apache.log4j.PatternLayout"> <!-- 輸出方式 --><param name="ConversionPattern" value="%d{ISO8601} 耗時:%r [日志來自:%-40.40c{3} 日志類型: %-5p 日志內(nèi)容:%m]%n" /> </layout> </appender> <!-- [debug日志APPENDER] --> <appender name="DEBUG-APPENDER" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="${webapp.root}/logs/controller/debug-log.log" /> <param name="Append" value="true" /> <param name="encoding" value="GBK" /> <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{ISO8601} 耗時:%r [日志來自:%-40.40c{3} 日志類型: %-5p 日志內(nèi)容:%m]%n" /> </layout> </appender> <!-- [info日志APPENDER] --> <appender name="INFO-APPENDER" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="${webapp.root}/logs/controller/info-log.log" /> <param name="Append" value="false" /> <param name="encoding" value="GBK" /><param name="DatePattern" value="'.'yyyy-MM-dd'.log'" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{ISO8601} 耗時:%r [日志來自:%-40.40c{3} 日志類型: %-5p 日志內(nèi)容:%m]%n" /> </layout> <!-- 我只想記錄info日志,就做如下設(shè)置 --><filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMax" value="info"/> <param name="LevelMin" value="info"/> </filter> </appender> <!-- [組件日志APPENDER] --> <appender name="COMPONENT-APPENDER" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="${webapp.root}/logs/logistics-component.log" /> <param name="Append" value="true" /> <param name="encoding" value="GBK" /> <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{ISO8601} 耗時:%r [日志來自:%-40.40c{3} 日志類型: %-5p 日志內(nèi)容:%m]%n" /> </layout> </appender> <!-- debug log --> <!-- name指定的是包名,表示這個logger只記錄com.wzw.controller下的所有日志 --><logger name="com.wzw.controller" additivity="true"> <!-- additivity 是否繼承root --><!-- <level value="${loggingLevel}" /> --><level value="DEBUG"></level> <!-- 現(xiàn)在級別 --><appender-ref ref="DEBUG-APPENDER" /> </logger> <!-- info log --> <!-- name指定的是包名,這樣只操作此包下的log --><logger name="com.wzw.controller" additivity="true"> <level value="INFO"></level> <appender-ref ref="INFO-APPENDER" /> <appender-ref ref="console"/></logger> <!-- Root Logger --> <!-- 所有l(wèi)ogger的父類,記錄所有的日志。 --><root> <level value="ALL"></level> <!-- 限定記錄等級 --><appender-ref ref="DEFAULT-APPENDER" /> <!-- 調(diào)用記錄方式 --><appender-ref ref="console"/></root> </log4j:configuration>

?運(yùn)行就能看到common-default.log里面有操作日志

自己輸出日志:

我controller包下某各類中:

package com.wzw.controller; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("/account") public class AccountController {private static Logger logger =LoggerFactory.getLogger(AccountController.class); @ResponseBody@RequestMapping("/login")public String login(HttpSession session){logger.info("請求登錄");logger.debug("debug");logger.warn("warn"); } }

訪問這個controller,就會記錄日志,因?yàn)橛衛(wèi)og4j中有兩個logger配置記錄controller包下的日志,所以輸出到兩個logger下<appender-ref>(輸出方式)。

appender選項(xiàng):

  • AppenderSkeleton

  • AsyncAppender

  • ConsoleAppender

  • DailyRollingFileAppender

  • ExternallyRolledFileAppender

  • FileAppender

  • JDBCAppender

  • JMSAppender

  • LF5Appender

  • NTEventLogAppender

  • NullAppender

  • RollingFileAppender

  • SMTPAppender

  • SocketAppender

  • SocketHubAppender

  • SyslogAppender

  • TelnetAppender

  • WriterAppender

?layout選項(xiàng):

  • DateLayout
  • HTMLLayout
  • PatternLayout
  • SimpleLayout
  • XMLLayout

?

模式轉(zhuǎn)換字符:

下表說明了以上模式使用的字符和所有其他字符,可以在自定義模式中使用:

轉(zhuǎn)換字符表示的意思
c用于輸出的記錄事件的類別。例如,對于類別名稱"a.b.c"?模式??%c{2}?會輸出?"b.c"
C用于輸出呼叫者發(fā)出日志請求的完全限定類名。例如,對于類名 "org.apache.xyz.SomeClass", 模式?%C{1} 會輸出 "SomeClass".
d用于輸出的記錄事件的日期。例如, %d{HH:mm:ss,SSS} 或 %d{dd MMM yyyy HH:mm:ss,SSS}.
F用于輸出被發(fā)出日志記錄請求,其中的文件名
l用于將產(chǎn)生的日志事件調(diào)用者輸出位置信息
L用于輸出從被發(fā)出日志記錄請求的行號
m用于輸出使用日志事件相關(guān)聯(lián)的應(yīng)用程序提供的消息
M用于輸出發(fā)出日志請求所在的方法名稱
n輸出平臺相關(guān)的行分隔符或文字
p用于輸出的記錄事件的優(yōu)先級
r用于輸出毫秒從布局的結(jié)構(gòu)經(jīng)過直到創(chuàng)建日志記錄事件的數(shù)目
t用于輸出生成的日志記錄事件的線程的名稱
x用于與產(chǎn)生該日志事件的線程相關(guān)聯(lián)輸出的NDC(嵌套診斷上下文)
X在X轉(zhuǎn)換字符后面是鍵為的MDC。例如??X{clientIP}?將打印存儲在MDC對鍵clientIP的信息
%文字百分號?%%將打印%標(biāo)志

格式修飾符:

默認(rèn)情況下,相關(guān)資料原樣輸出。然而,隨著格式修飾符的幫助下,可以改變最小字段寬度,最大字段寬度和對齊。

下表涵蓋了各種各樣的修飾符的情況:

?

Format modifierleft justifyminimum widthmaximum width注釋
%20cfalse20none用空格左墊,如果類別名稱少于20個字符長
%-20ctrue20none用空格右墊,如果類別名稱少于20個字符長
%.30cNAnone30從開始截?cái)?#xff0c;如果類別名稱超過30個字符長
%20.30cfalse2030用空格左側(cè)墊,如果類別名稱短于20個字符。但是,如果類別名稱長度超過30個字符,那么從開始截?cái)唷?/td>
%-20.30ctrue2030用空格右側(cè)墊,如果類別名稱短于20個字符。但是,如果類別名稱長度超過30個字符,那么從開始截?cái)唷?br />

轉(zhuǎn)載于:https://www.cnblogs.com/v-weiwang/p/4814050.html

總結(jié)

以上是生活随笔為你收集整理的springmvc+log4j操作日志记录,详细配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久综合精品 | 男裸体无遮挡网站 | 一级女性全黄久久生活片免费 | 亚洲区免费 | 中文字幕视频在线 | 在线观看视频亚洲 | 一级作爱视频 | 露脸啪啪清纯大学生美女 | 噼里啪啦免费高清看 | 91av精品| 国产精品--色哟哟 | 亚洲精品视频在线观看免费 | 蜜臀在线一区二区三区 | 久久黄色小视频 | 久久一二| 成人免费观看网站 | 91久久精品国产 | 国产一区二区三区在线播放无 | 中文字幕在线观看欧美 | 亚洲国产成人无码av在线 | 永久视频在线 | 亚洲高清免费观看 | 人人草人人爱 | 欧美福利第一页 | 日韩久久久久久 | 亚洲免费成人av | 国产精品色婷婷99久久精品 | 欧美午夜一区二区 | 97超级碰碰 | 欧美激情一区二区三区 | 暖暖日本在线视频 | 玖玖久久| 亚洲国产aaa| 一级黄色免费毛片 | 少妇一晚三次一区二区三区 | 在线不卡二区 | 无码任你躁久久久久久久 | 欧美自拍在线 | 中文在线观看免费视频 | 黄色片怎么看 | 日韩精品在线第一页 | 超碰人体 | 亚洲色图小说 | 日日撸视频 | 久久国产亚洲精品无码 | 日本视频一区二区三区 | 久久久无码精品亚洲无少妇 | 久久久午夜电影 | 蜜桃视频在线播放 | 久久国产黄色片 | 三级爱爱| 爱情岛亚洲首页论坛小巨 | 日韩欧美在线免费观看 | 天天插天天操天天干 | www免费视频 | 中日韩免费毛片 | 中文字幕日本在线观看 | 亚洲黄色片视频 | 日产毛片| 星空大象在线观看免费播放 | 亚洲免费网站 | 国产东北露脸精品视频 | 特级黄色网 | 久久久久国产精 | 亚洲精品国产一区二 | av生活片| 深夜福利在线播放 | 免费成人深夜在线观看 | 天天射天天射天天射 | 福利小视频 | 91久久国产综合久久91精品网站 | 久久av一区二区三 | 捆绑束缚调教 | 天天干天天综合 | 亚洲精久 | 色污网站 | 精品一区二区在线视频 | 葵司免费一区二区三区四区五区 | 亚洲精品国产欧美在线观看 | 在线久草 | 成人网色| 亚洲香蕉网站 | 亚洲va天堂va欧美ⅴa在线 | 欧美1区2区 | 午夜精品欧美 | 手机在线看永久av片免费 | 欧美日韩大片在线观看 | 久久免费国产精品 | 亚洲国产精品久久久久久久 | 午夜在线观看免费视频 | 女仆裸体打屁屁羞羞免费 | 色爱成人综合 | 欧美色一区二区三区在线观看 | 在线观看欧美 | 一级片网址| 天天干,天天操,天天射 | 国产伦精品一区二区三区视频黑人 | 中文字幕精品一区二区三区精品 | 中文在线www |