Il est [nul] en charge du 4ème jour (https://qiita.com/YujiSoftware/items/2dc002977e730a3293fd#%E3%81%BE%E3%81%A8%E3%82%81).
Par défaut, de nombreux journaux sont générés au niveau INFO, alors contrôlez cela.
Java
openjdk 11.0.1 2018-10-16
Doma2
2.19.3
doma-spring-boot
1.1.1
Spring Boot
2.1.1
build.gradle
buildscript {
ext {
springBootVersion = '2.1.1.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
sourceCompatibility = 11
targetCompatibility = 11
compileJava.options.encoding = "UTF-8"
repositories {
mavenCentral()
}
dependencies {
implementation('org.springframework.boot:spring-boot-starter-jdbc')
implementation('org.seasar.doma.boot:doma-spring-boot-starter:1.1.1') {
exclude group: 'org.seasar.doma', module: 'doma'
}
implementation('org.seasar.doma:doma:2.19.3')
runtimeOnly('com.h2database:h2')
}
processResources.destinationDir = compileJava.destinationDir
compileJava.dependsOn processResources
TestTable.java
package sample.springboot.doma2;
import org.seasar.doma.Entity;
import org.seasar.doma.GeneratedValue;
import org.seasar.doma.GenerationType;
import org.seasar.doma.Id;
import org.seasar.doma.Table;
@Table(name = "TEST_TABLE")
@Entity
public class TestTable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long id;
public String name;
@Override
public String toString() {
return "TestTable{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
TestTableDao.java
package sample.springboot.doma2;
import org.seasar.doma.Dao;
import org.seasar.doma.Insert;
import org.seasar.doma.Select;
import org.seasar.doma.boot.ConfigAutowireable;
import java.util.List;
@Dao
@ConfigAutowireable
public interface TestTableDao {
@Select
List<TestTable> findAll();
@Insert
int insert(TestTable testTable);
}
Doma2Application.java
package sample.springboot.doma2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class Doma2Application {
public static void main(String[] args) {
try (ConfigurableApplicationContext context = SpringApplication.run(Doma2Application.class, args)) {
TestTableDao dao = context.getBean(TestTableDao.class);
System.out.println(dao.findAll());
TestTable foo = new TestTable();
foo.name = "foo";
dao.insert(foo);
TestTable bar = new TestTable();
bar.name = "bar";
dao.insert(bar);
System.out.println(dao.findAll());
}
}
}
2018-12-03 22:32:25.979 INFO 24784 --- [ main] o.s.doma.jdbc.UtilLoggingJdbcLogger : [DOMA2220] ENTER :classe=[sample.springboot.doma2.TestTableDaoImpl],Méthode=[findAll]
2018-12-03 22:32:26.038 INFO 24784 --- [ main] o.s.doma.jdbc.UtilLoggingJdbcLogger : [DOMA2076]Journal SQL:Fichier SQL=[META-INF/sample/springboot/doma2/TestTableDao/findAll.sql],
SELECT *
FROM TEST_TABLE
2018-12-03 22:32:26.049 INFO 24784 --- [ main] o.s.doma.jdbc.UtilLoggingJdbcLogger : [DOMA2221] EXIT :classe=[sample.springboot.doma2.TestTableDaoImpl],Méthode=[findAll]
[]
2018-12-03 22:32:26.049 INFO 24784 --- [ main] o.s.doma.jdbc.UtilLoggingJdbcLogger : [DOMA2220] ENTER :classe=[sample.springboot.doma2.TestTableDaoImpl],Méthode=[insert]
2018-12-03 22:32:26.068 INFO 24784 --- [ main] o.s.doma.jdbc.UtilLoggingJdbcLogger : [DOMA2076]Journal SQL:Fichier SQL=[null],
insert into TEST_TABLE (id, name) values (null, 'foo')
2018-12-03 22:32:26.071 INFO 24784 --- [ main] o.s.doma.jdbc.UtilLoggingJdbcLogger : [DOMA2221] EXIT :classe=[sample.springboot.doma2.TestTableDaoImpl],Méthode=[insert]
2018-12-03 22:32:26.072 INFO 24784 --- [ main] o.s.doma.jdbc.UtilLoggingJdbcLogger : [DOMA2220] ENTER :classe=[sample.springboot.doma2.TestTableDaoImpl],Méthode=[insert]
2018-12-03 22:32:26.072 INFO 24784 --- [ main] o.s.doma.jdbc.UtilLoggingJdbcLogger : [DOMA2076]Journal SQL:Fichier SQL=[null],
insert into TEST_TABLE (id, name) values (null, 'bar')
2018-12-03 22:32:26.072 INFO 24784 --- [ main] o.s.doma.jdbc.UtilLoggingJdbcLogger : [DOMA2221] EXIT :classe=[sample.springboot.doma2.TestTableDaoImpl],Méthode=[insert]
2018-12-03 22:32:26.072 INFO 24784 --- [ main] o.s.doma.jdbc.UtilLoggingJdbcLogger : [DOMA2220] ENTER :classe=[sample.springboot.doma2.TestTableDaoImpl],Méthode=[findAll]
2018-12-03 22:32:26.073 INFO 24784 --- [ main] o.s.doma.jdbc.UtilLoggingJdbcLogger : [DOMA2076]Journal SQL:Fichier SQL=[META-INF/sample/springboot/doma2/TestTableDao/findAll.sql],
SELECT *
FROM TEST_TABLE
2018-12-03 22:32:26.075 INFO 24784 --- [ main] o.s.doma.jdbc.UtilLoggingJdbcLogger : [DOMA2221] EXIT :classe=[sample.springboot.doma2.TestTableDaoImpl],Méthode=[findAll]
[TestTable{id=1, name='foo'}, TestTable{id=2, name='bar'}]
Par défaut, il existe de nombreux journaux sur Doma2 au niveau INFO. Puisqu'il n'est pas possible de le déplacer en production tel quel, sortez-le au niveau DEBUG et contrôlez diverses choses.
JdbcLogger
qui utilise
java.util.logging.Logger` par défaut est fourni.java.util.logging.Logger
.
--Pour cela, veuillez vous référer à Comment fonctionne jul-to-slf4j-- QiitaAbstractJdbcLogger.java
package org.seasar.doma.jdbc;
...
public abstract class AbstractJdbcLogger<LEVEL> implements JdbcLogger {
/**Niveau de journal par défaut*/
protected LEVEL defaultLevel;
protected AbstractJdbcLogger(LEVEL level) {
if (level == null) {
throw new DomaNullPointerException("level");
}
this.defaultLevel = level;
}
@Override
public void logDaoMethodEntering(String callerClassName,
String callerMethodName, Object... args) {
logDaoMethodEntering(callerClassName, callerMethodName, args,
defaultLevel, () -> Message.DOMA2220.getMessage( //★ Passer le niveau de journalisation du champ d'instance
callerClassName, callerMethodName));
}
protected void logDaoMethodEntering(String callerClassName,
String callerMethodName, Object args[], LEVEL level,
Supplier<String> messageSupplier) {
log(level, callerClassName, callerMethodName, null, messageSupplier);
}
...
--Par exemple, logDaoMethodEntering ()
imprime le journal lorsque la méthode de Dao est lancée.
logDaoMethodEntering ()
qui est protected
et transmet le niveau de journal par défaut ( defaultLevel
) du champ d'instance au niveau de journal (LEVEL
) de l'argument.
--ʻAbstractJdbcLogger` définit de nombreuses autres méthodes de journalisation lorsque Dao est exécuté, mais elles ont toutes la même structure.defaultLevel
de ʻAbstractJdbcLogger. --Et l'emplacement où le niveau de journal par défaut en question est défini est dans ʻUtilLoggingJdbcLogger
UtilLoggingJdbcLogger.java
package org.seasar.doma.jdbc;
...
public class UtilLoggingJdbcLogger extends AbstractJdbcLogger<Level> {
/**L'enregistreur utilisé dans ce cas.*/
protected final Logger logger;
...
public UtilLoggingJdbcLogger() {
this(Level.INFO); //★ niveau INFO lorsqu'il est généré par le constructeur par défaut
}
...
public UtilLoggingJdbcLogger(Level level) {
this(level, Logger.getLogger(UtilLoggingJdbcLogger.class.getName()));
}
...
--Si ʻUtilLoggingJdbcLoggerest généré avec le constructeur par défaut, le niveau de journalisation sera INFO. --Si vous ne spécifiez pas explicitement une instance de
JdbcLogger dans les paramètres Doma2, ʻUtilLoggingJdbcLogger
est généré par le constructeur par défaut, ce qui fait que tous les niveaux de sortie du journal sont INFO.
Si vous utilisez doma-spring-boot, vous pouvez configurer Doma2 en utilisant DomaConfigBuilder
.
Doma2Application.java
package sample.springboot.doma2;
import org.seasar.doma.boot.autoconfigure.DomaConfigBuilder;
import org.seasar.doma.jdbc.JdbcLogger;
import org.seasar.doma.jdbc.UtilLoggingJdbcLogger;
...
import org.springframework.context.annotation.Bean;
import java.util.logging.Level;
@SpringBootApplication
public class Doma2Application {
public static void main(String[] args) {
try (ConfigurableApplicationContext context = SpringApplication.run(Doma2Application.class, args)) {
...
}
}
@Bean
public JdbcLogger jdbcLogger() {
return new UtilLoggingJdbcLogger(Level.FINE); //★ Généré avec le niveau de journal défini sur FINE
}
@Bean
public DomaConfigBuilder domaConfigBuilder() {
DomaConfigBuilder builder = new DomaConfigBuilder();
builder.jdbcLogger(jdbcLogger()); //★ Réglez jdbcLogger
return builder;
}
}
Résultat d'exécution
[]
[TestTable{id=1, name='foo'}, TestTable{id=2, name='bar'}]
--Formé en définissant le niveau de journalisation sur FINE
dans l'argument du constructeur de ʻUtilLoggingJdbcLogger et en le définissant sur
jdbcLogger () ʻof DomaConfigBuilder
.
FINE
(niveau DEBUG dans SLF4J etc.), donc le journal n'est plus sorti.java.util.logging.Logger
et le niveau de journalisation de SLF4J est [Javadoc] de SLF4JBridgeHandler
(https://www.slf4j.org/api/org/slf4j/bridge/SLF4JBridgeHandler. Voir html)Si vous souhaitez afficher uniquement un journal spécifique à un niveau différent du niveau de journal par défaut, tel que "Je veux sortir uniquement la sortie SQL au niveau INFO", je fais probablement ce qui suit.
MyJdbcLogger.java
package sample.springboot.doma2;
import org.seasar.doma.jdbc.Sql;
import org.seasar.doma.jdbc.UtilLoggingJdbcLogger;
import java.util.function.Supplier;
import java.util.logging.Level;
//★ Créez votre propre enregistreur en héritant de UtilLoggingJdbcLogger
public class MyJdbcLogger extends UtilLoggingJdbcLogger {
public MyJdbcLogger() {
super(Level.FINE); //★ Le niveau de journalisation par défaut est FINE
}
//★ Remplacez la méthode de journalisation qui génère SQL
@Override
protected void logSql(String callerClassName, String callerMethodName, Sql<?> sql, Level level, Supplier<String> messageSupplier) {
//★ Niveau d'argumentation(Niveau de journal par défaut)Ignorer et remplacer de force par INFO
super.logSql(callerClassName, callerMethodName, sql, Level.INFO, messageSupplier);
}
}
Doma2Application.java
package sample.springboot.doma2;
...
@SpringBootApplication
public class Doma2Application {
public static void main(String[] args) {
try (ConfigurableApplicationContext context = SpringApplication.run(Doma2Application.class, args)) {
...
}
}
@Bean
public JdbcLogger jdbcLogger() {
return new MyJdbcLogger(); //★ Utilisez votre propre enregistreur
}
@Bean
public DomaConfigBuilder domaConfigBuilder() {
DomaConfigBuilder builder = new DomaConfigBuilder();
builder.jdbcLogger(jdbcLogger());
return builder;
}
}
Résultat d'exécution
2018-12-03 23:09:34.627 INFO 18180 --- [ main] o.s.doma.jdbc.UtilLoggingJdbcLogger : [DOMA2076]Journal SQL:Fichier SQL=[META-INF/sample/springboot/doma2/TestTableDao/findAll.sql],
SELECT *
FROM TEST_TABLE
[]
2018-12-03 23:09:34.656 INFO 18180 --- [ main] o.s.doma.jdbc.UtilLoggingJdbcLogger : [DOMA2076]Journal SQL:Fichier SQL=[null],
insert into TEST_TABLE (id, name) values (null, 'foo')
2018-12-03 23:09:34.660 INFO 18180 --- [ main] o.s.doma.jdbc.UtilLoggingJdbcLogger : [DOMA2076]Journal SQL:Fichier SQL=[null],
insert into TEST_TABLE (id, name) values (null, 'bar')
2018-12-03 23:09:34.661 INFO 18180 --- [ main] o.s.doma.jdbc.UtilLoggingJdbcLogger : [DOMA2076]Journal SQL:Fichier SQL=[META-INF/sample/springboot/doma2/TestTableDao/findAll.sql],
SELECT *
FROM TEST_TABLE
[TestTable{id=1, name='foo'}, TestTable{id=2, name='bar'}]
protected
) que vous souhaitez modifier le niveau de journal et le remplacez par le niveau dont vous souhaitez modifier le niveau de journal. C'est tout pour le calendrier de l'avent Java de demain, nul.
</ del>
Quelqu'un! écrire! !! !! !! </ del>
La charge de demain sera @orekyuu.
Recommended Posts