いつもお世話になっております。
現在、Springboo2、PostgreSQL、Mybatis、Logbackで開発をしております。
Mybatisで実施したSQL、バインド変数などをログに出力したい為に、
logback-spring.xmlに以下の記述をして、ログを出力するようにしました。
このログの出力でお聞きしたい事があります。
毎回ログを出力せずに、必要な時だけログを出力したいのですが、
logback-spring.xml以外(プログラムからになります)から、
ログレベルなどを変更して、ログを出力する/出力しないといった制御を実施したいのですが、
出来るのでしょうか。
<appender name="SQL_LOGGER" class="ch.qos.logback.core.ConsoleAppender"> <target>System.out</target> <encoder> <pattern>%d{yyyy/MM/dd HH:mm:ss.SSS} [%t] %highlight(%-5le) %cyan(%-40.40lo{36}) - %green(%msg) %n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>DEBUG</level> </filter> </appender> <logger name="com.apri" level="DEBUG"> <appender-ref ref="SQL_LOGGER" /> </logger>
以上です。
よろしくお願いいたします。
(追記)
以下のようにフィルタを追加してlogback-spring.xmlの記述を変更しましたら、
フィルタは動くようになりましたが、
@AutowiredのconfigServiceがNULLとなってしまいます。
SQLLoggingFilter .java
public class SQLLoggingFilter extends Filter<ILoggingEvent> { @Autowired ConfigService configService; Level level; @Override public FilterReply decide(ILoggingEvent event) { if (event.getMessage().contains("Preparing") || event.getMessage().contains("Parameters")) { if(configService.isSql_log_hyouji_flg()){ return FilterReply.NEUTRAL; } else{ return FilterReply.DENY; } } else{ return FilterReply.NEUTRAL; } } public void setLevel(String level) { this.level = Level.toLevel(level); } public void start() { if (this.level != null) { super.start(); } } }
logback-spring.xml
<appender name="SQL_LOGGER" class="ch.qos.logback.core.ConsoleAppender"> <target>System.out</target> <encoder> <pattern>%d{yyyy/MM/dd HH:mm:ss.SSS} [%t] %highlight(%-5le) %cyan(%-40.40lo{36}) - %green(%msg) %n</pattern> </encoder> <filter class="com.apri.common.filter.SQLLoggingFilter"> <level>DEBUG</level> </filter> </appender>
Filter内での@Autowiredの使用方法が分からないので、
Mapper XML内のSQLを読み込んでログに出力するサービスを作成しました。
※パラメータ部分の出力個所は、もう少し改善が必要です。
@Service public class SQLHelperService { private static final Logger logger = LoggerFactory.getLogger("sql_logger"); @Autowired ConfigService configService; public void logger_sql(String path_file_name,String mapper_id,Object params) throws ApplicationException { try{ if(configService.isSql_log_hyouji_flg()){ String absolute_path = new File(".").getAbsoluteFile().getParent(); Configuration config = new Configuration(); InputStream fileStream = new FileInputStream(absolute_path+path_file_name); XMLMapperBuilder parser = new XMLMapperBuilder(fileStream, config, "", config.getSqlFragments()); parser.parse(); MappedStatement st = config.getMappedStatement(mapper_id); BoundSql sql = st.getBoundSql(params); logger.info("[SQL]"); logger.info(sql.getSql()); logger.info("[Parameters]"); if(sql.getParameterObject() != null){ logger.info(sql.getParameterObject().toString()); } } } catch (FileNotFoundException e) { throw new ApplicationException(e); } } }

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。