質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

解決済

ログにエラー発生箇所情報が出力できない。

Linkey
Linkey

総合スコア77

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

2回答

0評価

0クリップ

7998閲覧

投稿2017/05/04 02:01

ログの出力テストを行っているのですが、エラーの発生箇所情報がうまく出力できません。

[テスト内容]
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>

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。