当前位置: 首页 > 知识库问答 >
问题:

Spring boot中的log4j2:JDBC appender不将日志消息写入DB的列

洪宇定
2023-03-14
  • 我在Gradle中排除了“logback-classic”和“spring-boot-starter-logging”依赖项。
  • 我添加了'log4j-api'、'log4j-core'和'spring-boot-starter-log4j2'依赖项。

我当前的构建。Gradle如下所示:


    buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath 'org.springframework.boot:spring-boot-gradle-plugin:1.5.7.BUILD-SNAPSHOT'
        }
    }
    
    plugins {
        id "org.springframework.boot" version "1.5.7.RELEASE"
    }
    
    apply plugin: 'java'
    apply plugin: 'idea'
    apply plugin: 'io.spring.dependency-management'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'war'
    
    war {
        baseName = 'CprUI'
        version =  '1.0.0-SNAPSHOT'
    }
    
    repositories {
        mavenLocal()
        mavenCentral()
        jcenter()
        maven { url "http://repo.spring.io/libs-snapshot" }
    }
    
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    
    dependencies {
        compile("org.springframework.boot:spring-boot-starter-web")
        compile("org.springframework.boot:spring-boot-starter-actuator")
        compile("org.springframework.boot:spring-boot-starter-security")
        compile("org.springframework.ldap:spring-ldap-core")
        compile("org.springframework.security:spring-security-ldap")
        compile("org.springframework:spring-tx")
        compile("com.unboundid:unboundid-ldapsdk")
        compile("org.springframework.boot:spring-boot-starter-log4j2")
        compile group: 'org.springframework.boot', name: 'spring-boot-starter-thymeleaf', version: '1.5.7.RELEASE'
        compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '1.5.7.RELEASE'
        compile group: 'org.springframework.boot', name: 'spring-boot-starter-parent', version: '1.5.7.RELEASE', ext: 'pom'
        compile("com.oracle:ojdbc6:11.2.0.3")
        compile("org.apache.any23:apache-any23-encoding:2.0")
        compile("org.apache.commons:commons-csv:1.5")
        compile group: 'org.thymeleaf.extras', name: 'thymeleaf-extras-springsecurity4', version: '3.0.2.RELEASE'
        compile("org.springframework.boot:spring-boot-starter-web")
        providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
        testCompile("org.springframework.boot:spring-boot-starter-test")
        testCompile("org.springframework.security:spring-security-test")
        compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.7'
        compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.7'
        compile group: 'org.springframework.boot', name: 'spring-boot-starter-log4j2', version: '2.3.1.RELEASE'
        compile group: 'org.apache.commons', name: 'commons-dbcp2', version: '2.7.0'
        compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.20'
        compile group: 'org.apache.maven.plugins', name: 'maven-compiler-plugin', version: '3.8.1'
    }
    
    configurations.all {
        exclude module: 'spring-boot-starter-logging'
        exclude module: 'logback-classic'
    }

  • 接下来,我创建了log4j2.properties文件,并将其放在/resources目录下。该文件如下所示:

    appenders = console, db
    appender.console.type = Console
    appender.console.name = STDOUT
    appender.console.layout.type = PatternLayout
    appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
    
    appender.db.type = JDBC
    appender.db.name = JDBC
    appender.db.layout.type = PatternLayout
    appender.db.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
    appender.db.connectionSource.type= DriverManager
    appender.db.connectionSource.connectionString = my_connection_string
    appender.db.connectionSource.username = my_username
    appender.db.connectionSource.password = my_password
    appender.db.connectionSource.driverClassName = oracle.jdbc.driver.OracleDriver
    appender.db.tableName = GDPR_LOG
    
    appender.db.columnConfigs[0].type = Column
    appender.db.columnConfigs[0].name = OPERATION_DESCRIPTION
    appender.db.columnConfigs[0].pattern =%msg
    appender.db.columnConfigs[0].isUnicode =false
    
    logger.db.name = eu.unicredit.mtr.cpr.logging
    logger.db.level = debug
    logger.db.additivity = false
    logger.db.appenderRef.db.ref = JDBC
    
    rootLogger.level = debug
    rootLogger.appenderRefs = stdout
    rootLogger.appenderRef.stdout.ref = STDOUT

    null

    # LOGGING
    logging.level.org.hibernate.SQLQuery=debug
    logging.level.org.hibernate.type.descriptor.sql=trace
    logging.level.org.springframework.web=${LOG_LEVEL_SPRING:info}
    logging.level.org.hibernate=${LOG_LEVEL_SPRING:debug}
    logging.level.web=${LOG_LEVEL_SPRING:info}
    logging.config=classpath:log4j2.properties
    
    spring.datasource.url=my_datasource
    spring.datasource.username=my_user
    spring.datasource.password=my_password
    spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
    
    server.context-path=/CprUI


    @Entity
    @Table(name = "GDPR_LOG")
    public class Log {
    
        @Id
        @SequenceGenerator(name="DWH_ID_SEQ_GEN", sequenceName="DIM_CPR_COUNTERPARTY_ID", allocationSize=10)
        @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="DWH_ID_SEQ_GEN")
        @Column(name = "ITEM_ID")
        private Long id;
        @Column(name = "CREATION_TIME")
        private String creation_time;
        @Column(name = "LOG_ID")
        private String log_id;
        @Column(name = "USER_ID")
        private String user_id;
        @Column(name = "WORKSTATION_ID")
        private String workstation_id;
        @Column(name = "SESSION_ID")
        private String session_id;
        @Column(name = "OPERATION_DESCRIPTION")
        private String operation_description;
        @Column(name = "APPLICATION_CODE")
        private String app_code;
        @Column(name = "LEGAL_ENTITY")
        private String entity;
    
    //getters, setters


    @Transactional
        public void saveLogForGetAll(Log log) {
            log.setCreation_time(formatDateTime);
            log.setLog_id("SecLog");
            log.setUser_id(checkUser());
            log.setWorkstation_id(checkIP());
            log.setSession_id(session_string);
            log.setApp_code("QRP");
            log.setEntity("AG");
            logsRepository.save(log);
        }

