java - 无法将 c3p0 日志记录转至文件

标签 java logging c3p0 java.util.logging

我正在使用 Java 8、Hibernate 4.3.11 和 c3p0 9.2.1 以及标准 Java 日志记录包,但在将调试信息从 c3p0 写入调试日志时遇到问题。

我添加

 -Dcom.mchange.v2.log.MLog=com.mchange.v2.log.jdk14logging.Jdk14MLog

启动,这会让 c3p0 使用标准日志记录并写入控制台,但它不会写入我的调试日志文件。

我为我的应用程序和库初始化记录器

SongKong.ioLogger = Logger.getLogger("org.jaudiotagger");
MainWindow.logger = Logger.getLogger("com.jthink");

然后调用我的 LogProperties 类来配置日志文件和控制台并写入数据,这样就可以了。

我做错了什么

  package com.jthink.songkong.logging;


    import com.jthink.songkong.cmdline.SongKong;
    import com.jthink.songkong.preferences.GeneralPreferences;
    import com.jthink.songkong.preferences.UserPreferences;
    import com.jthink.songkong.ui.MainWindow;
    import com.jthink.songkong.util.Platform;

    import java.io.IOException;
    import java.nio.charset.StandardCharsets;
    import java.util.logging.ConsoleHandler;
    import java.util.logging.FileHandler;
    import java.util.logging.Level;
    import java.util.logging.Logger;

    /**
     * This defines the command line properties of SongKong, currently consists of logger settings
     */
    public final class LogProperties
    {

        public static int LOG_SIZE_IN_BYTES = 10000000;

        public LogProperties()
        {
            try
            {

                //Set logging for jaudiotagger lib, user configurable
                SongKong.ioLogger.setLevel(Level.parse(String.valueOf(GeneralPreferences.getInstance().getIoDebugLevel())));
                SongKong.ioLogger.setUseParentHandlers(false);

                //Set logging for songkongdebug, user configurable
                MainWindow.logger.setLevel(Level.parse(String.valueOf(GeneralPreferences.getInstance().getDebugLevel())));
                MainWindow.logger.setUseParentHandlers(false);

                //C3p0 Logger
                Logger c3p0Logger = Logger.getLogger("com.mchange.v2.c3p0");
                c3p0Logger.setLevel(Level.FINEST);
                c3p0Logger.setUseParentHandlers(false);

                //Set Filehandler used for writing to debug log
                String logFileName = Platform.getPlatformLogFolderInLogfileFormat() + "songkong_debug%u-%g.log";
                FileHandler fe = new FileHandler(logFileName, LOG_SIZE_IN_BYTES, 10, true);
                fe.setEncoding(StandardCharsets.UTF_8.name());
                fe.setFormatter(new com.jthink.songkong.logging.LogFormatter());
                fe.setLevel(Level.FINEST);

                //Write output from these loggers to the debug log file
                MainWindow.logger.addHandler(fe);
                SongKong.ioLogger.addHandler(fe);
                c3p0Logger.addHandler(fe);

                ConsoleHandler ch = new ConsoleHandler();
                ch.setFormatter(new com.jthink.songkong.logging.LogFormatter());
                ch.setLevel(Level.FINEST);
                MainWindow.logger.addHandler(ch);
                SongKong.ioLogger.addHandler(ch);
                c3p0Logger.addHandler(ch);
            }
            catch (IOException ioe)
            {
                MainWindow.userInfoLogger.severe("Unable to open log file");
            }
        }

    }

我需要调试才能写入日志文件,因为我希望客户运行一些测试,所以如果数据只是写入控制台是没有好处的。此外,写入控制台的 c3p0 数据的格式不是我的其他消息的格式(由 com.jthink.songkong.logging.LogFormatter() 定义),因此看来我对 LogProperties() 的调用实际上被忽略了,即使它在我第一次访问 c3p0 之前被调用。

例如,这是在启动时输出到控制台

