mybatis 不生效 參數_Mybatis-日志配置

610101d4ad153ee966eb8115bb88c11d.png

日志

Mybatis 的內置日志工廠提供日志功能,內置日志工廠將日志交給以下其中一種工具作代理:

  • SLF4J
  • Apache Commons Logging
  • Log4j 2
  • Log4j
  • JDK logging

MyBatis 內置日志工廠基于運行時自省機制選擇合適的日志工具。它會使用第一個查找得到的工具(按上文列舉的順序查找)。如果一個都未找到,日志功能就會被禁用。

不少應用服務器(如 Tomcat 和 WebShpere)的類路徑中已經包含 Commons Logging,所以在這種配置環境下的 MyBatis 會把它作為日志工具,記住這點非常重要。這將意味著,在諸如 WebSphere 的環境中,它提供了 Commons Logging 的私有實現,你的 Log4J 配置將被忽略。MyBatis 將你的 Log4J 配置忽略掉是相當令人郁悶的(事實上,正是因為在這種配置環境下,MyBatis 才會選擇使用 Commons Logging 而不是 Log4J)。如果你的應用部署在一個類路徑已經包含 Commons Logging 的環境中,而你又想使用其它日志工具,你可以通過在 MyBatis 配置文件 mybatis-config.xml 里面添加一項 setting 來選擇別的日志工具。

    ...        ...  

logImpl 可選的值有:SLF4J、LOG4J、LOG4J2、JDK_LOGGING、COMMONS_LOGGING、STDOUT_LOGGING、NO_LOGGING,或者是實現了接口 org.apache.ibatis.logging.Log 的,且構造方法是以字符串為參數的類的完全限定名。(譯者注:可以參考org.apache.ibatis.logging.slf4j.Slf4jImpl.java的實現)

你也可以調用如下任一方法來使用日志工具:

org.apache.ibatis.logging.LogFactory.useSlf4jLogging();org.apache.ibatis.logging.LogFactory.useLog4JLogging();org.apache.ibatis.logging.LogFactory.useJdkLogging();org.apache.ibatis.logging.LogFactory.useCommonsLogging();org.apache.ibatis.logging.LogFactory.useStdOutLogging();

如果你決定要調用以上某個方法,請在調用其它 MyBatis 方法之前調用它。另外,僅當運行時類路徑中存在該日志工具時,調用與該日志工具對應的方法才會生效,否則 MyBatis 一概忽略。如你環境中并不存在 Log4J,你卻調用了相應的方法,MyBatis 就會忽略這一調用,轉而以默認的查找順序查找日志工具。

關于 SLF4J、Apache Commons Logging、Apache Log4J 和 JDK Logging 的 API 介紹不在本文檔介紹范圍內。不過,下面的例子可以作為一個快速入門。關于這些日志框架的更多信息,可以參考以下鏈接:

  • Apache Commons Logging
  • Apache Log4j
  • JDK Logging API

日志配置

你可以對包、映射類的全限定名、命名空間或全限定語句名開啟日志功能來查看 MyBatis 的日志語句。

再次說明下,具體怎么做,由使用的日志工具決定,這里以 Log4J 為例。配置日志功能非常簡單:添加一個或多個配置文件(如 log4j.properties),有時需要添加 jar 包(如 log4j.jar)。下面的例子將使用 Log4J 來配置完整的日志服務,共兩個步驟:

步驟 1:添加 Log4J 的 jar 包

因為我們使用的是 Log4J,就要確保它的 jar 包在應用中是可用的。要啟用 Log4J,只要將 jar 包添加到應用的類路徑中即可。Log4J 的 jar 包可以在上面的鏈接中下載。

對于 web 應用或企業級應用,則需要將 log4j.jar 添加到 WEB-INF/lib 目錄下;對于獨立應用,可以將它添加到JVM 的 -classpath 啟動參數中。

步驟 2:配置 Log4J

配置 Log4J 比較簡單,假如你需要記錄這個映射器接口的日志:

package org.mybatis.example;public interface BlogMapper {  @Select("SELECT * FROM blog WHERE id = #{id}")  Blog selectBlog(int id);}

在應用的類路徑中創建一個名稱為 log4j.properties 的文件,文件的具體內容如下:

# Global logging configurationlog4j.rootLogger=ERROR, stdout# MyBatis logging configuration...log4j.logger.org.mybatis.example.BlogMapper=TRACE# Console output...log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

添加以上配置后,Log4J 就會記錄 org.mybatis.example.BlogMapper 的詳細執行操作,且僅記錄應用中其它類的錯誤信息(若有)。

你也可以將日志的記錄方式從接口級別切換到語句級別,從而實現更細粒度的控制。如下配置只對 selectBlog 語句記錄日志:

log4j.logger.org.mybatis.example.BlogMapper.selectBlog=TRACE

與此相對,可以對一組映射器接口記錄日志,只要對映射器接口所在的包開啟日志功能即可:

