我已经配置我的pom.xml包括SLF4J和绑定到Log4j和排除共享记录作为解释这里和残疾人Hibernate的自己的日志记录作为解释在这里.
我可以抑制Spring自己的消息,但是尽管我的log4j.properties设置如下,Hibernate消息仍然会出现.
log4j.debug=false
log4j.rootCategory=WARN, stdout
log4j.category.org.hibernate=ERROR, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%p %t %c - %m%n
log4j.category.org.springframework = ERROR
log4j.category.org.hibernate = ERROR
Run Code Online (Sandbox Code Playgroud)
这是我的pom.xml文件:
可能是什么问题?我看到hibernate生成的所有sql消息.
这对你的家伙来说很容易!
如何防止 SLF4J 显示完全限定的类名(例如com.mycompany.mypackage.MyObject)而只输出MyObject?
我通常更喜欢这个:
1)
private static final Logger LOGGER = LoggerFactory
.getLogger(MyObject.class);
Run Code Online (Sandbox Code Playgroud)
对此:
2)
private static final Logger LOGGER = LoggerFactory
.getLogger("MyObject");
Run Code Online (Sandbox Code Playgroud)
所以,当我重构/重命名MyObject以MyThing参考就会自动为我更新。
然而.. 1) 我得到了笨拙的输出: com.mycompany.mypackage.MyObject
我只需要MyObject在日志中看到...
可选:如果您知道如何\e[0;33m根据日志级别有选择地为输出着色(例如),那将会很高兴知道。
我有一个logback配置问题.这是我的logback.xml:
<configuration>
<appender name="EMS" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>../logs/ems.log</file>
<append>true</append>
<encoder>
<pattern>[%d{ISO8601}] {%t} [%p] %c - %m%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>../logs/ems.log.%i</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>99</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>50MB</maxFileSize>
</triggeringPolicy>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%d{ISO8601}] {%t} [%p] %c - %m%n</pattern>
</encoder>
</appender>
<logger name="a.b.c" level="DEBUG">
<appender-ref ref="EMS"/>
</logger>
<logger name="a.b.c.d.SomeServiceImpl" level="INFO">
<appender-ref ref="EMS"/>
</logger>
<logger name="a.b.c.e.SomeFilter" level="INFO">
<appender-ref ref="EMS"/>
</logger>
<root level="OFF">
<appender-ref ref="EMS"/>
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
问题是当我为根记录器设置以下行时:
<appender-ref ref="EMS"/>
Run Code Online (Sandbox Code Playgroud)
在ems.log文件中,每行重复:
[2013-12-31 13:16:59,217] {[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'} [DEBUG] a.b.c.f.CallerImpl - qweqweqwe
[2013-12-31 …Run Code Online (Sandbox Code Playgroud) 我正在开发一个基于Spring Batch,Spring Boot,slf4j和Java 8的简单应用程序.我想尽可能多地使用lambda用于学习目的."myPojos.stream()forEach((myPojo) - > {log.info(myPojo);});"是什么问题 下面?该消息抱怨"......不适用于论点<? extends MyPojo".请注意,所有其他三个日志行都正常工作.
public class CustomItemWriter implements ItemWriter<MyPojo> {
private static final Logger log = LoggerFactory.getLogger(CustomItemWriter.class);
@Override
public void write(List<? extends MyPojo> myPojos) throws Exception{
myPojos.stream().forEach((myPojo)-> {log.info(myPojo);});//error
myPojos.forEach(System.out::println);//it works
myPojos.stream().forEach((myPojo) -> {System.out.println(myPojo);}); //it works
log.info("finish"); //it works
}
}
Run Code Online (Sandbox Code Playgroud) 我在项目上运行单元测试时收到此错误:
Caused by: java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path, preempting StackOverflowError. See also http://www.slf4j.org/codes.html#log4jDelegationLoop for more details.
at org.slf4j.impl.Log4jLoggerFactory.<clinit>(Log4jLoggerFactory.java:54)
... 29 more
Run Code Online (Sandbox Code Playgroud)
我需要SLF4J,但不是以下依赖项设置的冲突:
dependencies {
compile("org.springframework:spring-core:$springVersion")
compile("org.springframework:spring-jdbc:$springVersion")
// compile("org.springframework:spring-orm:$springVersion"
compile("org.springframework:spring-tx:$springVersion")
compile("org.springframework.data:spring-data-jpa:1.10.1.RELEASE") {
exclude module: "slf4j-api"
exclude module: "slf4j-over-slf4j"
exclude module: "jcl-over-slf4j"
}
// tag::jetty[]
compile("org.springframework.boot:spring-boot-starter-web:1.3.5.RELEASE") {
exclude module: "spring-boot-starter-tomcat"
exclude module: "slf4j-api"
exclude module: "slf4j-over-slf4j"
exclude module: "jcl-over-slf4j"
}
compile("org.springframework.boot:spring-boot-starter-jetty")
// end::jetty[]
// tag::actuator[]
compile("org.springframework.boot:spring-boot-starter-actuator")
// end::actuator[]
testCompile("junit:junit")
compile(group: 'org.hibernate.javax.persistence', name: 'hibernate-jpa-2.1-api', version: '1.0.0.Final')
compile("org.apache.velocity:velocity:1.7") …Run Code Online (Sandbox Code Playgroud) 我想显示SFX4J TextArea在JavaFX中记录的错误。我至今一个是appender在的logback-的test.xml:
<appender name="err" class="logtest.AppTA">
<filter class="logtest.ErrFilter" />
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
Run Code Online (Sandbox Code Playgroud)
TextArea 准备接收流:
public class Output extends OutputStream{
private final TextArea ta;
public Output(TextArea ta) {
this.ta = ta;
}
@Override
public void write(int b) throws IOException {
if (ta!=null) {
ta.appendText(String.valueOf((char) b));
}
}
}
Run Code Online (Sandbox Code Playgroud)
和一个处理追加的类:
public class AppTA extends AppenderBase<ILoggingEvent> {
PatternLayoutEncoder encoder;
OutputStream os;
@Override
protected void append(ILoggingEvent event) {
try {
if (isEncoderInitialized) {
this.encoder.doEncode(event); …Run Code Online (Sandbox Code Playgroud) 有没有办法在 Logback 中参数化转换规则?我已经尝试添加子节点、附加属性,但我看不到这样做的方法。
<conversionRule conversionWord="boundedMsg" converterClass="com.package.util.logging.converters.LongMessageConverter">
Run Code Online (Sandbox Code Playgroud)
我想添加 LongMessageConverter 类将使用的参数。
我的应用程序是在 Spring Boot 上设置的,我使用的是 Sl4J。
我有一个 Spring 应用程序,它使用来自 Lombok 的 @slf4j 注释,但是我用它记录的所有内容都没有显示在控制台中。
我的应用程序包括以下库 slf4j-api-1.7.21 jcl-over-slf4j-1.7.21 lombok-1.16.10
我记录的所有内容都被传递给 NOPLogger(无操作记录器),它完全按照它应该做的......没有!
我是否需要在某处配置工厂才能使用实际记录某些内容的记录器?
参考:Logback的配置
我的配置可以包含
...at most one <root> element...
但是后来在同一个文档中,在讨论条件时,我看到了这一点:
<configuration debug="true">
<if condition='property("HOSTNAME").contains("torino")'>
<then>
<appender name="CON" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<root> <------ root logger #1
<appender-ref ref="CON" />
</root>
</then>
</if>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${randomOutputDir}/conditional.log</file>
<encoder>
<pattern>%d %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<root level="ERROR"> <------ root logger #2
<appender-ref ref="FILE" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
注意有两个<root>元素!我很困惑,因为我没有看到任何<else>元素,我会假设 FILE 附加程序和第二个根记录器仍在运行,即使主机名是“torino”。
这是一个如何有效的例子?为什么<root>在这种情况下允许两个记录器,而一个不在一个<if>或一个<else>
我错过了什么???
我知道错误:
Getting Exception org.apache.logging.slf4j.SLF4JLoggerContext cannot be cast to org.apache.logging.log4j.core.LoggerContext
Run Code Online (Sandbox Code Playgroud)
我知道解决方案是从类路径中删除log4j-to-slf4j,如下所述:获取异常org.apache.logging.slf4j.SLF4JLoggerContext无法强制转换为org.apache.logging.log4j.core.LoggerContext
但该项目是使用maven构建的,包含spring-boot-starter-web导入依赖项的内容.我无法摆脱spring-boot-starter-web,我需要log4j.
这是pom:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>ru.beinteractive</groupId>
<artifactId>newlps</artifactId>
<packaging>war</packaging>
<version>1.0</version>
<name>newlps</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage</artifactId>
<version>1.14.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<type>jar</type> …Run Code Online (Sandbox Code Playgroud)