提前谢了。

干杯!

共有1个答案

仲孙德惠
2023-03-14

你混合了两个不同的概念。要么让log4j将日志记录事件写入数据库,要么实现自己的与log4j无关的记录器。

第1部分显示您将使用log4j。好吧。但是您不需要使用相同表的JPA实体。类Log和方法SaveLogForgetAll(Log Log)并不需要。Log4j将日志记录事件保存到数据库中。

log4j的思想是,代码不应该知道日志事件将如何持久化(在文件系统中、数据库中、通过消息队列可到达的远程设备中,等等)

 类似资料:
  • 在中有一个,可以将日志写入到。 我需要在中使用相同的功能,但我还没有找到这样做的选项。有人知道如何使用实现同样的效果吗?

  • 我在我的项目中使用log4j。我想有标准输出、调试记录器和最终报告记录器。调试记录器几乎写调试/信息级别的消息。报告将是不同的记录器,只写信息消息。我尝试了不同的方法,阅读了很多示例,我仍然无法解决这个问题。要么我丢失了我的标准输出,要么我将所有调试写入两个记录器。 我的密码在这里 } 任何提示都将不胜感激

  • 我正在Servlet 3.0和Tomcat中做一个简单的演示项目 我接受邮递员的JSON请求并提供JSON响应。 现在我也想在我的项目中做日志记录。 所以我使用log4j2 罐子使用:- log4j-1.2.12.jar, jackson-databind-2.6.3.jar, jackson-core-2.6.3.jar Servlet代码:- 我的项目目录:- 我的log4j。xml 当我在e

  • 我正在从事一个Spring Hibernate项目,其中包含Spring AMQP RabbitMQ消息传递实现。rabbitmq配置位于一个单独的xml中,该xml被导入到根应用程序上下文中。rabbitmq侦听器接收器每秒轮询一次队列。重要的日志消息被大量的调试级轮询消息隐藏在日志文件中。 有没有办法将轮询日志分离到另一个文件中,或者阻止它污染日志? 我使用log4j进行日志记录;配置如下。

  • 我已经将log4j2.properties文件与springboot应用程序一起使用。正在创建日志文件,但日志未写入该文件。 日志出现在控制台,但没有写入文件,因为我没有得到问题。 奇怪的是,父包记录器“logger Enabled:Enting main\n\n”被写入文件,而另一个父包记录器“****演示应用程序启动*****”没有被写入文件,如上面的代码所示。并且还检查了子包,即记录器,甚至

  • 我正在使用带有log4j2的Spring Boot1.5.9,当我测试日志记录功能时,创建了日志文件,但没有将日志写入其中,而控制台日志记录程序运行良好。请在pom.xml&log4j2.properties配置下面找到。 log4j2.properties文件:

  • 问题内容: 此代码是否同时写入日志文件和控制台? 问题答案: 不,它不会同时写入两者。只会写入控制台。关于原始代码的简短说明。我想您在某处定义,但是代码仍然不正确。您需要在语句中使用引号,例如: 因为我认为您是要附加到文件中。否则,您的代码将抛出一个因为未定义的变量。 但是,正如其他人所说,您应该强烈考虑使用日志记录模块。这是一个如何同时写入控制台和日志文件的简单示例。该代码部分源自此处和此处:

  • 我在Spring Boot应用程序中使用log4j2来简化日志记录。这是我的配置log4j2-dev.xml 我在项目中的基本类 以下是我如何编写日志: 它在正常情况下工作正常。但是,如果我使用Jmetter发送大量请求(总计:7996,平均:98条消息/秒),我会发现日志记录速度太慢,在停止发送请求大约1.5分钟后,日志记录仍在继续,日志文件的容量仍在增加。 我已经搜索了很多,但仍然不知道如何加