log4j.logger.org.mybatis.example=TRACE

某些查詢可能會返回龐大的結果集,此時只想記錄其執行的 SQL 語句而不想記錄結果該怎么辦?為此,Mybatis 中 SQL 語句的日志級別被設為DEBUG(JDK 日志設為 FINE),結果的日志級別為 TRACE(JDK 日志設為 FINER)。所以,只要將日志級別調整為 DEBUG 即可達到目的:

log4j.logger.org.mybatis.example=DEBUG

要記錄日志的是類似下面的映射器文件而不是映射器接口又該怎么做呢?

<?xml version="1.0" encoding="UTF-8" ?>    select * from Blog where id = #{id}  

如需對 XML 文件記錄日志,只要對命名空間增加日志記錄功能即可:

log4j.logger.org.mybatis.example.BlogMapper=TRACE

要記錄具體語句的日志可以這樣做:

log4j.logger.org.mybatis.example.BlogMapper.selectBlog=TRACE

你應該注意到了,為映射器接口和 XML 文件添加日志功能的語句毫無差別。

注意 如果你使用的是 SLF4J 或 Log4j 2,MyBatis 將以 MYBATIS 這個值進行調用。

配置文件 log4j.properties 的余下內容是針對日志輸出源的,這一內容已經超出本文檔范圍。關于 Log4J 的更多內容,可以參考Log4J 的網站。不過,你也可以簡單地做做實驗,看看不同的配置會產生怎樣的效果。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/397194.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397194.shtml
英文地址,請注明出處:http://en.pswp.cn/news/397194.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PS通過濾色實現簡單的圖片拼合

素材如下&#xff1a; 素材一&#xff1a; 雪山 素材二&#xff1a; 月亮 效果&#xff1a; 實現步驟 1、在PS中打開雪山素材一 2、將月亮素材直接拖入雪山所在的圖層中 3、鎖定置入素材的高寬比&#xff08;點擊一下鏈狀按鈕&#xff09; 4、調整月亮到合適大小合適位置 5、…

預處理:主成分分析與白化

主成分分析 引言 主成分分析&#xff08;PCA&#xff09;是一種能夠極大提升無監督特征學習速度的數據降維算法。更重要的是&#xff0c;理解PCA算法&#xff0c;對實現白化算法有很大的幫助&#xff0c;很多算法都先用白化算法作預處理步驟。 假設你使用圖像來訓練算法&#x…

jQuery Ajax

jQuery load()方法&#xff1a;是簡單但強大的Ajax 方法load() 方法從服務器(URL,data,callback);必須的URL 參數規定您希望架加載的URL可選的data參數 規定與請求一同發送的差字符串鍵/值對集合。可選的callback參數時load()方法完成后所執行的函數名稱$(documnet).ready(…

swagger 修改dto注解_Web服務開發:Spring集成Swagger,3步自動生成API文檔

目錄&#xff1a;1&#xff0c;Spring Boot集成Swagger2&#xff0c;Swagger接口文檔頁面3&#xff0c;常見問題和解決方法在Sping開發REST接口服務時&#xff0c;API文檔是不可缺少的一個重要部分。Swagger框架定義了完整的REST接口文檔規范&#xff0c;提供了強大的頁面測試功…

WPF自定義控件之列表滑動特效 PowerListBox

列表控件是應用程序中常見的控件之一&#xff0c;對其做一些絢麗的視覺特效&#xff0c;可以讓軟件增色不少。 本人網上看過一個視頻&#xff0c;是windows phone 7系統上的一個App的列表滾動效果&#xff0c;效果非常炫 現在在WPF上用ListBox重現此效果 首先我們來分析一下&am…

去除inline-block元素間間距

根本原因&#xff1a;inline-block元素之間之所以有空白間距是因為空格有字體大小原因。 第一種&#xff1a; 把代碼之間的換行空白都去掉。 例如&#xff1a; <div>第一個inline-block元素</div><div>第二個inline-block元素</div> 第二種&#xff1a…

python - 定時清理ES 索引

只保留三天 #!/usr/bin/env python3 # -*- coding:utf-8 -*- import os import datetime# 時間轉化為字符串now_time datetime.datetime.now().strptime(datetime.datetime.now().strftime("%Y.%m.%d"),"%Y.%m.%d") os.system("curl -XGET http://12…

CnosDB如何確保多步操作的最終一致性?

背景 在時序數據庫中&#xff0c;資源的操作是一個復雜且關鍵的任務。這些操作通常涉及到多個步驟&#xff0c;每個步驟都可能會失敗&#xff0c;導致資源處于不一致的狀態。例如&#xff0c;一個用戶可能想要在CnosDB集群中刪除一個租戶&#xff0c;這個操作可能需要刪除租戶…

頸椎前路caspar撐開器_“骨質增生”導致的頸椎病怎么破?

