JAVA:在独立应用程序中配置logback

时间:2017-09-05 14:23:42

标签: java logging log4j logback slf4j

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

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>

我也运行appl。与程序参数:

-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

1 个答案:

答案 0 :(得分:1)

以下是logback如何自行配置:

  

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

     

如果未找到此类文件,则logback会尝试在类路径中查找名为logback.groovy的文件。

     

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

     

如果未找到此类文件,则使用服务提供者加载工具(在JDK 1.6中引入)通过在类路径中查找文件com.qos.logback.classic.spi.Configurator来解析META-INF\services\ch.qos.logback.classic.spi.Configurator接口的实现。其内容应指定所需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程序