日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

使用tinylog 1.1改进您在Java EE应用程序中的登录

發布時間:2023/12/3 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用tinylog 1.1改进您在Java EE应用程序中的登录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

tinylog是Java的輕量級日志記錄框架。 與Apache Log4j和Logback相反,tinylog由僅80KB的單個JAR文件組成,沒有任何依賴性,并且具有靜態logger類。 這意味著您無需使用任何樣板代碼為每個類創建記錄器實例。

public static void main(String[] args) {Logger.info("Hello World!"); // Logging methods are static }

記錄上下文

tinylog 1.1的新功能之一是對日志記錄上下文的支持。 該功能在其他日志記錄框架中被稱為映射日志記錄上下文(MDC),并允許使用附加數據對日志條目進行基于線程的擴展。 例如,您可以為一個線程設置一次用戶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);}}

如果使用負載平衡器或代理,則可以通過調用request.getHeader("X-FORWARDED-FOR").獲得真實的用戶IP request.getHeader("X-FORWARDED-FOR"). 日志記錄上下文必須包含在日志記錄格式模式中。 可以通過屬性文件,系統屬性或Fluent API 配置 tinylog。 您可以使用首選方式將日志記錄格式模式設置為例如“ {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

這樣的日志記錄上下文有助于重建:哪個日志條目屬于哪個請求。 如果您具有登錄系統,則用戶名是另一個用于記錄上下文的合適候選者。 也可以設置多個值。 如果使用線程池,則不要忘記在將線程返回線程池時清除日志上下文。

作家

tinylog支持多個編寫器來輸出日志條目。 對于Java EE應用程序,RollingFileWriter和JdbcWriter是最受歡迎的編寫器??。

RollingFileWriter可以將日志條目寫入文件。 與基本FileWriter相反,可以在定義事件后啟動新的日志文件。 此類事件可以是應用程序的開始,最大文件大小或日期。 可以將定義數量的舊日志文件保留為備份。

通過屬性文件配置RollingFileWriter的示例:

tinylog.writer = rollingfile tinylog.writer.filename = log.txt tinylog.writer.backups = 10 tinylog.writer.label = count tinylog.writer.policies = startup, daily

在此示例中,RollingFileWriter在應用程序啟動時以及每天運行時之后啟動一個新的日志文件。 最新的十個日志文件將作為備份保存并連續編號。
JdbcWriter可以將日志條目寫入SQL數據庫。 如果您有多臺服務器,這是集中日志的一種方法。
通過屬性文件配置JdbcWriter的示例:

tinylog.writer = jdbc tinylog.writer.url = jdbc:mysql://localhost/demo tinylog.writer.table = logs tinylog.writer.columns = date, ip, level, message tinylog.writer.values = DATE, CONTEXT, LEVEL, MESSAGE tinylog.writer.username = demo tinylog.writer.password = demo

在現代標準Java環境和大多數Web應用程序服務器中,JVM可以通過服務找到數據庫驅動程序。 不幸的是,獨立的Apache Tomcat需要手動加載數據庫驅動程序。 這可以通過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數據源。 您只需為應用程序定義一次數據庫連接,然后就可以在tinylog配置中引用數據源。 另一個新功能是一旦數據庫再次啟動,在連接斷開的情況下重新建立數據庫連接。

編寫線程

開箱即用,tinylog同步寫入所有日志條目。 tinylog的寫入線程可用于在單獨的線程中執行寫入器,以避免因IO操作緩慢而阻塞。 如果激活,則必須與您的應用程序一起關閉寫入線程。 這可以通過觀察主線程或調用shutdown方法來完成。 由于Java EE應用程序中沒有可靠的長壽命線程,因此建議的方法是使用ServletContextListener關閉寫入線程。

@WebListener public class LifeCycleListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent event) {}@Overridepublic void contextDestroyed(ServletContextEvent event) {Configurator.shutdownWritingThread(false);}}

源代碼

GitHub上提供了Java EE示例應用程序的整個源代碼。 可以在tinylog網站上找到有關tinylog的更多信息,包括完整的手冊。

翻譯自: https://www.javacodegeeks.com/2016/06/improve-your-logging-in-your-java-ee-application-with-tinylog-1.html

總結

以上是生活随笔為你收集整理的使用tinylog 1.1改进您在Java EE应用程序中的登录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。