來源&#xff1a;《脊柱外科微創手術精要》作者&#xff1a;中日友好醫院 鄒海波此文是區別于頸椎間盤軟性突出診治一文&#xff0c;主要針對“骨質增生”導致的頸椎病(Spondylosis)進行介紹。傳統的頸椎前路手術主要為頸椎病而設計。一度認為對頸椎病采用前路手術的主要好處在…

Struts2整合Freemarker生成靜態頁面

2019獨角獸企業重金招聘Python工程師標準>>> 這是生成靜態頁面的預覽&#xff1a; 其對應的模板文件&#xff1a; <table style"text-align:center;FONT-SIZE: 11pt; WIDTH: 600px; FONT-FAMILY: 宋體; BORDER-COLLAPSE: collapse" borderColor#3399ff…

使用flot.js 發現x軸y軸無法顯示軸名稱

添加此插件解決問題 flot-axislabels https://github.com/markrcote/flot-axislabels 轉載于:https://www.cnblogs.com/feehuang/p/4993920.html

快速冪、矩陣快速冪、快速乘法

快速冪 快速冪是我們經常用到的一種算法&#xff0c;快速冪顧名思義就是快速的冪運算。我們在很多題目中都會遇到冪運算&#xff0c;但是在指數很大的時候&#xff0c;我們如果用for或者是pow就會超時&#xff0c;這時候就用到了快速冪。 快速冪的原理就是&#xff0c;當求b^p的…

vue 前端顯示圖片加token_手摸手,帶你用vue擼后臺 系列二(登錄權限篇)

完整項目地址&#xff1a;vue-element-adminhttps://github.com/PanJiaChen/vue-element-admin前言拖更有點嚴重&#xff0c;過了半個月才寫了第二篇教程。無奈自己是一個業務猿&#xff0c;每天被我司的產品虐的死去活來&#xff0c;之前又病了一下休息了幾天&#xff0c;大家…

注釋工具_蘋果已購丨Notability丨功能強大而簡單易用的筆記及PDF注釋工具

點擊上方“天澤黑科技”右上角“...”點選“設為星標”點擊加星★ 貼近你心 ?今天給大家購買效率類排行第3名的 Notability &#xff01;大家在桌面 App store 登陸我的賬號&#xff0c;搜索下載即可&#xff01;榮獲 iPad、iPhone 和 Mac 的 Apple「編」愛新 App 殊榮&#x…

第四章 大網高級 ? NSSA

STUB、完全stub、NSSA、完全nssa實驗要求&#xff1a;1、配置IP地址2、配置OSPF多區域3、配置 stub 末梢區域4、配置完全stub末梢區域5、配置 nssa 非純末梢區域6、配置完全nssa非純末梢區域7、配置兩種協議相互注入重分發8、實現全網互通一、配置OSPF多區域二、配置rip v2三、…

[AlwaysOn Availability Groups] 健康模型 Part 2 ——擴展

[AlwaysOn Availability Groups] 健康模型 Part 2 ——擴展 健康模型擴展 第一部分已經介紹了AlwayOn健康模型的概述。現在是創建一個自己的PBM策略&#xff0c;然后設置為制定的歸類。創建這些策略&#xff0c;創建之后修改一下配置&#xff0c;dashboard就會自動評估這些策略…

665. Non-decreasing Array - LeetCode

Question 665. Non-decreasing Array Solution 題目大意&#xff1a; 思路&#xff1a;當前判斷2的時候可以將當前元素2變為4&#xff0c;也可以將上一個元素4變為2&#xff0c;再判斷兩變化后是否滿足要求。 Java實現&#xff1a; public boolean checkPossibility(int[] nums…

如何制作印章_如何用Photoshop制作個性印章/文字圖片

帶印章和文字的圖片&#xff0c;不僅可以作為個人的標簽&#xff0c;更能直接表達照片的意境&#xff0c;讓片子與眾不同。那么&#xff0c;怎樣才能給照片加印章和文字呢&#xff1f;或許方法有很多&#xff0c;甚至有多款App也可以直接做效果。但想要做出精細的效果&#xff…

麒麟810處理器_麒麟810性能實測:對比驍龍845驍龍730,誰更強?

隨著榮耀9X、Nova5i Pro一眾新機發布&#xff0c;采用7nm工藝制程的全新麒麟810進入了我們的視野。以手機處理器性能劃分產品定位向來是最為直接的方法&#xff0c;在搭載麒麟810的榮耀9X將價格下探到1399元后&#xff0c;這枚網友口中“拳打845&#xff0c;腳踢730”的中端神u…

打造全鍵盤操作的PDF閱讀器

其實我只想要一個非常簡單的PDF閱讀器&#xff0c;不要很花哨的功能&#xff0c;只要能夠&#xff1a; 速度夠快&#xff0c;不要翻一頁等半天&#xff1b;全鍵盤操作&#xff0c;不想在鼠標和鍵盤之間來回倒騰&#xff1b;可以改變背景色&#xff0c;深夜的白光好刺眼&#xf…