【问题标题】:JAVA: Configure logback in standalone appsJAVA:在独立应用程序中配置 logback
【发布时间】:2017-09-05 14:23:42
【问题描述】:

我有一个 Java 独立应用程序。使用 main 方法,使用以下 2 个导入:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

private static final Logger log = LoggerFactory.getLogger(PecadorDeLaPradera.class);

在同一个文件夹中,我也有一个logback.xml,但我不知道如何告诉使用logback.xml 配置日志的程序

我找不到任何类似于org.apache.log4j.PropertyConfigurator的类

我在运行的 Java 类的同一个文件夹中有这个 logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <!-- trace, debug, info, warn, error, fatal -->
    <timestamp key="myTimestamp" datePattern="yyyy-MM-dd'_'HH-mm-ss.SSS"/>  


    <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
        <resetJUL>true</resetJUL>
    </contextListener>

    <!-- To enable JMX Management -->
    <jmxConfigurator/>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{"yyyy-MM-dd HH:mm"}  [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>pecador.log</file> 

        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>handler.%i.log.zip</fileNamePattern>             
            <minIndex>1</minIndex>
            <maxIndex>3</maxIndex>
        </rollingPolicy>

        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>1MB</maxFileSize>
        </triggeringPolicy>
        <encoder>
            <pattern>%d{"yyyy-MM-dd HH:mm"} [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>



    <!-- <logger name="org.springframework.orm.jpa"     level="debug" /> -->    
    <logger name="com.calzada.pecador"  level="debug" />


    <root level="info">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

我也运行应用程序。带有程序参数:

-Dlogback.configurationFile=/Users/calzada/Dev/J2EE/eclipseWSJ2EE/myApp/src/com/calzada/pecador/logback.xml

我得到了这个错误:

java.util.MissingResourceException: Can't find bundle for base name -Dlogback.configurationFile=/Users/nullpointer/Development/J2EE/eclipseWSJ2EE/myApp/src/com/calzada/pecador/logback.xml, locale en_ES

使用的库是logback-classic-1.2.3.jar

【问题讨论】:

    标签: java logging log4j logback slf4j


    【解决方案1】:

    以下是 logback 的自我配置方式:

    Logback 尝试在类路径中查找名为 logback-test.xml 的文件。

    如果没有找到这样的文件,logback 会尝试在类路径中找到一个名为 logback.groovy 的文件。

    如果没有找到这样的文件,它会在类路径中检查文件logback.xml

    如果没有找到这样的文件,则使用服务提供者加载工具(JDK 1.6 中引入)通过在类路径中查找文件META-INF\services\ch.qos.logback.classic.spi.Configurator 来解析com.qos.logback.classic.spi.Configurator 接口的实现。其内容应指定所需配置器实现的完全限定类名。

    如果以上都没有成功,logback 会使用BasicConfigurator 自动配置自己,这将导致日志输出被定向到控制台。

    您还可以使用系统参数logback.configurationFile 将 Logback 指向特定的配置文件。来自文档:

    您可以使用名为“logback.configurationFile”的系统属性指定默认配置文件的位置。此属性的值可以是 URL、类路径上的资源或应用程序外部文件的路径。

    java -Dlogback.configurationFile=/path/to/config.xml chapters.configuration.MyApp1

    以上所有内容均来自docs

    根据您的问题,您有一个logback.xml,但此文件与您的班级位于“同一文件夹”中。除非您的类在根包中,否则这意味着 logback.xml 不在类路径的根目录中,因此 Logback 不会发现它。为了让 Logback 能够从此文件中配置自身,您可以执行以下操作之一:

    • 将 logback.xml 放在类路径的根目录中(对于 Maven 项目,这就像将 logback.xml 复制到 src/main/resources 一样简单)
    • 使用-Dlogback.configurationFile=/path/to/logback.xml 运行您的Java 程序

    【讨论】:

      猜你喜欢
      • 2014-07-31
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      相关资源
      最近更新 更多