【问题标题】:Forward c3po log into file at Logback将 c3po 日志转发到 Logback 的文件中
【发布时间】:2017-04-13 12:07:00
【问题描述】:

c3po 日志通常是打印控制台。我尝试将 C3PO LOGS 转发到文件中,但无法实现

这是我的 logback.xml 和 pom.xml

LOGBACK

<?xml version="1.0" encoding="UTF-8" ?>
<configuration scanPeriod="10 seconds" debug="false" scan="true">
    <property name="LOG_DIR" value="logs" />
    <appender name="STDOUTAppender" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%date %level [%X{traceid}] - %C{1}:%L %msg%n</pattern>
        </encoder>
    </appender>


    <appender name="SPRING"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_DIR}/spring.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${LOG_DIR}/spring.log.%d{yyyy-MM-dd-HH}
            </FileNamePattern>

            <MaxHistory>30</MaxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>%date %level [%X{traceid}] - %C{1}:%L %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="errorAppender"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_DIR}/error/ERROR.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${LOG_DIR}/error/ERROR.log.%d{yyyy-MM-dd-HH}
            </FileNamePattern>

            <MaxHistory>72</MaxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>%date %level [%thread] %msg%n</pattern>
        </encoder>

        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="AppAppender"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_DIR}/application/APPLICATION.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${LOG_DIR}/application/APPLICATION.log.%d{yyyy-MM-dd-HH}
            </FileNamePattern>
        </rollingPolicy>

        <encoder>
            <pattern>%date %level [%X{traceid}] - %C{1}:%L %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="TxnAppender"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_DIR}/txn/TXN.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${LOG_DIR}/txn/TXN.log.%d{yyyy-MM-dd-HH}
            </FileNamePattern>
        </rollingPolicy>

        <encoder>
            <pattern>%msg%n</pattern>
        </encoder>
    </appender>

    <appender name="AlarmAppender"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_DIR}/alarm/ALARM.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${LOG_DIR}/alarm/ALARM.log.%d{yyyy-MM-dd}
            </FileNamePattern>
        </rollingPolicy>

        <encoder>
            <pattern>%msg%n</pattern>
        </encoder>
    </appender>

    <appender name="C3POAppender"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_DIR}/c3po/c3po.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${LOG_DIR}/c3po/c3po.log.%d{yyyy-MM-dd}
            </FileNamePattern>

            <MaxHistory>30</MaxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>%msg%n</pattern>
        </encoder>
    </appender>

    <logger name="org.springframework">
        <level value="INFO" />
        <appender-ref ref="SPRING" />
    </logger>

    <logger name="TxnLogger">
        <level value="INFO" />
        <appender-ref ref="TxnAppender" />
    </logger>

    <logger name="AlarmLogger">
        <level value="INFO" />
        <appender-ref ref="AlarmAppender" />
    </logger>

    <logger name="com.mchange.v2.c3p0">
        <appender-ref ref="C3POAppender" />
    </logger>

    <logger name="com.ttech.pnsender" additivity="true" level="DEBUG">
        <appender-ref ref="AppAppender" />
        <appender-ref ref="errorAppender" />
    </logger>

    <root level="ERROR">
        <appender-ref ref="STDOUTAppender" />
    </root>
</configuration>

POM.XML

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.ahmetk</groupId>
<artifactId>pnsender</artifactId>


<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
    <docker.image.prefix>springio</docker.image.prefix>
</properties>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.2.RELEASE</version>
</parent>

<build>

    <plugins>

        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>




    </plugins>



</build>

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
    </dependency>

    <!-- weblogic üzerine deploy etmek için websocket collision olmasin. -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-websocket</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
