标签: slf4j

JBoss 7:相当于jboss-log4j.xml

我不想使用standalone.xml或CLI配置日志记录,因为它需要为同事提供额外的步骤才能获得可用的开发环境.我希望使用我们的源代码签入这些配置文件,并在部署时自动应用.

使用JBoss 5,可以在jboss-log4j.xml中声明日志记录.JBoss 7中是否还有这个文件的等价物?

我们想使用slf4j和logback.

logging slf4j jboss7.x

3
推荐指数
1
解决办法
4075
查看次数

如何从Spring MVC登录

我试图从Spring MVC中的控制器登录但没有出现.我正在使用SLF4J和logback.我设法从主类登录,但在将其作为Web应用程序后,它不会记录.

我认为它会起作用,因为SL4JF和Logback在类路径中.

@Controller
@RequestMapping(value = "/cars")
public class CarController {

    private Logger logger = LoggerFactory.getLogger(CarController.class);

    @RequestMapping(method = RequestMethod.GET)
    @ResponseBody
    public Map<String, String> newCar() {
        logger.info("new car");
        // more code
        return map;
    }
}
Run Code Online (Sandbox Code Playgroud)

logback.xml

<configuration scan="true">
    <property name="LOG_DIR" value="/My/User/Desktop"/>

    <!--Loggers-->
    <logger name="my.company" level="DEBUG"/>

    <!--Root logger-->
    <root level="debug">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE_ROLLER"/>
    </root>

    <!--Appenders-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE_ROLLER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_DIR}/mylog.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>mylog.%d{yyyy-mm-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} …
Run Code Online (Sandbox Code Playgroud)

java logging spring spring-mvc slf4j

3
推荐指数
1
解决办法
9122
查看次数

使用<logger>元素是logback.xml

我用slf4j-logback日志创建了一个简单的Web应用程序.我使用以下配置将日志语句打印到mylog.log文件.

<configuration>
    <appender name="fileAppender"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${catalina.base}/logs/mylog.log</File>

        <encoder>
            <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n
            </Pattern>
        </encoder>
    </appender>

    <root>
        <level value="DEBUG" />
        <appender-ref ref="fileAppender" />
    </root>
</configuration>
Run Code Online (Sandbox Code Playgroud)

以上工作正常.

我遇到了一个logger元素

<logger name="mylog" additivity="false">
        <level value="DEBUG" />
        <appender-ref ref="fileAppender" />
</logger>
Run Code Online (Sandbox Code Playgroud)

这个logger元素有什么用?我的第一个配置工作正常会有什么不同吗?

java logging logback slf4j

3
推荐指数
1
解决办法
4642
查看次数

JUnit错误测试和日志记录

我正在JUnit测试中测试在某些情况下会引发自定义错误,使用@Test注释,一切顺利.

 @Test(expected = MyCustomException.class)
 public void MyTest(){
    ...
 }
Run Code Online (Sandbox Code Playgroud)

但是,在我的代码中,当我遇到这样的错误时,我会以这样的方式使用记录器(slf4j):

catch (IllegalArgumentException e) {
        LOG.error("My custom exception occured with {}", inputVar, e);
        throw new MyCustomException(inputVar, e);
    }
Run Code Online (Sandbox Code Playgroud)

到目前为止,行为很好.当我使用maven构建我的应用程序时,所有测试都已完成.完成描述的测试后,测试被标记为已通过,但我的shell中有一个完整的堆栈跟踪,前面有一个大错误.

我的问题如下,有没有办法在运行测试时删除日志(因此不在shell中查看)?

第二个问题是:我是否应该尝试?或者我应该只验证所有测试都通过了,并且在构建应用程序时看到堆栈跟踪和错误时不要担心?(改变主意而不是改变代码)

java junit slf4j

3
推荐指数
1
解决办法
1403
查看次数

什么时候SLF4J的"动态绑定"功能适合使用?

我对SLF4J很感兴趣,因为它似乎是唯一的Java库(至少我可以解释),它在运行时使用这种所谓的" 动态绑定 "类来定义行为.

通过这个,我的意思是,如果你slf4j-api在编译类路径中包含,你现在可以访问该JAR中包含的所有API类(LoggersLoggerFactories等),但它们的实际运行时行为是no-op(什么都不做),除非你包含一个运行时类路径上的" SLF4J绑定 ",例如slf4j-simple(将日志语句发送到STDOUTSTDERR),或者slf4j-log4j,然后期望Log4J配置等.

