Ⅰ 如何用log4j輸出多個自定義日誌文件
輪襲log4j輸出多個自定義日和伏志文件
如果在實際應用中需要輸出獨立的日誌文件,怎樣才能把所需的內容從原有日誌中分離,形成單獨的日誌文件呢?
先看一個常見的log4j.properties文件,它是在控制台和test.log文件中記錄日誌:
復制代碼 代碼如下喚桐攜:
log4j.rootLogger=DEBUG, stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=log/test.log
log4j.appender.logfile.MaxFileSize=128MB
log4j.appender.logfile.MaxBackupIndex=3
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
如果在同一類中需要輸出多個日誌文件呢?其實道理是一樣的,先在Test.java中定義:
復制代碼 代碼如下:
private static Log logger1 = LogFactory.getLog("mylogger1");
private static Log logger2 = LogFactory.getLog("mylogger2");
log4j.properties中配置如下:
復制代碼 代碼如下:
log4j.logger.mylogger1=DEBUG,test1
log4j.appender.test1=org.apache.log4j.FileAppender
log4j.appender.test1.File=log/test1.log
log4j.appender.test1.layout=org.apache.log4j.PatternLayout
log4j.appender.test1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
log4j.logger.mylogger2=DEBUG,test2
log4j.appender.test2=org.apache.log4j.FileAppender
log4j.appender.test2.File=log/test2.log
log4j.appender.test2.layout=org.apache.log4j.PatternLayout
log4j.appender.test2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
不同日誌要使用不同的logger(如輸出到test1.log的要用logger1.info("abc"))。
還有一個問題,就是這些自定義的日誌默認是同時輸出到log4j.rootLogger所配置的日誌中的,如何能只讓它們輸出到自己指定的日誌中呢?別急,這里有個開關:
log4j.additivity. mylogger1 = false
它用來設置是否同時輸出到log4j.rootLogger所配置的日誌中,設為false就不會輸出到其它地方了。
但是這種方式有個小缺陷,那就是列印的日誌中類名只能是mylogger或者mylogger2。
2 動態配置路徑
若程序需要的.日誌路徑需要不斷的變化,而又不可能每次都去改配置文件,此時可以利用環境變數來解決。
log4j的配置如下:
復制代碼 代碼如下:
log4j.rootLogger=DEBUG,INFOLOG,DEBUGLOG
#info log
log4j.appender.INFOLOG =org.apache.log4j.DailyRollingFileAppender
log4j.appender.INFOLOG.File= ${log.dir}/${log.info.file}
log4j.appender.INFOLOG.DatePattern=.yyyy-MM-dd
log4j.appender.INFOLOG.Threshold=INFO
log4j.appender.INFOLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.INFOLOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
#debug log
log4j.appender.DEBUGLOG =org.apache.log4j.RollingFileAppender
log4j.appender.DEBUGLOG.File= ${log.dir}/${log.debug.file}
log4j.appender.DEBUGLOG.Threshold=DEBUG
log4j.appender.DEBUGLOG.MaxFileSize=128MB
log4j.appender.DEBUGLOG.MaxBackupIndex=3
log4j.appender.DEBUGLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.DEBUGLOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
此時,在使用log列印日誌之前,需要利用System定義日誌的輸出路徑和文件名的環境變數:
復制代碼 代碼如下:
System.setProperty(「log.dir」, logDir);
System.setProperty(「log.info.file」, infoLogFileName);
System.setProperty(「log.debug.file」, debugLogFileName);
附:Pattern參數的格式含義
%c 輸出日誌信息所屬的類的全名
%d 輸出日誌時間點的日期或時間,默認格式為ISO8601,也可以在其後指定格式,比如:%d{yyy-MM-dd HH:mm:ss },輸出類似:2013-8-19- 22:10:28
%f 輸出日誌信息所屬的類的類名
%l 輸出日誌事件的發生位置,即輸出日誌信息的語句處於它所在的類的第幾行
%m 輸出代碼中指定的信息,如log(message)中的message
%n 輸出一個回車換行符,Windows平台為「/r/n」,Unix平台為「/n」
%p 輸出優先順序,即DEBUG,INFO,WARN,ERROR,FATAL。如果是調用debug()輸出的,則為DEBUG,依此類推
%r 輸出自應用啟動到輸出該日誌信息所耗費的毫秒數
%t 輸出產生該日誌事件的線程名
Ⅱ 【日誌】Log4j2配置
在同步日誌模式下, Logback的性能是最糟糕的,log4j2的性能無論在同步日誌模式還是非同步日誌模式下都是最佳的。本章主要介紹Spring Boot如何集成並配置使用Log4j2
引入Log4j2依賴包,其它依賴和Logback一樣,使用SLF4J統一輸出
然後需要在resource下面添加log4j2.xml配置文件,當然了如果你不添加,springboo會提示你沒有對應文件,並使用默認的配置文件,這個時候級別可以在application.properties中配置
和logback配置類似,主要是含有loggers、appenders,其中loggers由logger,root組成。appenders由console(控制台),File、RollingFile(輸出文件)組成,作用和配置和logback差不多
(1)Console
用來定義輸出到控制台的Appender,主要設置輸出格式和level級別
ThresholdFilter: 定義列印級別,onMismatch值設置是否拒絕其它
(2)File
用來定義輸出到指定位置的文件的Appender
(3)RollingFile
用來定義超過指定條件自動刪除舊的,創建新的Appender
參數說明:
Root節點用來指定項目的根日誌,如果沒有單獨指定Logger,那麼就會默認使用該Root日誌輸出
參數說明:
變數配置,類似常量定義
默認情況下springboot是不將日誌輸出到日誌文件中,這里對日誌框架的支持有兩種配置方式(和logback一樣):
(1)application.properties 或 application.yml (系統層面)
(2)logback-spring.xml (自定義文件方式)
默認名log4j2-spring.xml,可以省下在application.yml中配置,如果自定義了文件名,需要在application.yml中配置
此種方式可以處理比較復雜的情況,比如區分 info 和 error 日誌、每天產生一個日誌文件。
通過在DefaultRolloverStrategy 標簽下添加Delete標簽實現,保留7天的日誌
IfLastModified .age要和filePattern精確的時間一致, 否則貌似無效.
Ⅲ JAVA的log4j如何實現程序重新啟動會自動生成新的日誌文件,文件名可以是當前日期
log4j輸出日誌文件時以當前日期為文件名
在初始化日誌配置後加入以下代碼:
Java代碼 Appender appender = LogManager.getLoggerRepository().getRootLogger().getAppender("A2"); if(appender instanceof FileAppender) { FileAppender fileAppender = (FileAppender)appender; fileAppender.setFile( "log/" + DateUtil.getFormatDate() + ".log"伍老輪); fileAppender.activateOptions(); } //DateUtil.getFormatDate();是指得到腔信當前格式化後的日期
要是通過配置生成日期是含慶不可能的
Ⅳ 2019-07-03 log4j2 自定義ElasticSearch Appender
通過自定義appender可實現日誌系統日誌直接存儲到ES
log4j2 提供了抽象類圓塌AbstractAppender,通過繼承抽線類可實現自定義appender
例如:實現ElasticSearchAppender保存日誌
@Plugin註解實現定義appender名稱,即log4j2.xml配置文件中配置時使用的appender名稱,例:
插件構建註解,定義創建appender邏輯。通過@PluginAttribute、@PluginElement 定義配置文件可傳入的參數值。
通過重寫append方法實現自定義日誌操作,例如日誌格式化,存儲邏輯自定義。
簡單的自定義appender實現方蠢擾式,實際封裝還可以考慮異橘檔圓步收集,批量收集、失敗重試等功能完善。
Ⅳ log4j2 配置相關問題備忘
通常log42j的配置都是通過xml的語法形式,但也支持java配置文件properties的形式來配置
xxx.type代哪咐表的對應的一個節點的開始,節點類型通過type來設置對應
比如rolling.type=RollingRandomAccessFile 將rolling設置為RollingRandomAccessFile類型伏改,之後就可以通過
來設置這個節點的屬性,其中rolling名字為自定義的名稱
對應的xml配置應該為
https://logging.apache.org/log4j/2.x/manual/appenders.html#
https://logging.apache.org/log4j/2.x/manual/configuration.html
該屬性必須和filePattern配合
如filePattern = ${karaf.data}/log/karaf_%d{yyyy-MM-dd-HH-mm} %i.log 代表按分鍾劃分文件
filePattern = ${karaf.data}/log/karaf %d{yyyy-MM-dd}_%i.log 代表按天劃分文件
<DefaultRolloverStrategy max=5>表示保存的文件個數,如果和TimeBasedTriggeringPolicy策略按時間段劃分文件配合,則表示該時間段內能保存的最大文件個數
<DefaultRolloverStrategy>節點下的 custom delete action 用李廳純於自定義文件刪除的策略,如設置多少時間後刪除對應的文件
這個功能需要 log4j-2.5以後的版本,具體可參考文檔
https://logging.apache.org/log4j/2.x/manual/appenders.html#CustomDeleteOnRollover
Ⅵ LOG4J, 怎麼實現讓日誌文件大小,每到2M的時候生成新文件,並且指定新的文件名
log4j.rootLogger=info, A1, A2
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%p] %-d{yyyy-MM-dd HH:mm:ss} [%c %M] %m%n
log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A2.DatePattern=yyyy-MM-dd'.log'
#自己設置日派弊昌胡志輸出路徑
log4j.appender.A2.File= D:/logs/塵迅族log4j-
#log4j.appender.A2.MaxFileSize=2MB
#log4j.appender.A2.MaxBackupIndex=100
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=[%p] %-d{yyyy-MM-dd HH:mm:ss} [%c %M] %m%n
Ⅶ 如何在JBoss WildFly 8 自定義log4j日誌
如果你使用的是JBOSS5的話,那麼你可以在server/xxx/雹弊conf目錄中找到jboss-service.xml。這個文件里搜索log4j的jmx服務,如下修改碼指:
<mbean code="org.jboss.logging.Log4jService"
name="jboss.system:type=Log4jService,service=Logging"
xmbean-dd="resource:xmdesc/Log4jService-xmbean.xml">源模族
<attribute name="ConfigurationURL">resource:jboss-log4j.xml</attribute>
把jboss-log4j.xml改為log-config.xml。就可以實現你想要的功能。
Ⅷ 如何編寫log4j.properties文件,配置日誌信息
第一步:在工程中加入log4j所使用的jar文件
1:項目 > 屬性 :彈出項目的屬性窗口
2:Java構建路徑>?庫>?添加外部JAR:彈出選擇JAR的窗口
3:通過選擇JAR的窗口,找到log4j-1.2.x.jar,並確認
4:回到項目的屬性窗口,點擊確定
第二步:創建log4j.properties文件
1:選擇欲使用log4j的項目>?右鍵點擊src >?新建>?其他 :彈出選擇向導窗口
2:在選擇向導窗口中,選擇常規?> 文件?> 下一步:彈出新建文件的窗口
3:在新建文件窗口中,輸入文件名log4j.properties ? 完成:創建工作結束
第三步:使用log4j記錄日誌信息
import org.apache.log4j.Logger;
public class Log4j {
public static void main(String[] args) {
Logger logger = Logger.getLogger(AccpTeacherLog4j.class.getName());//獲取日誌記錄器,這個記錄器將負責控制日誌信息
try {
logger.debug("設置教員的編號。");//使用Logger對象的debug、info方法輸出日誌信息
} catch (IllegalArgumentException ex) {
logger.info(ex.getMessage());//使用Logger對象的debug、info方法輸出日誌信息
}
}
}
第四步:編寫log4j.properties文件,配置日誌信息
### 把日誌信息輸出到控制台 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender//日誌信息將寫到控制台
log4j.appender.stdout.Target=System.out//信息列印到System.out上
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %m%n//指定輸出格式:顯示日期和log信息
### 把日誌信息輸出到文件:accp.log ###
log4j.appender.file=org.apache.log4j.FileAppender//日誌信息將寫到文件中
log4j.appender.file.File=accp.log//指定日誌輸出的文件名
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l %m%n//指定輸出格式:顯示日期,日誌發生位置和日誌信息
### 設置優先順序別、以及輸出源 ###
log4j.rootLogger=debug, stdout, file//設置優先順序別為debug、
日誌被輸出到多個輸出源
註:優先順序從高到低分別是ERROR、WARN、INFO、DEBUG
在此處,如果優先順序別設為info,那麼使用debug方法列印的日誌信息將不被輸出
Ⅸ 怎樣用log4j生成以當天日期為名的日誌文件名啊(比如說:2010-3-30.log)
貌似不可以。
用DailyRollingFileAppender 的話可以生成:
文件名.2010-03-30 的日誌文件
===============================================
http://www.wangjicn.cn/data/read/10012903474485.html
我x,找到了,正好我也需要用呢。哈啊專哈。
你把裡面屬的 .html 改成你要的後綴,運行一下程序,然後改一下時間再運行一下程序,看看是不是成功了。
Ⅹ 如何在eclipse中使用log4j
工具/原料
Eclipse
方法/步驟
到官網下載對應版本的log4j的jar包:
http://archive.apache.org/dist/logging/log4j/
選擇要使用的版本,直接點擊下載.zip後綴的壓縮文件即可。
為java項目導入log4j.jar包:
在Eclipse中新建一個java項目,右鍵單擊該項目選擇「屬性(properties)」打開當前項目的屬性窗口,選擇Java構建路徑(Java Build Path)>>庫(Libaries)>>添加外部JAR(Add External JARs),將剛才下載的log4j.jar包添加到項老空攔目中去。
在項目中新建一個log4j.properties的配置文件:
該文件專門用於配置日誌信息,其內容決定日誌信息的輸出位置及格式。右鍵單擊項目選擇 新建 >侍胡> 文件 ,文件名命名為 xxx.properties
將配置信息寫入到剛才建立的文件log4j.properties中去:
###將日誌信息輸出到控制台###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}%m%n %l%n
###將日誌信息輸出到文件中###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=sysInfo.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}%m%n %l%n
###設置日誌的優先順序別###
log4j.rootLogger=debug,stdout,file
新建一個java文件,測試配置是否成功:
import org.apache.log4j.Logger;
public class Log4jDemo {
public static void main(String[] args) {
Logger log = null;
try{
// 初始化日誌生成器,載入日誌配置文件
//PropertyConfigurator.configure("bin/log4j.properties");
log = Logger.getLogger(Log4jDemo.class.getName());
log.debug("main");
int i = 1/0;
} catch(Exception e){
// 記錄日誌
log.info(e.getMessage());
//e.printStackTrace();
}
}
}
查看生成的日誌文件,發現日誌寫入成功。
END
注意事項
新建log4j的配置文件時後綴名一定是.properties
初始化日誌生成器,載入日誌配置虧備文件時,配置文件的路徑不要弄錯了