我正在使用SLF4J + Logback将消息输出到eclipse IDE控制台.
Logger LOG = LoggerFactory.getLogger(MyClass.class);
LOG.debug("test");
Run Code Online (Sandbox Code Playgroud)
但有时整个控制台输出被清除,我看不到更旧的消息.这是足够的信息,以便你可以帮助我吗?
我在我的Windows桌面上安装了tomcat6用于测试目的.目前没有任何内容添加到webapps文件夹,只是正常的tomcat启动.生成以下日志文件:
catalina.2011-12-24.log
host-manager.2011-12-24.log
jakarta_service_20111224.log
localhost.2011-12-24.log
manager.2011-12-24.log
stderr_20111224.log
stdout_20111224.log
Run Code Online (Sandbox Code Playgroud)
我的问题很简单,我希望在定义的大小限制的基础上滚动和压缩这些日志[包含stdout].
我已经阅读了有关使用已定义策略滚动和压缩文件的logback及其功能,但我无法让它对我有用.我在$ TOMCAT_HOME/lib目录中复制了以下jar:
logback-access-1.0.0.jar
logback-classic-1.0.0.jar
logback-core-1.0.0.jar
Run Code Online (Sandbox Code Playgroud)
一些网站建议也应添加这些库:
jul-to-slf4j-1.6.4.jar
slf4j-api-1.6.4.jar
Run Code Online (Sandbox Code Playgroud)
我尝试在$ TOMCAT_HOME/conf和$ TOMCAT_HOME/lib中复制logback.xml,但无法使其工作.
如果有人可以帮助我,我真的很感激,最好能为我提供一个logback.xml和jars/xml位置,这些文件应该被复制以使其工作.
PS我没有在tomcat中部署任何webapp,它只是基本的tomcat设置.
显然,我的 Java 项目中没有发生日志记录。logback.xml文件位于类路径中,但显然被忽略了。没有报告有关此文件的任何错误。
JAR 以下列方式附加(使用 Maven):
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.13</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
以下消息出现在控制台中:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:MYREPO/org/slf4j/slf4j-simple/1.7.5/slf4j-simple-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:MYREPO/ch/qos/logback/logback-classic/1.0.13/logback-classic-1.0.13.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]
Run Code Online (Sandbox Code Playgroud)
显然,这两个 jar 都是由单个 Maven 条目引用的。
我正在越来越多地记录我的项目,而且我无法抑制我不想要的日志记录.
我正在使用我添加到我的POM安装的Logback.
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.13</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我的日志始终以这三行开头:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Run Code Online (Sandbox Code Playgroud)
谷歌搜索表明这是Eclipse问题,而不是Logback配置问题,但我包括它以防万一我的谷歌搜索误导我.
这是我的logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</Pattern>
</layout>
</appender>
<logger name="com.my.project" level="TRACE"/>
<logger name="o.a.cxf" level="INFO"/>
<logger name="o.a.c" level="INFO"/>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
这是我日志的摘录
[INFO] 17:41:53.095 DEBUG o.a.c.t.h.HttpsURLConnectionFactory - The SSL_DH_anon_WITH_DES_CBC_SHA cipher suite is excluded by the filter.
[INFO] 17:41:53.095 DEBUG o.a.c.t.h.HttpsURLConnectionFactory …Run Code Online (Sandbox Code Playgroud) 我想为每个记录器配置日志行的速率限制(例如:每个记录器每分钟最多可以发送100条日志行)。
我有想法,是否应该使用新的简单过滤器(我认为TurboFilter不适合)?还是一个新的appender?过滤器听起来更合适,但是其他过滤器可以替代我的决定,这就是为什么我认为要使用appender实现它。
你有什么想法?
我正在使用 logstash-logback-encoder 以 json 格式打印日志。
我的logback.xml样子如下:-
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<includeContext>false</includeContext>
<fieldNames>
<timestamp>timestamp</timestamp>
<version>[ignore]</version>
<levelValue>[ignore]</levelValue>
</fieldNames>
</encoder>
</appender>
<appender name="stash"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/tmp/SolrUpdater.%d{yyyy-MM-dd}.log
</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<includeContext>false</includeContext>
<fieldNames>
<timestamp>timestamp</timestamp>
<version>[ignore]</version>
<levelValue>[ignore]</levelValue>
</fieldNames>
</encoder>
</appender>
<root level="error">
<appender-ref ref="CONSOLE" />
<appender-ref ref="stash" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
有人可以让我知道如何level以小写形式显示所有内容error,而不是默认ERROR和WARNaswarning吗?
更新- 我CustomLogLevelJsonProvider按照 Zakhar 的建议创建了一个:-
package com.jabong.discovery.importer.solrUpdater.log;
public class CustomLogLevelJsonProvider extends LogLevelJsonProvider { …Run Code Online (Sandbox Code Playgroud) 我在Maven中创建了一个使用logback的测试webapp.这是我的logback.xml配置文件:
<configuration scan="true">
<!-- For more information: http://logback.qos.ch/manual/configuration.html -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>D:/Oracle/user_projects/domains/base_domain/servers/AdminServer/logs/myapp.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>D:/Oracle/user_projects/domains/base_domain/servers/AdminServer/logs/archive/myapp.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- keep 31 days' worth of history -->
<maxHistory>31</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%date [%level] [%thread] [%file:%line] %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="FILE" />
<appender-ref ref="STDOUT" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我已将此文件复制到两个src/main/resources和src/test/resources
当我跑步时mvn test,一切正常.测试日志消息将写入控制台以及myapp.log文件:
public class …Run Code Online (Sandbox Code Playgroud) 最近,我尝试了Log4j 2日志记录,并尝试将其性能与我本地Mac机器上的Logback进行比较.令人惊讶的是,我看到Logback在我的测试用例中表现更好.我希望Log4j 2比Log4j 2网站声称的Logback做得更好,所以我想检查一下我在使用Log4j 2时是否做错了.
为了测试,我使用了直接Log4j 2和Logback 而不使用SLF4J.此外,它ConsoleAppender用于两个日志框架,我测试的模式是:
<Pattern>%d{YYYY-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</Pattern>
Run Code Online (Sandbox Code Playgroud)
日志测试代码是:
logger.info("This is a bootstrap message");
long start = System.currentTimeMillis();
for (int i = 1; i <= 1000000; i++) {
logger.info("Order={} successfully processed", "ABC123");
}
long end = System.currentTimeMillis();
logger.info("time taken to process={} ms", end - start);
Run Code Online (Sandbox Code Playgroud)
我为每个日志记录分别运行了10次测试,并尝试将平均时间用于处理.出乎意料的是,每次运行都会更好地执行logback.我尝试使用params禁用Log4j 2附带的默认GC日志记录:
-Dlog4j2.enable.threadlocals=false -Dlog4j2.enable.direct.encoders=false
Run Code Online (Sandbox Code Playgroud)
但我仍然没有看到有关logback的任何改进.任何人都可以确认我做的是否正确?
log4j 2配置:
<Configuration status="INFO" debug="false">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n" />
</Console>
</Appenders> …Run Code Online (Sandbox Code Playgroud) 我在SpringBoot应用程序中使用Logback和Logstash。
在logback.xml中,我有一个带有服务名称的属性,如下所示:
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<property name="spring.application.name" calue="service"/>
<appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>localhost:9600</destination>
<encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="stash" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
Logstash conf文件类似于:
input{ tcp{
port=> 9600
host=>logstash
}
}
filter {
grok {
match => {
"message" =>
"^%{TIMESTAMP_ISO8601:timestamp}\s+%{LOGLEVEL:level}\s+%{NUMBER:pid}\s+---\s+\[\s*%{USERNAME:thread}\s*\]\s+%{JAVAFILE:class}\s*:\s*%{DATA:themessage}(?:\n+(?<stacktrace>(?:.|\r|\n)+))?$"
}
}
date {
match => [ "timestamp" , "yyyy-MM-dd HH:mm:ss.SSS" ]
}
mutate {
remove_field => ["@version"]
add_field => {
"appid" => "%{[path]}"
}
add_field => {
"levell" => "level"
} …Run Code Online (Sandbox Code Playgroud) logback logstash spring-boot logstash-logback-encoder logstash-grok
我正在使用 Loggly logback appender,详见他们的设置指南:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="LOGGLY" class="ch.qos.logback.ext.loggly.LogglyAppender">
<endpointUrl>https://logs-01.loggly.com/inputs/MY_TOKEN/tag/logback</endpointUrl>
<pattern>%d{"ISO8601", UTC} %p %t %c %M - %m%n</pattern>
</appender>
<root level="INFO">
<appender-ref ref="LOGGLY" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
一切都按预期工作(日志出现在 Loggly 中),但速度非常慢,每条日志消息大约 1 秒。它几乎停止了我的应用程序。是否有我遗漏的性能调整?