就像我上面所说的,这种类型的动态绑定行为似乎是SLF4J项目所特有的.

我想知道为什么?一般来说,在日志记录之外,哪种场景可以保证这种动态绑定作为解决方案?对我来说,它似乎是经典依赖注入(Spring,Guice)的替代方案,几乎将注入推迟到运行时("JIT")确定运行时类路径上可用的匹配类.

所以我问:这个解决方案是否唯一有理由只解决日志记录问题?如果是这样,为什么?如果没有,那么还有哪些其他问题需要这种方法作为解决方案?

java binding classpath classloader slf4j

3
推荐指数
1
解决办法
377
查看次数

如何配置WildFly 8.2.0日志记录以在调试级别上显示应用程序

对于这个非常基本的问题我很抱歉,但是我花了很多时间研究它并且无法使它工作: - /我想要的:在INFO级别显示所有记录,但我的应用程序在DEBUG级别.到目前为止,我的设置和理解是:

在我的WildFly中,我使用slf4j进行logback.我没有在所有b/c中配置logback,这是在WildFly配置中完成的.这是我的pom:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.13</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.0.13</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

这是我的记录器配置:

<console-handler name="CONSOLE">
    <level name="DEBUG"/>
    <formatter>
        <named-formatter name="COLOR-PATTERN"/>
    </formatter>
</console-handler>
<periodic-rotating-file-handler name="FILE" autoflush="true">
    <formatter>
        <named-formatter name="PATTERN"/>
    </formatter>
    <file relative-to="jboss.server.log.dir" path="server.log"/>
    <suffix value=".yyyy-MM-dd"/>
    <append value="true"/>
</periodic-rotating-file-handler>
<logger category="com.arjuna">
    <level name="WARN"/>
</logger>
<logger category="org.apache.tomcat.util.modeler">
    <level name="WARN"/>
</logger>
<logger category="org.jboss.as.config">
    <level name="DEBUG"/>
</logger>
<logger category="sun.rmi">
    <level name="WARN"/>
</logger>
<logger category="jacorb">
    <level name="WARN"/>
</logger>
<logger category="org.hibernate">
    <level name="INFO"/>
</logger>
<logger category="javax">
    <level name="INFO"/>
</logger>
<logger category="com.sample.application" use-parent-handlers="false">
    <level name="DEBUG"/>
    <handlers> …
Run Code Online (Sandbox Code Playgroud)

logging slf4j wildfly wildfly-8

3
推荐指数
1
解决办法
2663
查看次数

JBoss EAP 6.4 / 7-Spring Boot Application的内部log4j2.xml配置未在控制台上打印

我查找了类似的问题,但没有一个答案能真正解决问题。我有一个配置为使用slf4j + log4j2的Spring Boot应用程序(在中使用内部lo​​g4j2.xml配置src/main/resources)。我将这场战争部署在JBoss EAP(6.4和7)上,可以看到来自JBoss启动的日志跟踪。问题是log4j2附加程序只是不输出任何内容,无论是在控制台上还是在文件上

  • 在控制台中,仅显示jboss日志日志(我的应用程序跟踪中的每个log.info()都使用jboss日志记录格式)。

  • 一个c:\logs\out.log 是创建的文件,但没有被写在上面

这些是我所做的事情:

  1. 我已经调试并检查了Spring Boot的文件Log4J2LoggingSystem是否正确初始化classpath:log4j2.xml

  2. 我的应用程序使用SLF4J,并且在调试时,我已经看到底层的日志记录实现是JBoss的日志记录,而不是Log4j2

  3. log4j2日志记录在Tomcat上正常工作。

  4. 在standalone.xml中,我已删除<extension module="org.jboss.as.logging"/><subsystem xmlns="urn:jboss:domain:logging:3.0">块。完成此操作后,控制台上仅打印了一些jboss跟踪(但应用程序log.info()中没有任何跟踪),但是log4j2文件附加器可以正确打印。

如何配置JBoss以支持控制台上应用程序的log4j2.xml打印和文件?

log4j2.xml摘录

<Configuration status="WARN">
    <Appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout ...
        <RollingFile name="file"
            filePattern="'.'%d{yyyy-MM-dd}"
            fileName="c:\logs\out.log">
            <PatternLayout
                pattern="%d{yyyy-MM-dd'T'HH:mm:ss.SSS} - %c{1.} %5p - %m%n" />
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
        </RollingFile>
    <Logger name="org.springframework" level="info" additivity="false">
        <AppenderRef ref="file" />
        <AppenderRef ref="console" />
    </Logger>
