使用tinylog 1.1改进您在Java EE应用程序中的登录
tinylog是Java的輕量級(jí)日志記錄框架。 與Apache Log4j和Logback相反,tinylog由僅80KB的單個(gè)JAR文件組成,沒(méi)有任何依賴(lài)性,并且具有靜態(tài)logger類(lèi)。 這意味著您無(wú)需使用任何樣板代碼為每個(gè)類(lèi)創(chuàng)建記錄器實(shí)例。
public static void main(String[] args) {Logger.info("Hello World!"); // Logging methods are static }記錄上下文
tinylog 1.1的新功能之一是對(duì)日志記錄上下文的支持。 該功能在其他日志記錄框架中被稱(chēng)為映射日志記錄上下文(MDC),并允許使用附加數(shù)據(jù)對(duì)日志條目進(jìn)行基于線程的擴(kuò)展。 例如,您可以為一個(gè)線程設(shè)置一次用戶(hù)IP,tinylog將在所有日志條目中包括該IP。
public class HelloWorld extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {LoggingContext.put("ip", request.getRemoteAddr()); // Set IP for this and all client threadsLogger.info("Handle request");response.getWriter().append("<h1>Hello World</h1><p>");Logger.info("Done request");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {doGet(request, response);}}如果使用負(fù)載平衡器或代理,則可以通過(guò)調(diào)用request.getHeader("X-FORWARDED-FOR").獲得真實(shí)的用戶(hù)IP request.getHeader("X-FORWARDED-FOR"). 日志記錄上下文必須包含在日志記錄格式模式中。 可以通過(guò)屬性文件,系統(tǒng)屬性或Fluent API 配置 tinylog。 您可以使用首選方式將日志記錄格式模式設(shè)置為例如“ {date} [{context:ip}] {level}:{message}”,以獲取以下輸出:
2016-05-15 11:40:31 [89.12.191.39] INFO: Handle request 2016-05-15 11:40:31 [89.12.191.39] INFO: Done request這樣的日志記錄上下文有助于重建:哪個(gè)日志條目屬于哪個(gè)請(qǐng)求。 如果您具有登錄系統(tǒng),則用戶(hù)名是另一個(gè)用于記錄上下文的合適候選者。 也可以設(shè)置多個(gè)值。 如果使用線程池,則不要忘記在將線程返回線程池時(shí)清除日志上下文。
作家
tinylog支持多個(gè)編寫(xiě)器來(lái)輸出日志條目。 對(duì)于Java EE應(yīng)用程序,RollingFileWriter和JdbcWriter是最受歡迎的編寫(xiě)器??。
RollingFileWriter可以將日志條目寫(xiě)入文件。 與基本FileWriter相反,可以在定義事件后啟動(dòng)新的日志文件。 此類(lèi)事件可以是應(yīng)用程序的開(kāi)始,最大文件大小或日期。 可以將定義數(shù)量的舊日志文件保留為備份。
通過(guò)屬性文件配置RollingFileWriter的示例:
tinylog.writer = rollingfile tinylog.writer.filename = log.txt tinylog.writer.backups = 10 tinylog.writer.label = count tinylog.writer.policies = startup, daily 在此示例中,RollingFileWriter在應(yīng)用程序啟動(dòng)時(shí)以及每天運(yùn)行時(shí)之后啟動(dòng)一個(gè)新的日志文件。 最新的十個(gè)日志文件將作為備份保存并連續(xù)編號(hào)。
JdbcWriter可以將日志條目寫(xiě)入SQL數(shù)據(jù)庫(kù)。 如果您有多臺(tái)服務(wù)器,這是集中日志的一種方法。
通過(guò)屬性文件配置JdbcWriter的示例:
在現(xiàn)代標(biāo)準(zhǔn)Java環(huán)境和大多數(shù)Web應(yīng)用程序服務(wù)器中,JVM可以通過(guò)服務(wù)找到數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序。 不幸的是,獨(dú)立的Apache Tomcat需要手動(dòng)加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序。 這可以通過(guò)ServletContextListener完成。
@WebListener public class LifeCycleListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent event) {try {new com.mysql.jdbc.Driver(); // Your database driver} catch (SQLException e) {Logger.error(e);}}@Overridepublic void contextDestroyed(ServletContextEvent event) {}}tinylog 1.2將支持Java EE數(shù)據(jù)源。 您只需為應(yīng)用程序定義一次數(shù)據(jù)庫(kù)連接,然后就可以在tinylog配置中引用數(shù)據(jù)源。 另一個(gè)新功能是一旦數(shù)據(jù)庫(kù)再次啟動(dòng),在連接斷開(kāi)的情況下重新建立數(shù)據(jù)庫(kù)連接。
編寫(xiě)線程
開(kāi)箱即用,tinylog同步寫(xiě)入所有日志條目。 tinylog的寫(xiě)入線程可用于在單獨(dú)的線程中執(zhí)行寫(xiě)入器,以避免因IO操作緩慢而阻塞。 如果激活,則必須與您的應(yīng)用程序一起關(guān)閉寫(xiě)入線程。 這可以通過(guò)觀察主線程或調(diào)用shutdown方法來(lái)完成。 由于Java EE應(yīng)用程序中沒(méi)有可靠的長(zhǎng)壽命線程,因此建議的方法是使用ServletContextListener關(guān)閉寫(xiě)入線程。
@WebListener public class LifeCycleListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent event) {}@Overridepublic void contextDestroyed(ServletContextEvent event) {Configurator.shutdownWritingThread(false);}}源代碼
GitHub上提供了Java EE示例應(yīng)用程序的整個(gè)源代碼。 可以在tinylog網(wǎng)站上找到有關(guān)tinylog的更多信息,包括完整的手冊(cè)。
翻譯自: https://www.javacodegeeks.com/2016/06/improve-your-logging-in-your-java-ee-application-with-tinylog-1.html
總結(jié)
以上是生活随笔為你收集整理的使用tinylog 1.1改进您在Java EE应用程序中的登录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 迟到20年的中国格斗机器人综艺,能否成为
- 下一篇: Redmi Note 13 Pro+影像