『壹』 springmvc怎麼配置log4j2
增加pom配置,讓maven載入log4j包
<!-- log4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.2</version>
</dependency>
修改web.xml,把log4j加到項目中
<!-- Log4j配置 -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:/log4j/log4j.xml</param-value>
</context-param>
<!-- 載入log4j配置文件 -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
根據web.xml配置的路徑,在src/main/resource目錄下新建log4j/log4j.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss:SSS} %l %m%n" /> </layout> <!--限制輸出級別 --> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMax" value="ERROR" /> <param name="LevelMin" value="DEBUG" /> </filter> </appender> <root> <priority value="debug" /> <appender-ref ref="CONSOLE" /> </root> </log4j:configuration>
經過上面的步驟後,log4j就配置好了,接下來是使用,在DemoController中使用,使用slf4j介面,代替log4j,這樣假如以後不用log4j了,用logback等其它日誌框架,只需修改配置文件,不需要修改java代碼
package com.my1.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class DemoController {
private static Logger logger = LoggerFactory.getLogger(DemoController.class);
@RequestMapping(value = "/toPage1.htm")
public ModelAndView toPage1() {
logger.debug("TEST");
return new ModelAndView("page1");
}
}
由於用了springmvc框架,日誌配置好後,會輸出很多spring日誌,在log4j.xml中,增加一段配置,修改spring包的日誌輸出級別
<!-- 通過<category></category>的定義可以將各個包中的類日誌輸出到不同的日誌文件中 -->
<category name="org.springframework">
<priority value="error" />
<appender-ref ref="CONSOLE" />
</category>
log4j的自定義輸出格式說明
<!-- %p 輸出優先順序,即DEBUG,INFO,WARN,ERROR,FATAL -->
<!-- %r 輸出自應用啟動到輸出該log信息耗費的毫秒數 -->
<!-- %c 輸出所屬的類目,通常就是所在類的全名 -->
<!-- %t 輸出產生該日誌事件的線程名 -->
<!-- %n 輸出一個回車換行符,Windows平台為「/r/n」,Unix平台為「/n」 -->
<!-- %d 輸出日誌時間點的日期或時間,默認格式為ISO8601,也可以在其後指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日
22:10:28,921 -->
<!-- %l 輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java:10) -->
log4j的輸出方式說明
<!-- Log4j提供的appender有以下幾種: -->
<!-- org.apache.log4j.ConsoleAppender(控制台), -->
<!-- org.apache.log4j.FileAppender(文件), -->
<!-- org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件), -->
<!-- org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件), -->
<!-- org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方) -->
『貳』 SpringBoot2.0 基礎案例(02):配置Log4j2,實現不同環境日誌列印
日誌列印是了解Web項目運行的最直接方式,所以在項目開發中是需要首先搭建好的環境。
1、Log4j2特點
1)核心特點
相比與其他的日誌系統,log4j2丟數據這種情況少;disruptor技術,在多線程環境下,性能高;並發的特性,減少了死鎖的發生。
2)性能測試
2、日誌列印之外觀模式
每一種日誌框架都有自己單獨的API,要使用對應的框架就要使用其對應的API,增加應用程序代碼和日誌框架的耦合性。
《阿里巴巴Java開發手冊》,其中有一條規范做了『強制』要求:
SLF4J日誌API
Java簡易日誌門面(Simple Logging Facade for Java,縮寫SLF4J),是一套包裝Logging 框架的界面程式,使用外觀模式實現。
1、項目結構
2、不同環境的日誌配置
使用最直接的方式,不同環境載入不同的日誌配置。
1)開發環境配置
2)生產環境配置
3、Log4j2的配置文件
1、簡單的測試程序
2、測試效果圖
四、源代碼地址
『叄』 web項目log4j2日誌文件無法寫入內容
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
『肆』 java web項目中關於log4j的運用
1、2隻要配置一個,不過:
1配置需要配合使用Spring
2配置需要自己寫Log4jInitServlet
其實還有更簡單的,只要把log4j.properties放在任意一個src目錄下就可以了,什麼額外的配置都不需要。
『伍』 在Struts2中配置Log4j2,為什麼一添加log4j2.xml文件就出錯
很有可能是你的項目裡面有包沖突,導致項目裡面不止一個存在
『陸』 非web程序怎麼拉起log4j2
在web.xml中添加配置: 下面使用了classpath 參數指定log4j.properties文件的位置,這樣log4j的配置文件就不用非要放到src的下面: log4jConfigLocation classpath:config/log4j/log4j.properties 使用spring的監聽器,當應用啟動時來讀取log4j的.
『柒』 log4j2編程配置Web應用程序問題,怎麼解決
Which Servlet container are you using?
2018年10月23日40分28秒
is my configuration correct, the steps which i followed?
2018年10月23日40分28秒
It's correct (I didn't parse the XML, but assuming
it's valid) for your program's logging, but it does nothing for your
Servlet container or any other libraries' logging. You have to bridge
the two.
2018年10月23日40分28秒
am sorry but can you please elaborate a way? am little new to this, and am not that familiar with bridging concept !
2018年10月24日40分28秒
A bridge is an adapter. It adapts one logging
framework to another. Again, I'm not sure what logging framework your
container uses, but if it used Commons Logging, you'd use this. If you
scroll down in that same page, and look in the menu on the left for
Adapter, you should find one appropriate to you.
2018年10月24日40分28秒
actually I have included that already,
log4j-web-2.1.jar this guy for web application in my step 1, if i look
to server start-up log in console(using tomcat 8) this is a line am
seeing "2015-02-05 22:11:55,089 ERROR Console contains an invalid
element or attribute "pattern"". is this something which might be
causing this issue?
『捌』 log4j2的資源文件具體怎麼配置
log4j2和log4j是全局配置的,只能有一個配置文件。 你說的引入另外一個jar,裡面的某些方法不想被主工程的log4j2攔截嗎? 你可以在Log4j2.xml中,對攔截的包進行單獨配置。 如果不能達到需求,建議去log4j2官網文檔,十分之詳細。
配置log4j2日誌記錄至資料庫
1、建立用於保存日誌的資料庫表:
sql">CREATETABLE`sys_log`(
`id`int(11)NOTNULLAUTO_INCREMENT,
`level`varchar(32)NOTNULL,
`logger`varchar(100)NOTNULL,
`message`varchar(1000)DEFAULTNULL,
`exception`varchar(10000)DEFAULTNULL,
`date_add`datetimeNOTNULL,
PRIMARYKEY(`id`)
)ENGINE=InnoDBAUTO_INCREMENT=19DEFAULTCHARSET=utf8mb4;
2、配置 databaseAppender :
<JDBCname="databaseAppender"tableName="sys_log">
<ConnectionFactoryclass="cc.s2m.web.s2mBlog.util.StaticProp"method="getDatabaseConnection"/>
<Columnname="date_add"isEventTimestamp="true"/>
<Columnname="level"pattern="%level"/>
<Columnname="logger"pattern="%logger"/>
<Columnname="message"pattern="%message"/>
<Columnname="exception"pattern="%ex{full}"/>
</JDBC>
3、其中 cc.s2m.web.s2mBlog.util.StaticProp類的getDatabaseConnection方法為獲取可用的datasource:
DriverManagerDataSourceds=newDriverManagerDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://127.0.0.1/s2mBlog?characterEncoding=utf8");
ds.setUsername("root");
ds.setPassword("123456");
returnds.getConnection();
4、指派需要記錄的日誌,使用 databaseAppender即可:
<loggername="SYSLOG"level="INFO"additivity="false">
<appender-refref="databaseAppender"/>
</logger>