<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Java Servlet Log4j 教程 > 原文: [http://zetcode.com/articles/javaservletlog4j/](http://zetcode.com/articles/javaservletlog4j/) Java servlet Log4j 教程顯示了如何在 Java servlet 中使用 Log4j 進行日志記錄。 本教程介紹 Log4j 版本 2。 ## Java Servlet Servlet 是 Java 類,可響應特定類型的網絡請求-最常見的是 HTTP 請求。 Java servlet 用于創建 Web 應用。 它們在 servlet 容器(例如 Tomcat 或 Jetty)中運行。 現代 Java Web 開發使用在 servlet 之上構建的框架。 ## Log4j Apache Log4j 是基于 Java 的日志記錄工具。 它是 Apache Software Foundation 的項目。 可以通過 Java 代碼或在配置文件中配置 Log4j。 配置文件可以 XML,JSON,YAML 或屬性文件格式編寫。 Log4j 具有三個主要組件:記錄器,附加器和布局。 記錄器被命名為目標,可捕獲捕獲日志消息并將其發送到附加程序。 附加器將日志消息傳遞到其目的地,例如文件或控制臺。 布局用于定義日志消息的格式。 ## Java servlet 日志記錄示例 以下 Web 應用正在使用 Log4j 進行日志記錄。 在 Servlet 3.0+應用中,Log4j 可以直接使用。 它在應用部署時自動啟動,在應用取消部署時自動關閉。 ```java $ tree . ├── pom.xml └── src └── main ├── java │ └── com │ └── zetcode │ ├── service │ │ └── MyService.java │ └── web │ └── MyServlet.java ├── resources │ └── log4j2.xml └── webapp ├── index.html ├── META-INF │ └── context.xml └── WEB-INF ``` 這是項目結構。 Log4j 配置文件位于`src/main/resources/`目錄中。 `pom.xml` ```java <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zetcode</groupId> <artifactId>JavaServletLog4j</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>JavaServletLog4j</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-web</artifactId> <version>2.8.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.3</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build> </project> ``` 這是 Maven POM 文件。 我們有兩個工件:用于服務器小程序的`javax.servlet-api`和用于 Web 應用中 Log4j 記錄的`log4j-web`。 `maven-war-plugin`負責收集 Web 應用的所有工件依賴項,類和資源,并將它們打包到 Web 應用存檔(WAR)中。 `context.xml` ```java <?xml version="1.0" encoding="UTF-8"?> <Context path="/JavaServletLog4j"/> ``` 在 Tomcat `context.xml`文件中,我們定義了上下文路徑。 它是 Web 應用的名稱。 `log4j2.xml` ```java <?xml version="1.0" encoding="utf-8"?> <Configuration status="info"> <Properties> <Property name="logdir">/home/janbodnar/tmp</Property> <Property name="layout">%d [%t] %-5p %c- %m%n</Property> </Properties> <Appenders> <RollingFile name="LOCALHOST" fileName="${logdir}/localhost.log" filePattern="${logdir}/localhost.%d{yyyy-MM-dd}-%i.log"> <PatternLayout pattern="${layout}"/> <Policies> <TimeBasedTriggeringPolicy /> <SizeBasedTriggeringPolicy size="1 MB" /> </Policies> <DefaultRolloverStrategy max="10" /> </RollingFile> </Appenders> <Loggers> <Logger name="com.zetcode" level="info" additivity="false"> <AppenderRef ref="LOCALHOST" /> </Logger> <Root level="error"> </Root> </Loggers> </Configuration> ``` 在`log4j2.xml`中配置 Log4j。 在我們的示例中,我們選擇了 XML 文件格式。 ```java <Properties> <Property name="logdir">/home/janbodnar/tmp</Property> <Property name="layout">%d [%t] %-5p %c - %m%n</Property> </Properties> ``` 在`Properties`標記中,我們設置了日志目錄和布局。 布局定義了日志的格式。 模式布局由轉換說明符組成。 每個說明符均以百分號開頭,后跟可選的格式修飾符和強制轉換字符。 `%d`輸出記錄事件的日期。 `%t`輸出生成日志事件的線程的名稱。 `%-5p`輸出記錄事件的級別,級別名稱中至少要包含五個字符,并且這些字符必須對齊。 `%c`輸出發布了記錄事件的記錄器的名稱。 `%m`打印與日志記錄事件關聯的應用消息,`%n`是平臺相關的行分隔符或多個字符。 ```java <Appenders> ... </Appenders> ``` 附加項是定義日志消息保存位置的對象。 有幾個可能的目的地,包括控制臺,文件,數據庫表或原型。 ```java <RollingFile name="LOCALHOST" fileName="${logdir}/localhost.log" filePattern="${logdir}/localhost.%d{yyyy-MM-dd}-%i.log"> <PatternLayout pattern="${layout}" /> ... <DefaultRolloverStrategy max="10" /> </RollingFile> ``` 我們設置日志文件的位置。 我們使用滾動文件附加器,該附加器會自動滾動或歸檔當前日志文件,并繼續記錄新文件。 `PatternLayout`設置日志消息的布局。 如果存檔數量達到十個,則`DefaultRolloverStrategy`會刪除較舊的存檔。 ```java <Policies> <TimeBasedTriggeringPolicy /> <SizeBasedTriggeringPolicy size="1 MB" /> </Policies> ``` 觸發策略在`Policies`標記中定義。 它們控制發生翻轉的條件。 在這里,我們使用兩個策略:`TimeBasedTriggeringPolicy`和`SizeBasedTriggeringPolicy`。 `TimeBasedTriggeringPolicy`根據最具體的日期和時間模式開始翻轉; 就我們而言,如果每小時日志文件的大小達到 1MB,則`SizeBasedTriggeringPolicy`開始翻轉。 ```java <Loggers> <Logger name="com.zetcode" level="info" additivity="false"> <AppenderRef ref="LOCALHOST" /> </Logger> <Root level="error"> </Root> </Loggers> ``` 在`Loggers`標簽中,我們定義了記錄器。 它們被稱為日志消息目的地。 每個記錄器可以配置不同級別的記錄。 我們定義一個具有信息記錄級別的記錄器。 我們將先前定義的滾動文件附加器附加到此記錄器。 在`additivity`設置為`false`的情況下,日志消息不會傳播到其祖先。 `MyServlet.java` ```java package com.zetcode.web; import com.zetcode.service.MyService; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @WebServlet(name = "MyServlet", urlPatterns = {"/MyServlet"}) public class MyServlet extends HttpServlet { final static Logger logger = LogManager.getLogger(MyService.class); @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { logger.info("MyServlet's doGet() called"); MyService service = new MyService(); service.doWork(); response.setContentType("text/plain;charset=UTF-8"); PrintWriter out = response.getWriter(); out.print("MyServlet called"); } } ``` 這是`MyServlet` servlet。 它調用服務方法并將文本數據發送回客戶端。 ```java final static Logger logger = LogManager.getLogger(MyService.class); ``` 我們從`LogManager`獲取記錄器。 ```java logger.info("MyServlet's doGet() called"); ``` 我們記錄一條信息級別的消息。 ```java MyService service = new MyService(); service.doWork(); ``` 我們稱為虛擬服務方法。 ```java PrintWriter out = response.getWriter(); out.print("MyServlet called"); ``` 我們將文本數據發送給客戶端。 `MyService.java` ```java package com.zetcode.service; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class MyService { final static Logger logger = LogManager.getLogger(MyService.class); public void doWork() { logger.info("MyService's doWork() called"); } } ``` `MyService`的`doWork()`方法記錄信息級別的消息。 `index.html` ```java <!DOCTYPE html> <html> <head> <title>Home Page</title> <meta charset="UTF-8"> </head> <body> <a href="MyServlet">Call Servlet</a> </body> </html> ``` 主頁包含一個調用`MyServlet`的鏈接。 ```java $ cat localhost.log 2017-11-14 16:50:30,157 [http-nio-8084-exec-5] INFO com.zetcode.service.MyService- MyServlet's doGet() called 2017-11-14 16:50:31,044 [http-nio-8084-exec-5] INFO com.zetcode.service.MyService- MyService's doWork() called ``` 這是已記錄消息的示例輸出。 在本教程中,我們已經在 Java Web 應用中使用 Log4j 完成了一些日志記錄。 您可能也對以下相關教程感興趣: [Java Log4j 教程](/java/log4j/), [Java Servlet RESTful 客戶端](/articles/javaservletrestclient/), [Java Servlet 上傳文件](/articles/javaservletuploadfile/), [Java `RequestDispatcher`](/java/requestdispatcher/) ,[從 Java servlet 提供純文本](/articles/javaservlettext/), [Java servlet 復選框教程](/articles/javaservletcheckbox/), [Java servlet 圖像教程](/articles/javaservletimage/), [Java Servlet HTTP 標頭](/articles/javaservlethttpheaders/)或 [Java 教程](/lang/java/)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看