ログの出力テストを行っているのですが、エラーの発生箇所情報がうまく出力できません。
[テスト内容]
1.Registration.javaの定数フィールド「PROPERTY_FILE」に存在しないプロパティファイル名を設定。
2.Htmlページからサーブレットにリクエストを送信。
3.プロパティファイルが存在しないため、NullPointerExceptionが発生する。
4.出力されたログを確認する。
ログの出力自体は問題なくできたのですが、エラー発生箇所の情報が期待通りになりません。
ログの出力内容は以下の通りです。
log
2017-05-04 10:42:47.426 WARN [プロパティファイル未存在],取得ファイル名=url2.properties registration.servlet.RegistrationServlet.init(RegistrationServlet.java:46)
()の部分の情報がログを出力している箇所(logger.warn(XXX)の行番号)が出力されました。やりたいことは(Registration.java:「エラー発生箇所であるprop.load(inStream)の行番号」)を出力させたいです。
このエラー発生箇所の情報はどのように設定するのか調べてみたのですが有力な情報が見つかりませんでした。ログ出力設定にお詳しい方がいましたらご回答をいただけないでしょうか。
原因がありそうな箇所のソースコード、設定内容を以下に共有いたします。
Java
package registration.servlet; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.Properties; import java.util.logging.Logger; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.logging.log4j.LogManager; import registration.controller.RegistrationController; import util.exception.UnexpectedProcessingException; public class RegistrationServlet extends HttpServlet { private static final long serialVersionUID = 1L; static org.apache.logging.log4j.Logger logger = LogManager.getLogger(Logger.class.getName()); final static String COMMON_URL = "CommonUrl"; final static String PROPERTY_FILE = "url2.properties"; final Properties prop = new Properties(); public void init() throws ServletException{ InputStream inStream = null; try { inStream = RegistrationServlet.class.getClassLoader().getResourceAsStream(PROPERTY_FILE); prop.load(inStream); } catch (IOException e) { throw new UnexpectedProcessingException("プロパティ読み込み中にエラーが発生", e); } catch (NullPointerException e) { logger.warn("[プロパティファイル未存在],取得ファイル名={}", PROPERTY_FILE); throw new UnexpectedProcessingException("予期せぬエラーが発生しました。", e); } finally { try { if (inStream != null) { inStream.close(); } } catch (IOException e) { System.out.println("予期せぬエラーが発生しました。"); e.printStackTrace(); } } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // パラメータを取得する String process_code = request.getParameter("process_name"); // コントローラを呼び出す RegistrationController rc = new RegistrationController(); rc.invoke(process_code); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
xml
log4j2.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration> <configuration status="OFF"> <Properties> <Property name="error_daily_log">logs/app_error_%d{yyyy-MM-dd HH:mm:ss.SSS}</Property> </Properties> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{DEFAULT} | [%t] | %-5level | %c{36} | %msg%n"/> </Console> <File name="File" fileName="logs/normal_app.log"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} | [%t] | %-5level | %c{36} | %msg%n"/> </File> <RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app_%date{yyyyMMddHHmmss}.log"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %msg%n %C.%M(%F:%L)"/> <Policies> <TimeBasedTriggeringPolicy /> </Policies> </RollingFile> </Appenders> <Loggers> <Root level="trace"> <AppenderRef ref="File" /> <AppenderRef ref="RollingFile" /> </Root> <Logger name="registration.servlet" level="debug" additivity="false"> <AppenderRef ref="Console"/> <AppenderRef ref="RollingFile" /> </Logger> </Loggers> </configuration>
まだ回答がついていません
会員登録して回答してみよう