Log4j不同級別輸出到不同檔案的幾種方式
log4j已經是古董了,但是現在專案還在用,需要用到不同級別輸出到不同檔案,所以把幾種實現方式記錄下來,備忘!
下面的幾種配置都是使用properties的情況,但是xml的原理也一樣.
- 使用LevelRangeFilter
- 使用LevelMatchFilter
自定義Appender
最後再貼出下面一種需求的配置檔案
- 專案info和error級別日誌分開記錄為 allInfo,allError檔案
- 其中A模組的日誌單獨記錄為afile
- 其中A模組的info級別日誌只在afile記錄,不在allinfo記錄(info只記錄一次)
- 其中A模組的error級別日誌在afile,allError中都記錄
下面詳細說明:
- 1.使用LevelRangeFilter
- 這個應該是3種裡面最方便的,配置如下
log4j.appender.InfoFile = org.apache.log4j.RollingFileAppender
log4j.appender.InfoFile.File = logs/info1.log
log4j.appender.InfoFile.MaxFileSize = 10MB
log4j.appender.InfoFile.Threshold = INFO
log4j.appender.InfoFile.layout = org.apache.log4j.PatternLayout
log4j.appender.InfoFile.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
log4j.appender.InfoFile.filter.F1=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.InfoFile.filter.F1.LevelMin=INFO
log4j.appender.InfoFile.filter.F1.LevelMax=INFO
這裡通過Threshold指定輸出級別為INFO,但是預設的大於INFO的也會輸出.
下面增加的filter指定了最大級別和最小級別,都為INFO,所以最終只會輸出INFO級別.
- 2.使用LevelMatchFilter
- 這個配置就稍微多點了,例如,我們輸出INFO級別的,需要下面配置
log4j.appender.InfoFile2 = org.apache.log4j.RollingFileAppender
log4j.appender.InfoFile2.File = logs/info2.log
log4j.appender.InfoFile2.MaxFileSize = 10MB
log4j.appender.InfoFile2.Threshold = INFO
log4j.appender.InfoFile2.layout = org.apache.log4j.PatternLayout
log4j.appender.InfoFile2.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
log4j.appender.InfoFile2.filter.F1=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.InfoFile2.filter.F1.levelToMatch=INFO
log4j.appender.InfoFile2.filter.F1.AcceptOnMatch=true
log4j.appender.InfoFile2.filter.F2=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.InfoFile2.filter.F2.levelToMatch=ERROR
log4j.appender.InfoFile2.filter.F2.AcceptOnMatch=false
log4j.appender.InfoFile2.filter.F3=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.InfoFile2.filter.F3.levelToMatch=WARN
log4j.appender.InfoFile2.filter.F3.AcceptOnMatch=false
log4j.appender.InfoFile2.filter.F4=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.InfoFile2.filter.F4.levelToMatch=DEBUG
log4j.appender.InfoFile2.filter.F4.AcceptOnMatch=false
這裡要注意的就是指定匹配級別INFO為true後,還需要把其他級別都設定為false,否則其他級別還是會輸出(包括低於Threshold指定的級別).
- 3.自定義Appender
- 一種常見的配置檔案如下
log4j.rootLogger=INFO,InfoFile3,errorFile3
log4j.appender.InfoFile3 = org.apache.log4j.RollingFileAppender
log4j.appender.InfoFile3.File = logs/info3.log
log4j.appender.InfoFile3.MaxFileSize = 10MB
log4j.appender.InfoFile3.Threshold = INFO
log4j.appender.InfoFile3.layout = org.apache.log4j.PatternLayout
log4j.appender.InfoFile3.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
log4j.appender.errorFile3 = org.apache.log4j.RollingFileAppender
log4j.appender.errorFile3.File = logs/error3.log
log4j.appender.errorFile3.MaxFileSize = 10MB
log4j.appender.errorFile3.Threshold = ERROR
log4j.appender.errorFile3.layout = org.apache.log4j.PatternLayout
log4j.appender.errorFile3.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
這裡我們通過Threshold已經指定了級別,但是由於預設的實現會輸出大於等於指定級別的,所以我們可以修改下這個預設實現.
package com.dingcheng.log;
import org.apache.log4j.Priority;
import org.apache.log4j.RollingFileAppender;
public class MyRollingFileAppender extends RollingFileAppender {
@Override
public boolean isAsSevereAsThreshold(Priority priority) {
return this.getThreshold().equals(priority);
}
}
然後配置檔案中使用自定義的類
log4j.rootLogger=INFO,InfoFile3,errorFile3
log4j.appender.InfoFile3 = com.dingcheng.log.MyRollingFileAppender
log4j.appender.InfoFile3.File = logs/info3.log
log4j.appender.InfoFile3.MaxFileSize = 10MB
log4j.appender.InfoFile3.Threshold = INFO
log4j.appender.InfoFile3.layout = org.apache.log4j.PatternLayout
log4j.appender.InfoFile3.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
log4j.appender.errorFile3 = com.dingcheng.log.MyRollingFileAppender
log4j.appender.errorFile3.File = logs/error3.log
log4j.appender.errorFile3.MaxFileSize = 10MB
log4j.appender.errorFile3.Threshold = ERROR
log4j.appender.errorFile3.layout = org.apache.log4j.PatternLayout
log4j.appender.errorFile3.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
這樣就可以了.
當然除了上面的3種方法,還有自定義一個類,裡面不同級別指向不同的檔案
public class LogUtil{
public static void error(String msg) {
Logger.getLogger("error").error(msg);
}
}
方法很多,找個最簡單的就可以了.
最後再貼出下面一種需求的配置檔案
1. 專案info和error級別日誌分開記錄為 allInfo,allError檔案
2. 其中A模組的日誌單獨記錄為afile
3. 其中A模組的info級別日誌只在afile記錄,不在allinfo記錄(info只記錄一次)
4. 其中A模組的error級別日誌在afile,allError中都記錄
#根設定,輸出級別為info級別, 輸出檔案為 allInfo,allError
log4j.rootLogger=INFO,allInfo,allError
#定義allInfo的詳細配置,只記錄info級別
log4j.appender.allInfo = org.apache.log4j.RollingFileAppender
log4j.appender.allInfo.File = /logs/allInfo.log
log4j.appender.allInfo.MaxFileSize = 50MB
log4j.appender.allInfo.Threshold = INFO
log4j.appender.allInfo.layout = org.apache.log4j.PatternLayout
log4j.appender.allInfo.layout.ConversionPattern =[%p] %-d{yyyy-MM-dd HH:mm:ss} [%t] [%l]--> %m %x %n
log4j.appender.allInfo.filter.F1=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.allInfo.filter.F1.LevelMin=INFO
log4j.appender.allInfo.filter.F1.LevelMax=INFO
#定義allError的詳細配置,只記錄error級別
log4j.appender.allError = org.apache.log4j.RollingFileAppender
log4j.appender.allError.File = /data/wuliu-provider/logs/order-error.log
log4j.appender.allError.MaxFileSize = 50MB
log4j.appender.allError.Threshold = ERROR
log4j.appender.allError.layout = org.apache.log4j.PatternLayout
log4j.appender.allError.layout.ConversionPattern=[%p] %-d{yyyy-MM-dd HH:mm:ss} [%t] [%l]--> %m %x %n
#A模組單獨配置,輸出級別為INFO,輸出檔案為 afile,allError ; additivity=false指定不繼承根設定
log4j.logger.AMODULE=INFO,afile,allError
log4j.additivity.AMODULE = false
log4j.appender.afile = org.apache.log4j.RollingFileAppender
log4j.appender.afile.File = /data/wuliu-provider/logs/YuanCheng.log
log4j.appender.afile.MaxFileSize = 50MB
log4j.appender.afile.Threshold = INFO
log4j.appender.afile.layout = org.apache.log4j.PatternLayout
log4j.appender.afile.layout.ConversionPattern =[%p] %d{yyyy-MM-dd HH\:mm\:ss} [%c]%m%n
在程式碼中使用A模組的單獨輸出,則
private static Logger logger = Logger.getLogger("AMODULE");//指定配置檔案中的名稱
相關推薦
JavaScript 輸出訊息的幾種方式
轉載:https://blog.csdn.net/cym_bj/article/details/55096151 1,window.alert() 在頁面彈出一個對話方塊。早期js除錯使用。(其中window可以省略) 2、confirm()在頁面彈出一個對話方塊。多一個取
輸入輸出流的幾種方式
一些自己對io流的錯誤嘗試 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileOutputStream; impo
Asp.net下載檔案幾種方式
protected void Button1_Click(object sender, EventArgs e) { /* 微軟為Response物件提供了一個新的方法TransmitFile來解決使用Response.BinaryWrite 下載超過400mb的檔案時導致Aspnet_wp.
asp.net 下載檔案幾種方式
protected void Button1_Click(object sender, EventArgs e) { /* 微軟為Response物件提供了一個新的方法TransmitFile來解決使用Response.BinaryWrite 下載超過400mb的檔案時導
java讀取寫入檔案幾種方式效率比較
public class ReadTxtJson {public static String readTxtFile(String FileName) throws Exception {BufferedInputStream bufferedInputStream = n
Log4j不同級別輸出到不同檔案的幾種方式
log4j已經是古董了,但是現在專案還在用,需要用到不同級別輸出到不同檔案,所以把幾種實現方式記錄下來,備忘! 下面的幾種配置都是使用properties的情況,但是xml的原理也一樣. 使用LevelRangeFilter 使用LevelMatchFil
Log4j按級別輸出日誌到不同文件配置
tails lin file true nds 配置文件 http strong 自定義 1、自定義LogFileAppender類,繼承DailyRollingFileAppender,實現Log4j按級別輸出日誌到不同文件。 package com.liying.
logback日誌輸出不同級別到不同檔案(開發例項配置)
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 控制檯 appender --> <appender name="STDOUT" class="
不同頁面之間實現參數傳遞的幾種方式
瀏覽器 行存儲 傳遞參數 如何 數據傳遞 序列 由於 文件中 request對象 由於web系統采用http協議在瀏覽器和服務器之間傳輸數據,而http協議是一種無狀態的協議,如何在不同頁面之間傳遞數據,可以有一下幾種方式: 方式一:表單方式傳遞表單傳遞參數是一種最簡單,也
js裡宣告函式有幾種方式? var abc = function(x){} 和 function abc(x){} 這兩種宣告方法有什麼不同?
先後者是指函式宣告,前者是指函式表示式,他們之間的區別是後者會在程式碼執行之前被JS直譯器載入到作用域中,這樣一來就可以在程式設計時在定義函式之前呼叫這個函式,此法是有效的;而前者則是在程式碼執行到那一行時候才會有定義,此外函式表示式是建立了一個匿名函式,然後將
關於在hadoop上job執行的幾種方式(不同平臺)
mr job的幾種執行模式 1、在eclipse中開發好mr程式(windows或linux下都可以),然後打成jar包(wc.jar),上傳到伺服器 執行命令 hadoop jar wc.jar cn.itheima.hadoop.MainClassRunner 這種
【巨坑】springmvc 輸出json格式數據的幾種方式!
mapping cep process 添加 exc 文件中 != style find 最近公司項目需要發布一些數據服務,從設計到實現兩天就弄完了,心中竊喜之。 結果臨近部署時突然發現。。。。。 服務輸出的JSON 數據中 date 類型數據輸出格式要麽是時間戳,要麽
JS輸出訊息(alert)的幾種方式
<script type="text/javascript"> //直接彈出,無取消按鈕 alert("alert"); //有取消按鈕 confirm("Confirm"); //彈出輸入框 prompt("prompt");
WPFの操作檔案瀏覽框幾種方式
原文: WPFの操作檔案瀏覽框幾種方式 方式1: 使用win32控制元件OpenFileDialog Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog(); ofd.DefaultExt
JavaScript~檔案下載的幾種方式
1.通過a標籤的方式來下載 <a href='' target='_blank'></a> 2.通過提交form表單的方式 var $form = $('<form action="'+url+'"
C# 寫入檔案的幾種方式
1. FileStream.Write string filePath = Directory.GetCurrentDirectory() + "\\" + Process.GetCurrentProcess().ProcessName + ".txt"; if (File.Exist
Java讀取resource檔案/路徑的幾種方式
方式一: String fileName = this.getClass().getClassLoader().getResource("檔名").getPath();//獲取檔案路徑 String fileUtl = this.getClass().getResource("檔名").getFi
bat批處理執行python 的幾種方式 ———— 批處理, python打包成 exe檔案
第一種方式: @echo off C: cd C:\Users\ldl\Desktop start python test100.py start python 1.py start python 1.py 10 start python 1.py 100 exit 第二種方
Python讀取WAV檔案的幾種方式整理
1)scipy from scipy.io import wavfile import numpy as np sample_rate, sig = wavfile.read('new.wav') print("取樣率: %d" % sample_rate) print(sig)
Python檔案操作中的a,a+,w,w+幾種方式的區別 ——轉載
轉載:https://blog.csdn.net/qq_38059635/article/details/81606977 第一步 排除檔案開啟方式錯誤: r只讀,r+讀寫,不建立 w新建只寫,w+新建讀寫,二者都會將檔案內容清零 (以w方式開啟,不能讀出。w+可讀