</Configuration>
Run Code Online (Sandbox Code Playgroud)

更新

问题与JBoss管理SLF4J的方式有关:

org.slf4j.Logger slf4jLogger = org.slf4j.LoggerFactory.getLogger(PresupuestoController.class);
org.apache.logging.log4j.Logger log4j2Logger …
Run Code Online (Sandbox Code Playgroud)

jboss slf4j log4j2 jboss-eap-6 spring-boot

3
推荐指数
1
解决办法
3613
查看次数

无法加载类"org.slf4j.impl.StaticLoggerBinder"错误

我在帖子中找不到解决方案之后打开这篇文章: 无法加载类"org.slf4j.impl.StaticLoggerBinder"错误

我还在IntelliJ中打开了一个Maven项目,并在tomcat7插件中选择'redeploy'选项后出现以下错误:

SLF4J:无法加载类"org.slf4j.impl.StaticLoggerBinder".SLF4J:默认为无操作(NOP)记录器实现SLF4J:有关更多详细信息,请参阅http://www.slf4j.org/codes.html#StaticLoggerBinder.

在附加的链接中,建议转到File-> Project Structure - > Artifacts并检查错误.这就是我所看到的: 在此输入图像描述

我在pom.xml文件中也有以下依赖项:

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.5.6</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.21</version>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

你能帮我找错吗?

tomcat log4j intellij-idea slf4j maven

3
推荐指数
1
解决办法
2万
查看次数

logback在每小时回滚期间删除MaxHistory之前的日志

我使用下面的appender,我可以看到每小时立即发生回滚.

但我提到了<maxHistory>10天.但我可以看到日志会在每天结束时通过logback自动删除.

但期望是将日志文件保留最多10天.

<appender name="TIME_BASED_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>c:/logs/timeBasedlogFile.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">        
        <fileNamePattern>c:/logs/timeBasedlogFile.%d{yyyy-MM-dd_HH}.log</fileNamePattern>
        <maxHistory>10</maxHistory>
    </rollingPolicy>
    <encoder>
        <pattern>%relative [%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
</appender> 
Run Code Online (Sandbox Code Playgroud)

如果我使用每日翻转,那么我可以看到翻转的日志保持了所提到的天数 <maxHistory>

maxHistory只适用于每日翻转吗?

java logback slf4j

3
推荐指数
1
解决办法
5180
查看次数

使用Java 11运行Spring Boot应用程序时出现java.lang.StackOverflowError

我正在尝试在Windows上的Java 11(jdk-11.0.2)的Spring Boot(2.1.2.RELEASE)中运行一个简单的hello world应用程序。当我使用Maven spring boot插件运行应用程序时,出现以下异常:

            Exception in thread "main" java.lang.StackOverflowError
                at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:408)
                at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357)
                at org.apache.commons.logging.LogAdapter$Slf4jAdapter.createLocationAwareLog(LogAdapter.java:130)
                at org.apache.commons.logging.LogAdapter.createLog(LogAdapter.java:91)
                at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:67)
                at org.slf4j.impl.JCLLoggerFactory.getLogger(JCLLoggerFactory.java:77)
                at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
                at org.apache.commons.logging.LogAdapter$Slf4jAdapter.createLocationAwareLog(LogAdapter.java:130)
                at org.apache.commons.logging.LogAdapter.createLog(LogAdapter.java:91)
                at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:67)
                at org.slf4j.impl.JCLLoggerFactory.getLogger(JCLLoggerFactory.java:77)
                at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
                at org.apache.commons.logging.LogAdapter$Slf4jAdapter.createLocationAwareLog(LogAdapter.java:130)
Run Code Online (Sandbox Code Playgroud)

我有以下Java代码:

            @SpringBootApplication
            @PropertySource(value = "${url/ELMProperties}", ignoreResourceNotFound = true)
            @PropertySource(value = "classpath:version/elm.properties")
            //TODO remove the below line once the data source has been configured
            @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
            public class Application extends SpringBootServletInitializer
            {
                @Override
                protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
                    return application.sources(com.test.Application.class);
                }

                public …
Run Code Online (Sandbox Code Playgroud)

slf4j maven spring-boot java-11

3
推荐指数
1
解决办法
1751
查看次数