teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

自己解決

2018/04/09 14:29

投稿

a0841_1974
a0841_1974

スコア29

title CHANGED
File without changes
body CHANGED
@@ -80,4 +80,41 @@
80
80
  <level>DEBUG</level>
81
81
  </filter>
82
82
  </appender>
83
+ ```
84
+
85
+ Filter内での@Autowiredの使用方法が分からないので、
86
+ Mapper XML内のSQLを読み込んでログに出力するサービスを作成しました。
87
+ ※パラメータ部分の出力個所は、もう少し改善が必要です。
88
+
89
+ ```ここに言語を入力
90
+ @Service
91
+ public class SQLHelperService {
92
+ private static final Logger logger = LoggerFactory.getLogger("sql_logger");
93
+ @Autowired
94
+ ConfigService configService;
95
+
96
+ public void logger_sql(String path_file_name,String mapper_id,Object params)
97
+ throws ApplicationException {
98
+ try{
99
+ if(configService.isSql_log_hyouji_flg()){
100
+ String absolute_path = new File(".").getAbsoluteFile().getParent();
101
+ Configuration config = new Configuration();
102
+ InputStream fileStream = new FileInputStream(absolute_path+path_file_name);
103
+ XMLMapperBuilder parser = new XMLMapperBuilder(fileStream, config, "", config.getSqlFragments());
104
+ parser.parse();
105
+ MappedStatement st = config.getMappedStatement(mapper_id);
106
+ BoundSql sql = st.getBoundSql(params);
107
+ logger.info("[SQL]");
108
+ logger.info(sql.getSql());
109
+ logger.info("[Parameters]");
110
+ if(sql.getParameterObject() != null){
111
+ logger.info(sql.getParameterObject().toString());
112
+ }
113
+ }
114
+ }
115
+ catch (FileNotFoundException e) {
116
+ throw new ApplicationException(e);
117
+ }
118
+ }
119
+ }
83
120
  ```

1

追記事項の記入

2018/04/09 14:29

投稿

a0841_1974
a0841_1974

スコア29

title CHANGED
File without changes
body CHANGED
@@ -26,4 +26,58 @@
26
26
  </logger>
27
27
  ```
28
28
  以上です。
29
- よろしくお願いいたします。
29
+ よろしくお願いいたします。
30
+
31
+ (追記)
32
+ 以下のようにフィルタを追加してlogback-spring.xmlの記述を変更しましたら、
33
+ フィルタは動くようになりましたが、
34
+ @AutowiredのconfigServiceがNULLとなってしまいます。
35
+
36
+ SQLLoggingFilter .java
37
+ ```ここに言語を入力
38
+ public class SQLLoggingFilter extends Filter<ILoggingEvent> {
39
+
40
+ @Autowired
41
+ ConfigService configService;
42
+
43
+ Level level;
44
+
45
+ @Override
46
+ public FilterReply decide(ILoggingEvent event) {
47
+ if (event.getMessage().contains("Preparing") || event.getMessage().contains("Parameters")) {
48
+ if(configService.isSql_log_hyouji_flg()){
49
+ return FilterReply.NEUTRAL;
50
+ }
51
+ else{
52
+ return FilterReply.DENY;
53
+ }
54
+ }
55
+ else{
56
+ return FilterReply.NEUTRAL;
57
+ }
58
+ }
59
+
60
+
61
+ public void setLevel(String level) {
62
+ this.level = Level.toLevel(level);
63
+ }
64
+
65
+ public void start() {
66
+ if (this.level != null) {
67
+ super.start();
68
+ }
69
+ }
70
+ }
71
+ ```
72
+ logback-spring.xml
73
+ ```ここに言語を入力
74
+ <appender name="SQL_LOGGER" class="ch.qos.logback.core.ConsoleAppender">
75
+ <target>System.out</target>
76
+ <encoder>
77
+ <pattern>%d{yyyy/MM/dd HH:mm:ss.SSS} [%t] %highlight(%-5le) %cyan(%-40.40lo{36}) - %green(%msg) %n</pattern>
78
+ </encoder>
79
+ <filter class="com.apri.common.filter.SQLLoggingFilter">
80
+ <level>DEBUG</level>
81
+ </filter>
82
+ </appender>
83
+ ```