org.apache.tomcat.embed tomcat-embed-websocket 假如 -->
<!-- to ensure that the embedded servlet container doesn’t interfere with the servlet container -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>


    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.0.1</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>1.9.5</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>11.2.0.4</version>
    </dependency>
    <dependency>
        <groupId>com.mchange</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.2.1</version>
    </dependency>

    <dependency>
        <groupId>com.googlecode.libphonenumber</groupId>
        <artifactId>libphonenumber</artifactId>
        <version>7.2.6</version>
    </dependency>

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.4</version>
    </dependency>

    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>19.0</version>
    </dependency>

    <dependency>
        <groupId>com.datastax.cassandra</groupId>
        <artifactId>cassandra-driver-core</artifactId>
        <version>3.1.0</version>
    </dependency>

    <dependency>
        <groupId>com.datastax.cassandra</groupId>
        <artifactId>cassandra-driver-mapping</artifactId>
        <version>3.1.0</version>
    </dependency>

    <dependency>
        <groupId>com.googlecode.json-simple</groupId>
        <artifactId>json-simple</artifactId>
        <version>1.1.1</version>
    </dependency>


    <!-- Push Notification API for IOS devices -->
    <dependency>
        <groupId>com.notnoop.apns</groupId>
        <artifactId>apns</artifactId>
        <version>1.0.0.Beta7_2-SNAPSHOT</version>
        <exclusions>
            <exclusion>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
            </exclusion>
        </exclusions>
    </dependency>


    <dependency>
        <groupId>com.relayrides</groupId>
        <artifactId>pushy</artifactId>
        <version>0.5-SNAPSHOT</version>
    </dependency>

    <!-- KAFKA-QUEUE -->
    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka_2.10</artifactId>
        <version>0.8.2.1</version>
            <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-clients</artifactId>
        <version>0.8.2.1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.avro</groupId>
        <artifactId>avro</artifactId>
        <version>1.7.7</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

<!--weblogic deployment 3.2.1 ile çalıştı  -->
<dependency>
    <groupId>org.jboss.logging</groupId>
    <artifactId>jboss-logging</artifactId>
    <version>3.3.0.Final</version>
</dependency>

    <!-- TESTING- EMBEDEED DB -->
    <dependency>
        <groupId>hsqldb</groupId>
        <artifactId>hsqldb</artifactId>
        <version>1.8.0.10</version>
        <scope>test</scope>
    </dependency>

</dependencies>

【问题讨论】:

  • ${LOG_DIR}/c3po 文件夹有权限限制吗?
  • 不,其他 appender 工作正常,甚至创建了 c3po/c3po.log 文件,
  • 无法将日志转发到文件中,现在我只是暂时禁用了 c3p0 日志记录 com.mchange.v2.log.FallbackMLog.DEFAULT_CUTOFF_LEVEL

标签: java spring logback


【解决方案1】:

我在使用 slf4j + logback + c3p0 组合时遇到了类似的问题。

通过以下步骤找到解决方案:

  1. 让 c3p0 (MLog) 选择 java 1.4+ standard logging,无需执行任何操作。自动选择`如果你没有配置 FallbackMLog
  2. 将依赖项org.slf4j / jul-to-slf4j 添加到您的 pom.xml(桥接 java util 日志记录到 slf4j)
  3. 在您的 main 上,在 c3p0 初始化之前添加以下代码片段:

    // Getting JUL root logger
    Logger logger = java.util.logging.LogManager.getLogManager().getLogger("");
    
    // Remove already attached Console handler which is responsible for above trouble
    for (Handler handler : logger.getHandlers()) {
        handler.close();
        logger.removeHandler(handler);
    }
    
    // Let SLF4J bridge configure its own handler(s)
    SLF4JBridgeHandler.install();
    

【讨论】:

  • slf4j 支持是 c3p0 0.9.5 功能。在 0.9.5.2 版本之前,slf4j 支持存在性能问题(不必要的字符串分配)。有关如何为 MLog 和其他网桥设置 Slf4j 的更多详细信息:mchange.com/projects/c3p0/#configuring_logging 添加单词 logback 以进行索引。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-26
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多