❶ 如何通過配置log4j.xml來列印指定類或指定級別的日誌信息
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPElog4j:configurationSYSTEM"log4j.dtd"><log4j:configurationxmlns:log4j='http://jakarta.apache.org/log4j/'>
<!--appender部分是可用的日誌輸出方式定義,可以定義多個-->
<appendername="STDOUT"class="org.apache.log4j.ConsoleAppender">
<layoutclass="org.apache.log4j.PatternLayout">
<paramname="ConversionPattern"value="%l%d{ISO8601}--%p--%m%n"/>
</layout>
</appender>
<appendername="DEBUG"class="org.apache.log4j.RollingFileAppender">
<paramname="File"value="e:/logs/debug.log"/>
<paramname="Append"value="true"/>
<paramname="MaxFileSize"value="10000KB"/>
<paramname="MaxBackupIndex"value="50"/>
<layoutclass="org.apache.log4j.PatternLayout">
<paramname="ConversionPattern"value="%l%d{ISO8601}--%p--%m%n"/>
</layout>
<filterclass="org.apache.log4j.varia.LevelRangeFilter">
<paramname="LevelMin"value="DEBUG"/>
<paramname="LevelMax"value="DEBUG"/>
</filter>
</appender>
<appendername="INFO"class="org.apache.log4j.RollingFileAppender">
<paramname="File"value="e:/logs/info.log"/>
<paramname="Append"value="true"/>
<paramname="MaxFileSize"value="10000KB"/>
<paramname="MaxBackupIndex"value="50"/>
<layoutclass="org.apache.log4j.PatternLayout">
<paramname="ConversionPattern"value="%l%d{ISO8601}--%p--%m%n"/>
</layout>
<filterclass="org.apache.log4j.varia.LevelRangeFilter">
<paramname="LevelMin"value="INFO"/>
<paramname="LevelMax"value="INFO"/>
</filter>
</appender>
<appendername="WARN"class="org.apache.log4j.RollingFileAppender">
<paramname="File"value="e:/logs/warn.log"/>
<paramname="Append"value="true"/>
<paramname="MaxFileSize"value="10000KB"/>
<paramname="MaxBackupIndex"value="50"/>
<layoutclass="org.apache.log4j.PatternLayout">
<paramname="ConversionPattern"value="%l%d{ISO8601}--%p--%m%n"/>
</layout>
<filterclass="org.apache.log4j.varia.LevelRangeFilter">
<paramname="LevelMin"value="WARN"/>
<paramname="LevelMax"value="WARN"/>
</filter>
</appender>
<appendername="ERROR"class="org.apache.log4j.RollingFileAppender">
<paramname="File"value="e:/logs/error.log"/>
<paramname="Append"value="true"/>
<paramname="MaxFileSize"value="10000KB"/>
<paramname="MaxBackupIndex"value="50"/>
<layoutclass="org.apache.log4j.PatternLayout">
<paramname="ConversionPattern"value="%l%d{ISO8601}--%p--%m%n"/>
</layout>
<filterclass="org.apache.log4j.varia.LevelRangeFilter">
<paramname="LevelMin"value="ERROR"/>
<paramname="LevelMax"value="ERROR"/>
</filter>
</appender>
<appendername="WATCHTASK"class="org.apache.log4j.RollingFileAppender">
<paramname="File"value="e:/logs/watchtask.log"/>
<paramname="Append"value="true"/>
<paramname="MaxFileSize"value="10000KB"/>
<paramname="MaxBackupIndex"value="50"/>
<layoutclass="org.apache.log4j.PatternLayout">
<paramname="ConversionPattern"value="%l%d{ISO8601}--%p--%m%n"/>
</layout>
<filterclass="org.apache.log4j.varia.LevelRangeFilter">
<paramname="LevelMin"value="INFO"/>
<paramname="LevelMax"value="INFO"/>
</filter>
</appender>
<!--category部分定義了特定包或者類的輸出級別和方式,可以有多個-->
<categoryname="org.apache">
<priorityvalue="warn"/>
<appender-refref="WARN"/>
</category>
<!--列印日誌到固定的文件中WATCHTASK選擇自定義的日誌級別設置-->
<categoryname="com.test.task.WatchTimerTask">
<priorityvalue="info"/>
<appender-refref="WATCHTASK"/>
</category>
<!--root部分定義了log4j的默認輸出級別和方式-->
<root>
<priorityvalue="warn"/>
<appender-refref="INFO"/>
<appender-refref="WARN"/>
<appender-refref="ERROR"/>
<appender-refref="STDOUT"/>
</root>
</log4j:configuration>
(1).輸出方式appender一般有5種:org.apache.log4j.RollingFileAppender(滾動文件,自動記錄最新日誌)org.apache.log4j.ConsoleAppender(控制台)??org.apache.log4j.FileAppender(文件)org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件)org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)(2).日記記錄的優先順序priority,優先順序由高到低分為OFF,FATAL,ERROR,WARN,INFO,DEBUG,ALL。Log4j建議只使用FATAL,ERROR,WARN,INFO,DEBUG這五個級別。(3).格式說明layout中的參數都以%開始,後面不同的參數代表不同的格式化信息(參數按字母表順序列出):%c輸出所屬類的全名%d輸出日誌時間其格式為%d{yyyy-MM-ddHH:mm:ss,SSS},可指定格式如%d{HH:mm:ss}%l?輸出日誌事件發生位置,包括類目名、發生線程,在代碼中的行數%n換行符%m輸出代碼指定信息,如info(「message」),輸出message%p輸出優先順序,即FATAL,ERROR等%r輸出從啟動到顯示該log信息所耗費的毫秒數%t輸出產生該日誌事件的線程名
❷ log4j 後面加spring包名是什麼意思
簡單的說log4j就是幫助開發人員進行日誌輸出管理的API類庫。它最重要的特專點就 可以配置文件靈活屬的設置日誌信息的優先順序、日誌信息的輸出目的地以及日誌信息的輸出格式。 Log4j除了可以記錄程序運行日誌信息外還有一重要的功能就是用來顯示調試信...
❸ 如何在web.xml配置log4j
<servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>com.log4j.Log4jInit</servlet-class>
<init-param>
<param-name>log4j</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
最基本的這樣的就版行權
❹ 在log4j中,怎樣將一個filter設置進appender中去
一:使用log4j.xml
1.log4j.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<! log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j= akarta.ap ache.or g/log4j/'>
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="/n[%r][%p][%t] %d{HH:mm:ss,SSS} method:%l/n%m%n"/>
</layout>
</appender>
<appender name="DEBUG" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="./logs/app-debug.log"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss},%m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="DEBUG"/>
<param name="LevelMax" value="DEBUG"/>
</filter>
</appender>
❺ 如何在spring 配置文件中配置log4j.xml
比較基本的來:
#rootLogger是所有日自志的根日誌,修改該日誌屬性將對所有日誌起作用
#下面的屬性配置中,所有日誌的輸出級別是info,輸出源是console
log4j.rootLogger=info,console
#定義輸出源的輸入位置是控制台
log4j.appender.console=org.apache.log4j.ConsoleAppender
#定義輸出日誌的布局採用的類
log4j.appender.console.layout=org.apache.log4j.PatternLayout
#定義輸出日誌布局
log4j.appender.console.layout.ConversionPattern=%d%p[%c] - %m%n
❻ log4j能配置成按java中不同的package輸出日子么
可以做到。
log4j可以根據不同包進行監聽,並採用不同的策略。
相信你看一下log4j.xml就知道怎麼用了
❼ log4j怎樣配置才能列印出執行語句所在的類名及行號
Log4j 輸出格式轉換字元說明
=================
c category的名稱,可使用{n}限制輸出的版精度。例如:logger名為權"a.b.c",%c{2}將輸出"b.c"。
C 產生log事件的java完全限定類名。可使用{n}限制輸出的精度。例如:「org.apache.xyz.SomeClass」,%C{2}將輸出「SomeClass」。
d 時間和日期的輸出格式,例如:%d{yyyy MM dd HH:mm:ss,SS},可不帶後面的日期格式字元。
❽ log4j.xml配置中<root>的作用
將logger中的 additivity 屬性配置為 false,則這個logger不會將日誌流反饋到root中。
可以達到以logger中配置的appender方式來輸出日誌而其他地方輸出的目的,看配置:
<appendername="DEMO"class="com.XXXXX.RollingFileAppender">
<paramname="file"value="${loggingRoot}/xxx.log"/>
<paramname="append"value="true"/>
<paramname="encoding"value="GB2312"/>
<paramname="threshold"value="info"/>
<paramname="MaxFileSize"value="50MB"/>
<paramname="MaxBackupIndex"value="10"/>
<layoutclass="org.apache.log4j.PatternLayout">
<paramname="ConversionPattern"value="%d[%X{requestURIWithQueryString}]%-5p%c{2}-%m%n"/>
</layout>
</appender>
<loggername="XXXX.XXXX.XXXX"additivity="false">
<levelvalue="${loggingLevel}"/>
<appender-refref="DEMO"/>
</logger>
root的作用是收集下面所有反饋上來的信息流並根據配置在root中appender進行輸出,只要你在looger中配置了additivity="false",就不會反饋到root中。
另外這種問題可以先自己google或者下,有很多答案的。
❾ Slf4j + Logback 怎麼過濾掉第三方包中的日誌顯示
其實這跟 Slf4J 通用日誌框架沒什麼關系,單單是 Logback 的事,把 Slf4J 扯進來只因它們是對黃金組合。
我們在 log4j 中想要不顯示第三方包的非常冗餘的日誌輸出時,只要在 log4j.properties 中寫上:
1
log4j.logger.org.hibernate=ERROR
這樣在 hibernate 里的日誌級別在 ERROR 以下的 TRACE、DEBUG、WARN 和 INFO 將不被輸出,控制台會比較的干凈。
Logback 的配置文件是 logback.xml,曾經在裡面給 <appender> 加的 <pattern> 是:
1
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
logger 名顯示 35 字元,類名優先顯示全,類全限名超過總長度則取前面若干包名的首字母連接起來,於是產生了像下面那樣的日誌輸出:
7937 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton
7781 [main] DEBUG o.h.loader.entity.EntityLoader - Static select for entity
這在 Log4J 中是未曾見過的。當時還以為日誌名就是 o.s.b.f 這樣的東西,於是在 logback.xml 中用
1
2
<logger name="o.s.b" level="WARN"/>
<logger name="o.h" level="WARN"/>
這樣的代碼來進行封鎖,根本就無濟於事,大量的 spring、hibernate 的 DEBUG、INFO 等日誌照樣輸出。這時惦記起 Logback 的 filter 功能來了,配置上:
01
02
03
04
05
06
07
08
09
10
11
<filter>
<evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator -->
<expression><![CDATA[
event.getThreadName().contains("Catalina")
|| event.getLoggerName().contains("o.s.b.f")
|| event.getLoggerName().contains("o.h.")
]]></expression>
</evaluator>
<OnMismatch>NEUTRAL</OnMismatch>
<OnMatch>DENY</OnMatch>
</filter>
也是沒有效果的。想來 Logback 與 Log4J 相比不會這么差勁的,再怎麼也是出自一人之手,想來思路應是一致的,還是該回到 <logger> 的配置上來。
還是 Google 威武,找到答案了:logback per-logger configuration is not working。原來像 "o.s.b.f" 和 "o.h." 這樣的東西只是神馬浮雲,假象而已,它們實際所代表的 logger 名並未變,分別是:
org.springframework.beans.factory.support.DefaultListableBeanFactory
org.hibernate.loader.entity.EntityLoader
所以呢,在 logback.xml 中像 Log4J 一樣寫上
1
2
<logger name="org.hibernate" level="WARN"/>
<logger name="org.springframework" level="WARN"/>
就把 Spring 和 Hibernate 的日誌輸出稍加過濾了,都是 %logger{35} 中的那個 {35} 惹的禍,不過也靠它多了解了一點東西。如果只寫成 %logger 話那時候當然可以很快的解決問題的。
❿ 你好,能問一下,用log4j輸出日誌的話。怎麼配置成過濾器呢,也就是只要登錄的我就輸出所有的action的日誌
在action的配置中配置攔截器,在攔截器里獲取參數記錄日誌