Es ist [null] verantwortlich für den 4. Tag (https://qiita.com/YujiSoftware/items/2dc002977e730a3293fd#%E3%81%BE%E3%81%A8%E3%82%81).
Standardmäßig werden viele Protokolle auf INFO-Ebene ausgegeben. Kontrollieren Sie dies.
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 :Klasse=[sample.springboot.doma2.TestTableDaoImpl],Methode=[findAll]
2018-12-03 22:32:26.038 INFO 24784 --- [ main] o.s.doma.jdbc.UtilLoggingJdbcLogger : [DOMA2076]SQL-Protokoll:SQL-Datei=[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 :Klasse=[sample.springboot.doma2.TestTableDaoImpl],Methode=[findAll]
[]
2018-12-03 22:32:26.049 INFO 24784 --- [ main] o.s.doma.jdbc.UtilLoggingJdbcLogger : [DOMA2220] ENTER :Klasse=[sample.springboot.doma2.TestTableDaoImpl],Methode=[insert]
2018-12-03 22:32:26.068 INFO 24784 --- [ main] o.s.doma.jdbc.UtilLoggingJdbcLogger : [DOMA2076]SQL-Protokoll:SQL-Datei=[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 :Klasse=[sample.springboot.doma2.TestTableDaoImpl],Methode=[insert]
2018-12-03 22:32:26.072 INFO 24784 --- [ main] o.s.doma.jdbc.UtilLoggingJdbcLogger : [DOMA2220] ENTER :Klasse=[sample.springboot.doma2.TestTableDaoImpl],Methode=[insert]
2018-12-03 22:32:26.072 INFO 24784 --- [ main] o.s.doma.jdbc.UtilLoggingJdbcLogger : [DOMA2076]SQL-Protokoll:SQL-Datei=[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 :Klasse=[sample.springboot.doma2.TestTableDaoImpl],Methode=[insert]
2018-12-03 22:32:26.072 INFO 24784 --- [ main] o.s.doma.jdbc.UtilLoggingJdbcLogger : [DOMA2220] ENTER :Klasse=[sample.springboot.doma2.TestTableDaoImpl],Methode=[findAll]
2018-12-03 22:32:26.073 INFO 24784 --- [ main] o.s.doma.jdbc.UtilLoggingJdbcLogger : [DOMA2076]SQL-Protokoll:SQL-Datei=[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 :Klasse=[sample.springboot.doma2.TestTableDaoImpl],Methode=[findAll]
[TestTable{id=1, name='foo'}, TestTable{id=2, name='bar'}]
Standardmäßig gibt es auf INFO-Ebene viele Protokolle zu Doma2. Da es nicht möglich ist, es in der Produktion so zu verschieben, wie es ist, geben Sie es auf die DEBUG-Ebene aus und steuern Sie verschiedene Dinge.
--Doma2-Protokollausgabe erfolgt über die JdbcLogger
-Schnittstelle
AbstractJdbcLogger.java
package org.seasar.doma.jdbc;
...
public abstract class AbstractJdbcLogger<LEVEL> implements JdbcLogger {
/**Standardprotokollstufe*/
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( //★ Übergeben der Protokollebene des Instanzfelds
callerClassName, callerMethodName));
}
protected void logDaoMethodEntering(String callerClassName,
String callerMethodName, Object args[], LEVEL level,
Supplier<String> messageSupplier) {
log(level, callerClassName, callerMethodName, null, messageSupplier);
}
...
logDaoMethodEntering ()
das Protokoll, wenn Daos Methode gestartet wird.
--Diese Methode ruft "logDaoMethodEntering ()" auf, das "geschützt" ist und die Standardprotokollebene ("defaultLevel") des Instanzfelds an die Protokollebene ("LEVEL") des Arguments übergibt.
--AbstractJdbcLogger
definiert viele andere Protokollierungsmethoden, wenn Dao ausgeführt wird, aber alle haben dieselbe Struktur.defaultLevel
von AbstractJdbcLogger
festgelegten Protokollebene ausgegeben.
--Und der Speicherort, an dem die betreffende Standardprotokollstufe festgelegt ist, befindet sich in "UtilLoggingJdbcLogger"UtilLoggingJdbcLogger.java
package org.seasar.doma.jdbc;
...
public class UtilLoggingJdbcLogger extends AbstractJdbcLogger<Level> {
/**Der in dieser Instanz verwendete Logger.*/
protected final Logger logger;
...
public UtilLoggingJdbcLogger() {
this(Level.INFO); //★ INFO-Ebene, wenn vom Standardkonstruktor generiert
}
...
public UtilLoggingJdbcLogger(Level level) {
this(level, Logger.getLogger(UtilLoggingJdbcLogger.class.getName()));
}
...
Wenn Sie doma-spring-boot verwenden, können Sie Doma2 mit DomaConfigBuilder
konfigurieren.
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); //★ Wird mit der Protokollstufe FINE generiert
}
@Bean
public DomaConfigBuilder domaConfigBuilder() {
DomaConfigBuilder builder = new DomaConfigBuilder();
builder.jdbcLogger(jdbcLogger()); //★ Stellen Sie jdbcLogger ein
return builder;
}
}
Ausführungsergebnis
[]
[TestTable{id=1, name='foo'}, TestTable{id=2, name='bar'}]
Wenn Sie nur ein bestimmtes Protokoll auf einer anderen Ebene als der Standardprotokollebene ausgeben möchten, z. B. "Ich möchte nur SQL-Ausgabe auf der INFO-Ebene ausgeben", gehe ich wahrscheinlich wie folgt vor.
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;
//★ Erstellen Sie Ihren eigenen Logger, indem Sie UtilLoggingJdbcLogger erben
public class MyJdbcLogger extends UtilLoggingJdbcLogger {
public MyJdbcLogger() {
super(Level.FINE); //★ Die Standardprotokollstufe ist FEIN
}
//★ Überschreiben Sie die Protokollierungsmethode, die SQL ausgibt
@Override
protected void logSql(String callerClassName, String callerMethodName, Sql<?> sql, Level level, Supplier<String> messageSupplier) {
//★ Argumentstufe(Standardprotokollstufe)Ignorieren und zwangsweise durch INFO ersetzen
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(); //★ Verwenden Sie Ihren eigenen Logger
}
@Bean
public DomaConfigBuilder domaConfigBuilder() {
DomaConfigBuilder builder = new DomaConfigBuilder();
builder.jdbcLogger(jdbcLogger());
return builder;
}
}
Ausführungsergebnis
2018-12-03 23:09:34.627 INFO 18180 --- [ main] o.s.doma.jdbc.UtilLoggingJdbcLogger : [DOMA2076]SQL-Protokoll:SQL-Datei=[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]SQL-Protokoll:SQL-Datei=[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]SQL-Protokoll:SQL-Datei=[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]SQL-Protokoll:SQL-Datei=[META-INF/sample/springboot/doma2/TestTableDao/findAll.sql],
SELECT *
FROM TEST_TABLE
[TestTable{id=1, name='foo'}, TestTable{id=2, name='bar'}]
--Erstellen Sie Ihren eigenen Logger, indem Sie "UtilLoggingJdbcLogger" erben
--Und Sie überschreiben die Protokollierungsmethode (protected
), mit der Sie die Protokollebene ändern möchten, und ersetzen sie durch die Ebene, auf der Sie die Protokollebene ändern möchten.
Das ist alles für den morgigen Java-Adventskalender, null.
</ del>
Jemand! schreiben! !! !! !! </ del>
Die Gebühr für morgen beträgt @orekyuu.
Recommended Posts