一.log4j簡介:
log4j官方下載地址:jakarta.apache.org/log4j?
log4j是Apache的一個開源日志組件,可以為我們提供非常強大又便捷的日志記錄扳剿。
log4j日志有七個等級:all<debug<info<warn<error<fatal<off
二.log4j配置:
不同類型的項目引入log4j的方式是不同的夯尽。
但是需要配置的內(nèi)容是大致一樣的(日志級別琅束、日志格式和記錄顯示/保存位置等)歼捏。
1.在Maven項目中
1.1.在maven中引入log4j的依賴
1.2.在src/main/java中創(chuàng)建log4j.properties配置文件
1.3.在java文件中使用log4j進行日志記錄
//在Maven項目中的依賴
<dependency>
? ? ? ? <groupId>log4j</groupId>
? ? ? ? <artifactId>log4j</artifactId>
? ? ? ? <version>1.2.17</version>
</dependency>
//log4j.properties配置文件
log4j.rootLogger = INFO,console? ? //定義輸出器等級和名字
log4j.additivity.org.apache = true? ? //表示不會在父logger中的appender輸出,默認true
#console
log4j.appender.console = org.apache.log4j.ConsoleAppender //指定logger的輸出位置
log4j.appender.console.Threshold = INFO? ? //指定日志的最低級別雌续,默認DEBUG
log4j.appender.console.ImmediateFlush = true? ? //表示所有信息都會被立即輸出
log4j.appender.console.Target=System.out? ? ?//默認值為System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout? ? ?//指定輸出內(nèi)容及格式?
//輸出日志時間點的時間或日期吨掌,默認格式為ISO8601
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p]?%m%n
#在JAVA文件中使用log4j記錄日志
public class MainTest(){
? ? public static void main(String[] args){
? ? ? ? new Test.test();
? ? }
}
public class Test(){
? ? final Logger logger = Logger.getLogger(MainTest.class);
? ? public void test(){
? ??????logger.info("hello world");? ?
? ? }
}
2.在普通java/spring項目中
2.1.將log4j的jar包通過build path引入項目
2.2.在src/main/java下創(chuàng)建log4j.properties配置文件
2.3.在JAVA文件中使用log4j進行日志記錄
3.在SpringMVC項目中
3.1.在src/main/resources的conf目錄下創(chuàng)建log4j.properties文件
3.2.編輯項目的web.xml文件
//編輯項目的web.xml文件 添加以下內(nèi)容
<context-parm>
? ? ? ? <parm-name>log4jConfigLocation</parm-name>
? ? ? ? <parm-value>classpath:/conf/log4j.properties</parm-value>
</context-parm>
<listener>
? ? ? ? <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
4.在普通的Web項目中
因為普通的項目中沒有了Spring提供的listener來加載log4j了半抱,所以需要使用servlet來加載
4.1.在src/main/resources/conf下創(chuàng)建log4j.properties文件
4.2.編輯項目的web.xml文件
//使用servlet來加載log4j
public?class?Log4jServlet?extends?HttpServlet {
? ??????private?static?final?long?serialVersionUID = 1L;
? ? ? ? public void init(ServletConfig config) throws ServletException{?
? ? ? ? ? ? ? ? String perfix = this.getClass().getClassLoader().getResources("/").getPath();
? ? ? ? ? ? ? ? String path = config.getInitParameter("log4j-path");
? ? ? ? ? ? ? ? PopertyConfigurator.configure(prefix+path);
? ? ? ? }
? ??????public?void?doGet(HttpServletRequest req, HttpServletResponse res)?throws?IOException, ServletException {}
? ??????public?void?doPost(HttpServletRequest req, HttpServletResponse res)?throws?IOException, ServletException {}
? ??????public?void?destroy() {}
}
//編輯web.xml文件 添加如下內(nèi)容
<servlet>
? ? ? ? <servlet-name>log4j</servlet-name>
? ? ? ? <servlet-class>com.xmyself.log4j.Log4jServlet</servlet-class>
? ? ? ? <init-param>
? ? ? ? ? ? ? ? <param-name>log4j-path</param-name>
? ? ? ? ? ? ? ? <param-value>conf/log4j.properties</param-value>
? ? ? ? </init-param>
? ? ? ? <load-on-startup>1</load-on-startup>
</servlet>
三.log4j的配置說明
1.logger:日志實例,指的是代碼里實例化的log4j(Logger)對象??
log4j.rootLogger = LEVEL,appenderName1,appenderName2...? ? //定義Logger實例化對象
log4j.additivity.org.apache = false;? ? //表示不會在父logger的appender里輸出膜宋,默認true
例:? log4j.logger.com.demo.test = BEBUG,test
? ??????log4j.additivity.com.demo.test =?false
2.appender:日志輸出器窿侈,指定logger的輸出位置
log4j.appender.appenderName = className
//className有五種值可以選擇,每個都有不同的配置
1.org.apache.log4j.ConsoleAppender? ? //控制臺?
? ??????Threshold=WARN:指定日志信息的最低輸出級別秋茫,默認DEBUG?
? ??????ImmediateFlush=true:所有消息都會被立即輸出史简,false則不輸出,默認值是true
? ??????Target=System.err:默認值是System.out
2.org.apache.log4j.FileAppender? ?//文件
? ??????Threshold=WARN:指定日志信息的最低輸出級別肛著,默認DEBUG
? ??????ImmediateFlush=true:所有消息都會被立即輸出圆兵,false則不輸出,默認true
? ??????Append=false:true消息增加到指定文件中策泣,false將消息覆蓋指定文件衙傀,默認true
? ??????File=D:/logs/logging.log4j:指定消息輸出到logging.log4j文件
3.org.apache.log4j.DailyRollingFileAppender //每天產(chǎn)生一個日志文件????
? ??????Threshold=WARN:指定日志信息的最低輸出級別抬吟,默認DEBUG
? ??????ImmediateFlush=true:所有消息都會被立即輸出萨咕,false則不輸出,默認true
? ??????? Append=false:true消息增加到指定文件中火本,false將消息覆蓋指定文件危队,默認true
? ???????File=D:/logs/logging.log4j:指定消息輸出到logging.log4j文件?
? ??????? DatePattern='.'yyyy-MM:每月滾動一次日志文件聪建,即每月產(chǎn)生一個新的日志文件。當(dāng)前月的日志文件名為logging.log4j茫陆,前一個月的日志文件名 ('.'yyyy-MM:每月 /?'.'yyyy-ww:每周? /??'.'yyyy-MM-dd:每天? /? '.'yyyy-MM-dd-a:每天兩次? /?'.'yyyy-MM-dd-HH:每小時 /?'.'yyyy-MM-dd-HH-mm:每分鐘????)
4.org.apache.log4j.RollingFileAppender? ? //文件大小到達指定尺寸的時候產(chǎn)生一個新的文件
? ??????? ?Threshold=WARN:指定日志信息的最低輸出級別金麸,默認DEBUG? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????????ImmediateFlush=true:所有消息都會被立即輸出,false則不輸出簿盅,默認true? ? ? ? ? ? ? ? ? ? ? ? ? ? Append=false:true消息增加到指定文件中挥下,false將消息覆蓋指定文件,默認true? ? ? ? ? ? ? ? ? File=D:/logs/logging.log4j:指定消息輸出到logging.log4j文件?
????????????MaxFileSize=100KB:后綴可以是KB,MB或者GB桨醋。在日志文件到達該大小時棚瘟,將會自動滾動,即將原來的內(nèi)容移到logging.log4j.1文件
? ??????????MaxBackupIndex=2:指定可以產(chǎn)生的滾動文件的最大數(shù)喜最,例如偎蘸,設(shè)為2則可以產(chǎn)生logging.log4j.1,logging.log4j.2兩個滾動文件和一個logging.log4j文件
5.org.apache.log4j.WriterAppender? ? //將日志信息以流格式發(fā)送到任意指定的地方
3.layout:指定logger輸出內(nèi)容及格式
log4j.appender.appenderName.layout = calssName? ? ?
//layout的className有四種選擇
1.org.apache.log4j.HTMLLayout? ? ?//以HTML表格形式布局?
? ??????LocationInfo=true:輸出java文件名稱和行號瞬内,默認false
? ? ? ? ?Title=My Logging: 默認值是Log4J Log Messages
2.org.apache.log4j.PatternLayout? ? ?//可以靈活地指定布局模式?
? ??????ConversionPattern=%m%n:設(shè)定以怎樣的格式顯示消息
3.org.apache.log4j.SimpleLayout? ? ?//包含日志信息的級別和信息字符串?
4.org.apache.log4j.TTCCLayout? ? ?//包含日志產(chǎn)生的時間迷雪、線程、類別等信息?
四.log4j全局配置
在配置了全局的log4j之后虫蝶,整個項目都使用了同一套配置章咧,也就是說所有的日志都在同一個地方,所有的信息都混在一起能真。
log4j.rootLogger=DEBUG,console,dailyFile,rollingFile,logFile
log4j.additivity.org.apache=true??
#控制臺日志輸出器
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.ImmediateFlush=true? ?
log4j.appender.console.Target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout?
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p]?%m%n?
#文件日志輸出器
log4j.appender.logFile=org.apache.log4j.FileAppender
log4j.appender.logFile.Threshold=DEBUG
log4j.appender.logFile.ImmediateFlush=true
log4j.appender.logFile.Append=true
log4j.appender.logFile.File=D:/logs/log.log4j
log4j.appender.logFile.layout=org.apache.log4j.PatternLayout? ?
log4j.appender.logFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p]?%m%n???
#滾動文件日志輸出器
log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
log4j.appender.rollingFile.Threshold=DEBUG
log4j.appender.rollingFile.ImmediateFlush=true
log4j.appender.rollingFile.Append=true
log4j.appender.rollingFile.File=D:/logs/log.log4j????
log4j.appender.rollingFile.MaxFileSize=200KB? ? ?
log4j.appender.rollingFile.MaxBackupIndex=50
log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p]?%m%n??
#定期滾動文件日志輸出器
log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
log4j.appender.rollingFile.Threshold=DEBUG? ?
log4j.appender.rollingFile.ImmediateFlush=true
log4j.appender.rollingFile.Append=true? ?
log4j.appender.rollingFile.File=D:/logs/log.log4j
log4j.appender.rollingFile.MaxFileSize=200KB
log4j.appender.rollingFile.MaxBackupIndex=50
log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout? ?
log4j.appender.rollingFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p]?%m%n??
五.log4j局部配置
如果想要為不同的包或者類單獨的輸出日志慧邮,那么就需要定義多個局部配置
#定義局部的log4j文件輸出器
log4j.logger.com.demo.test=DEBUG,test
log4j.appender.test=org.apache.log4j.FileAppender
log4j.appender.test.File=/log/test.log
log4j.appender.test.layout=org.apache.log4j.PatternLayout
log4j.appender.test.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p]?%m%n???
//可以讓同一個類輸出不同類型的日志文件
//可以初始化兩個日志對象
private?static?Log logger1 = LogFactory.getLog("myTest1");
private?static?Log logger2 = LogFactory.getLog("myTest2");?
#分別配置量兩個log4j實例
log4j.logger.myTest1=?DEBUG,test1
log4j.additivity.myTest1=false
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} [%p]?%m%n??
.
log4j.logger.myTest2=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} [%p]?%m%n????
六.slf4j搭配log4j
1.slf4j簡介:
slf4j運用了典型的門面模式思想,和JVM的思想是一樣的舟陆,即當(dāng)一個項目中依賴了多個日志框架的時候误澳,slf4j就負責(zé)幫我們處理這些日志實現(xiàn)框架的差異。
2.slf4j使用:
2.1.在項目中添加slf4j的依賴
2.2.在項目中添加slf4j和不同日志實現(xiàn)框架的轉(zhuǎn)換(關(guān)聯(lián))依賴
//slf4j的依賴
<dependency>
? ? ? ? <groupId>org.slf4j</groupId>
? ? ? ? <artifactId>slf4j-api</artifactId>
? ? ? ? <version>1.7.21</version>
</dependency>
//slf4j和log4j的關(guān)聯(lián)jar包
//通過這個jar包秦躯,把對slf4j接口的調(diào)用轉(zhuǎn)為對log4j的調(diào)用
//不同的日志實現(xiàn)框架忆谓,這個轉(zhuǎn)換工具不同
//slf4j-log4j12依賴了slf4j和log4j,所以只使用這個依賴就可以滿足需求? ? ?
<dependency>
? ? ? ? <groupId>org.slf4j</groupId>
? ? ? ? <artifactId>slf4j-log4j12</artifactId>
? ? ? ? <version>1.7.21</version>
</dependency>
//在JAVA類中使用slf4j和log4j的方式
class Test{
? ? ? ? Logger log = LoggerFactory.getLogger(Test.calss);
? ? ? ? public void test(){
? ? ? ? ? ? ? ? log.info("hello {}",world);? ? //slf4j中可以使用占位符
? ? ? ? }
}
原文:https://blog.csdn.net/qq_42072311/article/details/80923512