debuglogfile is:C:\Users\Paul\AppData\Roaming\SongKong\Logs/songkong_debug%u-%g.log
userlogfile is:C:\Users\Paul\AppData\Roaming\SongKong\Logs/songkong_user%u-%g.log
23/08/2019 10.44.26:BST:SongKong:setLocale:SEVERE: Locale is:en
23/08/2019 10.44.27:BST:SongKong:setFonts:WARNING: Fonts Enabled:true
23/08/2019 10.44.27:BST:SongKong:setFonts:WARNING: Fonts configured successfully
23/08/2019 10.44.27:BST:SongKong:init:WARNING: end
23/08/2019 10.44.27:BST:SongKong:finish:WARNING: finish
23/08/2019 10.44.29:BST:SongKong:writeSystemInfo:WARNING: SongKong 6.3 Psychocandy 1099 24/07/2019 using Java 1.8.0_181 25.181-b13 64bit on Windows 10 10.0 amd64 initialized successfully
23/08/2019 10.44.29:BST:SongKong:writeSystemInfo:WARNING: No of CPUs:8
23/08/2019 10.44.29:BST:SongKong:writeSystemInfo:WARNING: SongKong has been configured with minimum heap memory of 100 mb, maximum heap memory of 1,778 mb and maximum permanent memory of -32 mb
23/08/2019 10.44.29:BST:SongKong:writeSystemInfo:WARNING: Total Computer Memory is 24,466 mb
23/08/2019 10.44.30:BST:SongKong:writeSystemInfo:WARNING: Username:Paul:Domain:pclaptop:RunningAsAdmin:false
23/08/2019 10.44.30:BST:SongKong:checkDatabase:WARNING: Setting Db Folder:C:\Users\Paul\AppData\Roaming\SongKong/Database
23/08/2019 10.44.30:BST:SongKong:checkDatabase:WARNING: Lock File remaining from previous, deleting lock
23/08/2019 10.44.30:BST:HibernateUtil:createFactory:SEVERE: ----Initilizing Hibernate Session factory
Aug 23, 2019 10:44:31 AM com.mchange.v2.log.MLog <clinit>
INFO: MLog clients using java 1.4+ standard logging.
Aug 23, 2019 10:44:32 AM com.mchange.v2.c3p0.C3P0Registry banner
INFO: Initializing c3p0-0.9.2.1 [built 20-March-2013 10:47:27 +0000; debug? true; trace: 10]
Aug 23, 2019 10:44:32 AM com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource getPoolManager
INFO: Initializing c3p0 pool... com.mchange.v2.c3p0.PoolBackedDataSource@3c73cbbb [ connectionPoolDataSource -> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@adb66302 [ acquireIncrement -> 3, acquireRetryAttempts -> 10, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, debugUnreturnedConnectionStackTraces -> true, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 2rwcn5a41gohnzr1p7tndj|54e1c68b, idleConnectionTestPeriod -> 3000, initialPoolSize -> 1, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 2000, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 5, maxStatements -> 3000, maxStatementsPerConnection -> 50, minPoolSize -> 1, nestedDataSource -> com.mchange.v2.c3p0.DriverManagerDataSource@2d7c4b75 [ description -> null, driverClass -> null, factoryClassLocation -> null, identityToken -> 2rwcn5a41gohnzr1p7tndj|f736069, jdbcUrl -> jdbc:h2:async:C:\Users\Paul\AppData\Roaming\SongKong/Database/Database;FILE_LOCK=SOCKET;MVCC=TRUE;DB_CLOSE_ON_EXIT=FALSE;CACHE_SIZE=50000;, properties -> {user=******, password=******} ], preferredTestQuery -> null, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 10, usesTraditionalReflectiveProxies -> false; userOverrides: {} ], dataSourceName -> null, factoryClassLocation -> null, identityToken -> 2rwcn5a41gohnzr1p7tndj|a38c7fe, numHelperThreads -> 3 ]
23/08/2019 10.44.36:BST:SongKong:checkDatabase:SEVERE: Accessed Database okay
23/08/2019 10.44.36:BST:SongKong:checkCache:WARNING: Checking Cache:C:\Users\Paul\AppData\Roaming\SongKong\Database\EhCache
23/08/2019 10.44.38:BST:SongKong:checkCache:WARNING: Checked Cache:C:\Users\Paul\AppData\Roaming\SongKong\Database\EhCache
23/08/2019 10.44.39:BST:SongKong:setUserAgent:WARNING: start
23/08/2019 10.44.41:BST:AbstractAcoustidQuery:performBasicSubmissionQuery:SEVERE: Posting to url:http://api.acoustid.org/v2/user/lookup?format=xml&client=8XaBELgH&user=7st7qtJpzr
23/08/2019 10.44.42:BST:SongKong:setUserAgent:WARNING: end
23/08/2019 10.44.42:BST:SongKong:finish:WARNING: finish

最佳答案

Also the format of c3p0 data written the console is not in the format of my other messages (as defined by com.jthink.songkong.logging.LogFormatter()) so it seems that my call to LogProperties() is effectively being ignored even though it is called before I access c3p0 for the first time.

记录仪受 garbage collection 的约束。您的代码中的一个错误如下: Logger c3p0Logger = Logger.getLogger("com.mchange.v2.c3p0");

删除该行并创建一个常量:

private static final Logger c3p0Logger = Logger.getLogger("com.mchange.v2.c3p0");

关于java - 无法将 c3p0 日志记录转至文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57606748/

相关文章:

java - Javassist 生成类中的匿名内部类问题

java - 从 Web-Inf/Lib 文件夹中排除一些 JAR

java - 通过 Web 服务访问 Microsoft Office SharePoint 2007

logging - Docker日志文件:如何知道笔记的时间?

ios - CocoaLumberjack with Swift - 调用预处理器宏

php - 即使 APP_DEBUG=false,Laravel 也会继续记录

c3p0 - c3p0过时了吗?

Java - Selenium - 使用断言时行为不一致

MySQL语法错误异常 : Table XYZ doesn't exist

java - 在服务中构建连接池并在其他服务中使用它们