質問編集履歴
3
文法修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -3,18 +3,13 @@
|
|
3
3
|
<実現>
|
4
4
|
・ファイルに書き込みとコンソールに出力は任意のメソッドを作成して処理を行いたい。
|
5
5
|
・一行ずつ読み込んでファイルに書き込みとコンソールに出力をさせたい
|
6
|
-
・extractメソッドにあるclose()が必要なところにfinally句で必ず実行させるようにしたい。
|
6
|
+
・extractメソッドにあるclose()が必要なところにfinally句で必ず実行させるようにしたい。
|
7
|
-
|
8
|
-
<質問>
|
9
|
-
・ 1行ずつmarkErroLine,extractDateLogを行えるようにしたいのですが、どうすればいいですか?
|
10
|
-
・毎回IOExceptionが発生してしまうので判定などで回避したい。理由:Throwsやcatchは重いため。
|
11
7
|
<前提>
|
12
8
|
1:「app.log」というファイルを読み込んで、「ERROR」「FATAL」行の先頭に「★」印を印字したファイル「app_error.log」を作成
|
13
9
|
2:「app.log」というファイルを読み込んで、「2019年1月11日」の記録を抽出した「app_20190111.log」を作成
|
14
10
|
3: [ERROR」「FATAL 」行の先頭に「★」印を印字して、引数で指定されたファイルに出力するメソッド「markErrorLine」を作成
|
15
11
|
4: 引数で渡された日付(Calendar-Class)に該当する行をファイルに出力する メソッド「extractDateLog」を作成
|
16
|
-
5: 他に共通する処理があれば、任意のメソッドを作成して処理をしたい。
|
17
|
-
|
12
|
+
5: 結果として、以下のように記載の内容を表示したい。
|
18
13
|
|
19
14
|
ExampleOfOutput:
|
20
15
|
1.実行処理
|
@@ -28,8 +23,6 @@
|
|
28
23
|
3.app_20190111.log
|
29
24
|
2019/01/11 13:30:10.861 DEBUG (DBLogic.java getConnection) - DBコネクション取得
|
30
25
|
2019/01/11 13:30:10.923 DEBUG (DBLogic.java closeConnection) - DBコネクションクローズ
|
31
|
-
2019/01/11 13:30:19.177 DEBUG (DBLogic.java getConnection) - DBコネクション取得
|
32
|
-
2019/01/11 13:30:19.177 DEBUG (DBLogic.java begin) - トランザクション開始
|
33
26
|
### 該当のソースコード
|
34
27
|
|
35
28
|
```Java
|
@@ -397,4 +390,25 @@
|
|
397
390
|
2019/01/16 13:30:23.530 DEBUG (DBLogic.java commit) - トランザクションコミット
|
398
391
|
3. app_20190111.log
|
399
392
|
|
393
|
+
```
|
394
|
+
###追記3
|
395
|
+
mark method を用いたら解決しました。
|
396
|
+
```
|
397
|
+
br.mark((int)file.length());
|
398
|
+
String line;
|
399
|
+
while ((line = br.readLine()) != null) {
|
400
|
+
markErrorLine(newErrorfile, line);
|
401
|
+
|
402
|
+
|
403
|
+
}
|
404
|
+
br.reset();
|
405
|
+
System.out.println("3. app_20190111.log");
|
406
|
+
|
407
|
+
String line1;
|
408
|
+
while ((line1 = br.readLine()) != null) {
|
409
|
+
|
410
|
+
extractDateLog(cal, line1);
|
411
|
+
|
412
|
+
|
413
|
+
}
|
400
414
|
```
|
2
文法の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -4,24 +4,18 @@
|
|
4
4
|
・ファイルに書き込みとコンソールに出力は任意のメソッドを作成して処理を行いたい。
|
5
5
|
・一行ずつ読み込んでファイルに書き込みとコンソールに出力をさせたい
|
6
6
|
・extractメソッドにあるclose()が必要なところにfinally句で必ず実行させるようにしたい。
|
7
|
-
|
7
|
+
|
8
|
-
・markErrorLineメソッド
|
9
|
-
・l.replaceFirst("^(.*)(FATAL|ERROR)(.*)$", "★$0")をファイル出力とコンソール出力を1回でしたい。
|
10
8
|
<質問>
|
11
9
|
・ 1行ずつmarkErroLine,extractDateLogを行えるようにしたいのですが、どうすればいいですか?
|
12
10
|
・毎回IOExceptionが発生してしまうので判定などで回避したい。理由:Throwsやcatchは重いため。
|
13
|
-
|
14
11
|
<前提>
|
15
12
|
1:「app.log」というファイルを読み込んで、「ERROR」「FATAL」行の先頭に「★」印を印字したファイル「app_error.log」を作成
|
16
13
|
2:「app.log」というファイルを読み込んで、「2019年1月11日」の記録を抽出した「app_20190111.log」を作成
|
17
14
|
3: [ERROR」「FATAL 」行の先頭に「★」印を印字して、引数で指定されたファイルに出力するメソッド「markErrorLine」を作成
|
18
15
|
4: 引数で渡された日付(Calendar-Class)に該当する行をファイルに出力する メソッド「extractDateLog」を作成
|
19
|
-
4-1: MarkErrorLine method and ExtractDateLog method をexecute methodから呼んで処理をする
|
20
|
-
4-2: execute methodはmain method から呼ぶ
|
21
16
|
5: 他に共通する処理があれば、任意のメソッドを作成して処理をしたい。
|
22
|
-
6: できれば、出力ファイルはクラスファイル実行ディレクトリと同一階層に出力
|
23
|
-
|
17
|
+
6: 結果として、以下のように記載の内容を表示したい。
|
24
|
-
|
18
|
+
|
25
19
|
ExampleOfOutput:
|
26
20
|
1.実行処理
|
27
21
|
ログファイルの解析処理を開始します
|
@@ -36,10 +30,6 @@
|
|
36
30
|
2019/01/11 13:30:10.923 DEBUG (DBLogic.java closeConnection) - DBコネクションクローズ
|
37
31
|
2019/01/11 13:30:19.177 DEBUG (DBLogic.java getConnection) - DBコネクション取得
|
38
32
|
2019/01/11 13:30:19.177 DEBUG (DBLogic.java begin) - トランザクション開始
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
33
|
### 該当のソースコード
|
44
34
|
|
45
35
|
```Java
|
@@ -203,7 +193,7 @@
|
|
203
193
|
### 試したこと
|
204
194
|
何故かERROR or FATAL 以外のやつはコンソールに出力されるが、ファイルには一行しか書き込まれていない。
|
205
195
|
ERRORやFATALに合致したログを★を付け加えて編集させて出力とファイルに書き込みしたいのに、これは出力も書き込みもされていませんでした。
|
206
|
-
```
|
196
|
+
```java
|
207
197
|
import java.io.BufferedReader;
|
208
198
|
import java.io.BufferedWriter;
|
209
199
|
import java.io.File;
|
@@ -374,9 +364,7 @@
|
|
374
364
|
|
375
365
|
java_1.8
|
376
366
|
eclipse_version_14
|
377
|
-
|
378
|
-
|
379
|
-
###追記
|
367
|
+
###追記1
|
380
368
|
変数に結果を代入してファイル・コンソールに出力させた。
|
381
369
|
```
|
382
370
|
try(PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(newErrorfile)));){
|
@@ -388,4 +376,25 @@
|
|
388
376
|
//pw.close();
|
389
377
|
}
|
390
378
|
}
|
379
|
+
```
|
380
|
+
###追記2
|
381
|
+
extractDateLog メソッドを実行した後に"3.app_201911.log"を出力しているため、コンソール出力・ファイル書き込み後に出力されていることに気がつきました。
|
382
|
+
ただ、while文のなかでextractDateLogメソッドを実行する直前に記述しても一行ずつ"3.app_201911.log"が出力される気がします。
|
383
|
+
どう修正すればよいかどなたかご教示願います。
|
384
|
+
```Java
|
385
|
+
String line;
|
386
|
+
while ((line = br.readLine()) != null) {
|
387
|
+
markErrorLine(newErrorfile, line);
|
388
|
+
extractDateLog(cal, line);
|
389
|
+
|
390
|
+
|
391
|
+
}
|
392
|
+
System.out.println("3. app_20190111.log");
|
393
|
+
```
|
394
|
+
出力結果;
|
395
|
+
```
|
396
|
+
2019/01/16 13:30:23.467 DEBUG (WriteOperationLogLogic.java insert) - ログ証跡出力 終了
|
397
|
+
2019/01/16 13:30:23.530 DEBUG (DBLogic.java commit) - トランザクションコミット
|
398
|
+
3. app_20190111.log
|
399
|
+
|
391
400
|
```
|
1
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -373,4 +373,19 @@
|
|
373
373
|
### 補足情報(FW/ツールのバージョンなど)
|
374
374
|
|
375
375
|
java_1.8
|
376
|
-
eclipse_version_14
|
376
|
+
eclipse_version_14
|
377
|
+
|
378
|
+
|
379
|
+
###追記
|
380
|
+
変数に結果を代入してファイル・コンソールに出力させた。
|
381
|
+
```
|
382
|
+
try(PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(newErrorfile)));){
|
383
|
+
for (String l : textLines) {
|
384
|
+
String s1 = l.replaceFirst("^(.*)(FATAL|ERROR)(.*)$", "★$0");
|
385
|
+
pw.println(s1);
|
386
|
+
System.out.println(s1);
|
387
|
+
}
|
388
|
+
//pw.close();
|
389
|
+
}
|
390
|
+
}
|
391
|
+
```
|