導航:首頁 > 凈水問答 > log4j過濾指定包

log4j過濾指定包

發布時間:2021-02-15 00:05:22

1. log4j怎樣控制只輸出自己寫的代碼的日誌,不輸出框架中的日誌

1、輸出兩次是來因為自mylog配置有誤:log4j.appender.myLog.Target=System.out,你應該是要改成一個輸出到一個文件吧,控制台已經有輸出了。

2、類名問題: private static Logger log = Logger.getLogger("myLog"); 這種寫法也可以,在輸出項配置中直接寫一個%c或%l試試,應該沒有用Ant運行吧,如果是Ant編譯的話有一個DEBUG的選項要啟用才行。

3、輸出指定包的方法直接log4j.logger.包名。可以通過log4j.rootLogger=OFF來屏蔽其他輸出。以下配置屏蔽SSH框架的日誌輸出:

log4j.logger.org.springframework=OFF
log4j.logger.org.apache.struts2=OFF
log4j.logger.com.opensymphony.xwork2=OFF
log4j.logger.com.ibatis=OFF
log4j.logger.org.hibernate=OFF

2. 如何通過配置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輸出產生該日誌事件的線程名

3. java jar怎麼把指定目錄排除掉再進行打包

在項目的pom.xml文件裡面添加如下配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<warName>loginweb</warName>
<outputDirectory>target</outputDirectory>
<!-- 排除 -->
<packagingExcludes>
WEB-INF/classes/*jdbc.properties,
WEB-INF/classes/*config.properties,regex[WEB-INF/lib/(?!log4j-1|common-1).*.*.jar]
</packagingExcludes>
</configuration>
</plugin>
配置說明:
1. WEB-INF/classes/*_jdbc.properties: 過濾 任何前綴的 _jdbc.properties 配置文件(如:我上篇博客自動打不同環境的包中提到的添加的不同環境的jdbc配置文件,那麼在打包時候,排除自己添加的這個配置文件)
2. %regex[WEB-INF/lib/(?!log4j-1|common-1)...jar] 通過正在表達式配置打包時,排除除了log4j-1和common-1 的 1.任何版本的jar包。即打包時只添加這兩個jar包到war包裡面,其他的任何jar都排除不打包進去
(PS:為了tomcat 共享jar包,所以項目中不打jar,當然除了自己項目間相互依賴的jar,比如這個jar會經常自己修改,那麼經常修改的,就不排除,打包時候把他們也打進去。對於tomcat如何共享jar包,後續再詳細描述)
3. 如果有多個條件,用逗號隔開。對於packagingExcludes 的詳細使用,請查看官網:
http://maven.apache.org/plugins/maven-war-plugin/examples/including-excluding-files-from-war.html

4. 你好,能問一下,用log4j輸出日誌的話。怎麼配置成過濾器呢,也就是只要登錄的我就輸出所有的action的日誌

在action的配置中配置攔截器,在攔截器里獲取參數記錄日誌

5. 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 話那時候當然可以很快的解決問題的。

6. 如何排除掉jar包里的 log4j.properites

log4j調整日誌的級別不輸出,或者調整spring的日誌級別
說實話,你的原意我沒看太懂。

7. 怎麼通過log4j文件控制jar包裡面的日誌輸出

我們的抄程序裡面使用了log4j來記錄日誌,客戶要求我們不需要配置log4j.properties文件,然後打成jar包。

然後客戶使用的使用可以通過他們的程序來控制我們的jar包裡面的日誌。

也就是說:如果客戶端需要打我們的日誌,我們告訴他們怎麼修改log4j配置文件,這樣我們的日誌就能打出來。

8. 如何通過log4j文件控制jar包裡面的日誌輸出

#DEBUG>INFO>ERROR
#Outputpattern:date[thread]prioritycategory-message
log4j.rootLogger=DEBUG,Console

#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d[%t]%-5p[%c]-%m%n

#spring
log4j.logger.org.springframework=INFO

#hibernate
log4j.logger.org.hibernate=INFO

#apache
log4j.logger.org.apache=ERROR

#broad
log4j.logger.com.miuthon.jpa=DEBUG

我相信這個比較容易懂

記得要log4j.jar 等相關jar包依賴才行哦

9. java 日誌列印堆棧如何實現包級過濾

目前使用的來 log4j2.xml 方案列印的日自志。但因為 web 項目必然用到各種框架工具包之類的,導致列印的日誌堆棧信息中,有很多 spring 的包中的類調用鏈。
想實現,列印的堆棧信息,只有我指定的包前綴的才列印出來。比如我們自己編寫的一段代碼執行時報錯了,那麼執行出現如下堆棧信息:
java.lang.NumberFormatException: null
at net.oschina.aaa(aaa.java:80) ~[classes/:?]
at net.oschina.bbb(bbb.java:70) ~[classes/:?]
at net.oschina.ccc(ccc.java:60) ~[classes/:?]
at net.oschina.ddd(ddd.java:50) ~[classes/:?]

10. log4j2 怎麼才能不列印第三方包日誌到日誌文件中

<logger name="com.*.*" level="error">
<AppenderRef ref="Console"/>
<appender-ref ref="RUNNING-LOG" />
<appender-ref ref="ERROR-LOG" />
</logger>
這種來方式在本地啟動控制自台確實是不列印info的日誌了,但是在日誌文件中還是記錄了

閱讀全文

與log4j過濾指定包相關的資料

熱點內容
凈水機濾芯更換怎麼申請 瀏覽:492
新開源凈水器多少錢一台 瀏覽:206
純水的水勢為什麼比溶液的高 瀏覽:78
完美凈水器價格是多少 瀏覽:200
養殖廢水處理方案百度文庫 瀏覽:397
過濾材料ph升高 瀏覽:433
過濾是不是越強大越好 瀏覽:227
監測污水處理的資質 瀏覽:147
電瓶蒸餾水加滿可以么 瀏覽:912
污水管屬於排水系統 瀏覽:251
飲水機接水處怎麼更換 瀏覽:551
制葯廠濾芯怎麼滅菌 瀏覽:888
污水泵的編碼怎麼看 瀏覽:688
河南含鎘廢水處理價格如何 瀏覽:210
有機廢水和氟離子水有什麼危害 瀏覽:950
農村污水處理設備需要多少錢 瀏覽:760
彈簧水濾芯怎麼用 瀏覽:617
口腔門診污水處理器表 瀏覽:669
生活污水綜合利用方法 瀏覽:754
飲水機的gallon是什麼意思 瀏覽:756