我试图限制 Spring Boot 应用程序中 com.jcraft.jsch 包的输出。我的应用程序使用 Spring Intgration 并具有定义以下日志级别的 log4j.properties 文件
# Root logger option
log4j.rootLogger=DEBUG
log4j.category.com.jcraft.jsch=ERROR
log4j.category.org.springframework.integration.file=ERROR
Run Code Online (Sandbox Code Playgroud)
尽管如此,我还是从该包中收到了大量信息级别的消息......我希望它能将其过滤掉。我按照此链接底部的简短说明进行操作
任何知道为什么我仍然被通讯淹没的人。jsch 的详细信息?
2015-05-21 11:12:55.750 INFO 10684 --- [ask-scheduler-1] com.jcraft.jsch : aes256-cbc is not available.
2015-05-21 11:12:55.750 INFO 10684 --- [ask-scheduler-1] com.jcraft.jsch : aes192-cbc is not available.
2015-05-21 11:12:55.750 INFO 10684 --- [ask-scheduler-1] com.jcraft.jsch : CheckKexes: diffie-hellman-group14-sha1
2015-05-21 11:12:55.770 INFO 10684 --- [ask-scheduler-1] com.jcraft.jsch : SSH_MSG_KEXINIT sent
2015-05-21 11:12:55.770 INFO 10684 --- [ask-scheduler-1] com.jcraft.jsch : SSH_MSG_KEXINIT received
Run Code Online (Sandbox Code Playgroud)
我使用 log4j.1.2.17 和 …
我已经在我们的项目上创建了一个 logback 并使用 org.slf4j.LoggerFactory 和 org.slf4j.Logger 库。但自从我们开始使用它以来,我们仍然面临着滚动的问题。问题是,日志文件翻转后,不是将日志保存在新创建的文件中,而是将日志保存在翻转的文件中。下面是我的 logback.xml 配置。例如,它将记录到 proj.2015-05-25.log,而不是登录到 proj.log。有什么建议来解决这个问题吗?
<file>/home/proj/proj-conf/logs/proj.log</file>
<encoder>
<pattern>%d %-5p %c{1} - %m%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>/home/proj/proj-conf/logs/proj.%d{yyyy-MM-dd_HH}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>5MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- keep 30 days' worth of history -->
<maxHistory>30</maxHistory>
</rollingPolicy>
Run Code Online (Sandbox Code Playgroud)
##
我们正在调试一些 spring-ws 肥皂网络服务,并使用本文中突出显示的 log4j 设置输出肥皂请求:
我想漂亮地打印发送到日志的肥皂消息。有谁知道这是否可以做到,如果可以的话该怎么做?
在 application.properties 中的logging.file=myapplication.log中设置日志文件将打印所有日志,但是我想要两个单独的日志文件用于错误和信息,我该如何实现这一点。
我已经提到了这个问题
但无法弄清楚
我的 Log4j2 配置文件如下所示:
<Appenders>
<RollingRandomAccessFile name="APP_LOG_APPENDER" fileName="${sys:baseLogPath}/${appLogFileName}.log"
filePattern="${sys:baseLogPath}/backups/$${date:yyyy-MM}/${appLogFileName}-%d{yyyy-MM-dd}-%i.log.gz" immediateFlush="false">
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [Thread: %t] %level [%c][%M] - %msg%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="50 MB" />
</Policies>
<DefaultRolloverStrategy max="20"/>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<Root level="debug" additivity="false">
<AppenderRef ref="APP_LOG_APPENDER" />
</Root>
</Loggers>
Run Code Online (Sandbox Code Playgroud)
类中的记录器语句MyClass
public class MyClass {
private final static org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(MyClass.class);
public void someMethod() {
logger.debug("Some sample string at DEBUG level....");
logger.info("Some sample string at INFO level....");
logger.warn("Some sample string at WARN level....");
logger.error("Some sample string at ERROR …Run Code Online (Sandbox Code Playgroud) 我刚刚开始使用 ApacheKafka。我设置了整个事情,现在我尝试在现有的 Java 应用程序中引入 Kafka 通过日志附加程序发送日志。该应用程序使用 Logback 作为记录器库。所以,我想,这让我无法使用kafka.producer.KafkaLog4jAppender?还有不兼容的吗?我正进入(状态 IncompatibleClassException。也许还有其他解决方案吗?多谢!!
我喜欢在我的应用程序中使用 MDC 日志记录字段,因为它使查找所有相关日志行变得更加容易。我还发现在处理开始时清除 MDC 上下文要容易得多,因为我知道应用程序的入口点在哪里,但有许多可能的异常路径,我自己或其他开发人员可能忘记调用 MDC.clear( )。
所以我的问题是,我这样做有什么缺点吗?根据经验,始终在处理开始和结束时清除上下文。
为了清楚起见,如果我从头开始编写代码,我会这样做:
MDC.put();
try {
...
} finally {
MDC.clear();
}
Run Code Online (Sandbox Code Playgroud)
但有时我必须使用基类或库中没有任何 MDC 相关代码的内容,因此我按照我所描述的方式进行操作,因为我不想从库中复制基类只是为了添加几行 MDC 代码...
我在代码中使用的库具有以下 logback.xml
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date - %-5p %t %-25logger{0} %F:%L %m%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我无法控制这个 .xml 文件,因为库作者拥有这个文件,而我只是将她的库用作 jar 文件。
现在,当我使用该库作为 jar 时,我在输出中看到很多“INFO”语句。我想仅从该库关闭记录器的输出。
我不想全局关闭我的应用程序(或提高日志的严重性)。我只想让这个库的日志保持沉默。
我怎样才能做到这一点?
我真的很努力地将 logback-classic 的加载作为传递依赖问题。我遵循了 stackoverflow 上的建议,但是,它不断重复出现。
我使用 Maven 排除来尝试控制它,它根本没有出现在我的 pom 依赖关系层次结构中。但它仍然被加载!
这是我的运行时跟踪
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/david/.m2/repository/de/ruedigermoeller/kontraktor-http/3.33/kontraktor-http-3.33.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/david/.m2/repository/ch/qos/logback/logback-classic/1.2.1/logback-classic-1.2.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
W 13:22:24:837 : DispatcherThread 1 : DispatcherThread :
java.lang.NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getLoggerFactoryClassStr()Ljava/lang/String;
at org.slf4j.LoggerFactory.reportActualBinding(LoggerFactory.java:271)
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:143)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:120)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:331)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:283)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:304)
at org.quartz.impl.StdSchedulerFactory.<init>(StdSchedulerFactory.java:284)
at org.quartz.impl.StdSchedulerFactory.getDefaultScheduler(StdSchedulerFactory.java:1539)
at uk.co.example.ExampleEwsService.init(ExampleEwsService.java:296)
Run Code Online (Sandbox Code Playgroud)
部分问题在于 Kontraktor 框架重写了 StaticLoggerBinder.getLoggerFactoryClassStr 方法。但很容易确保它首先被加载,然后从正在加载它的quartz中排除logback-classic,如下所示:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId> …Run Code Online (Sandbox Code Playgroud) 我正在使用 logback 记录到 Spring Boot 服务中的滚动文件。在我的一门课程中,我试图记录一个非常长的字符串(一个非常大的对象数组的字符串值,可以包含数万个元素)。
log.info(str);
Run Code Online (Sandbox Code Playgroud)
上面没有打印,可能是因为str的值是一个非常非常长的字符串。
//logback truncates the list - to preserve this we should record it in an audit table
String rl = String.valueOf(reptIdList);
String truncRlStr = rl.substring(0, Math.min(rl.length(), 100));
log.info(truncRlStr);
Run Code Online (Sandbox Code Playgroud)
上面确实打印了。可能是因为我将很长的字符串截断为 100 个字符。
logback 中的字符串长度可能有限制 - 有没有办法将其设置为最大字符串长度?我注意到登录控制台时对字符串长度没有限制。
感谢您的任何建议。