目前我正在使用log4j,但许多Java技术使用slf4j(例如hibernate).我想配置log4j而不是slf4j.这是我的log4j文件:
log4j.rootLogger=trace, stdout, file
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.encoding=UTF-8
log4j.appender.stdout.target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.conversionPattern=%d{ABSOLUTE} %5p %t %c{1}:%M:%L - %m%n
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.encoding=UTF-8
log4j.appender.file.append=false
log4j.appender.file.file=myproject.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.conversionPattern=%d{ABSOLUTE} %5p %t %c{1}:%M:%L - %m%n
Run Code Online (Sandbox Code Playgroud)
有人能给我看一个适合它的配置文件吗?PS如何从Servlets登录?因为他们在tomcat webapps的战争中.在这种情况下,他们在哪里写日志?
我正在遵循SLF4J异常,我试图从pom.xml中删除slf4j依赖关系,但它仍然存在,有人可以帮忙吗?
抛出的异常为:。。
Run Code Online (Sandbox Code Playgroud)" org.osgi.framework.BundleException: Exception in oracle.acs.assessment.PatchDataExtractionActivator.start() of bundle oracle.acs.mf.PatchDataExtractionBundle. at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:1018) > at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:974) > at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:346) > at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:260) > at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:252) > at org.eclipse.osgi.framework.internal.core.FrameworkCommandProvider._start(FrameworkCommandProvider.java:260) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:606) > at org.eclipse.osgi.framework.internal.core.FrameworkCommandInterpreter.execute(FrameworkCommandInterpreter.java:150) > at org.eclipse.osgi.framework.internal.core.FrameworkConsole.docommand(FrameworkConsole.java:291) > at org.eclipse.osgi.framework.internal.core.FrameworkConsole.console(FrameworkConsole.java:276) > at com.sun.svc.container.admin.cli.Console.run(Console.java:85) > at java.lang.Thread.run(Thread.java:724) Caused by: java.lang.NoSuchMethodError: > org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;Ljava/lang/Throwable;)V > at org.apache.log4j.Category.log(Category.java:288) > at org.apache.commons.logging.impl.Log4JLogger.info(Log4JLogger.java:199) > at org.springframework.context.support.AbstractApplicationContext.prepareRefresh(AbstractApplicationContext.java:412) > at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:350) > at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) > at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93) > at …
假设我有一个包含 20 个类的程序,每个类都有private static Logger logger = LoggerFactory.getLogger(SomeClass.class);. 这 20 个类将记录警告、信息、调试或错误。
在其中一个类中,我如何才能访问迄今为止在程序中记录的所有错误(跨所有类)?注意我对将所有这些转储到 a 不感兴趣.log,我想从 Java 程序中访问它们。
我的项目包含多个模块.我希望其中一个模块使用特定logback.xml文件进行日志记录,该文件位于其资源文件夹中.如何用Java代码或属性配置它?
现在在我的Java代码中,我以这种方式获取记录器:
private static final Logger logger = org.slf4j.LoggerFactory.getLogger(MyClass.class);
有没有办法以某种方式将特定传递logback.xml给记录器?
我目前使用 Sl4j 1.7.25 和 logback-classic-1.2.3
放在tomcat的类路径即WEB-INF/classes中的logback.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${catalina.home}/logs/foodini.log</file>
<append>true</append>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>[%d{dd-MMM-yyyy HH:mm:ss.SSS}] [%logger] [%-5level] - %msg%n</Pattern>
</encoder>
</appender>
<root level="ALL">
<appender-ref ref="FILE" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
这工作正常,所有内容都记录在 tomcat 日志目录下的 foodini.log 文件中。
现在不幸的是,HikariCp 也以大约 30 秒的间隔不断地记录到同一个文件。它基本上写入池事件和泄漏等等。我需要把它放在一个单独的文件中,比如 hikari.log 而不是在 foodini.log 里面,它只是我的 web 应用程序的日志,以避免混乱。
我试过 :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${catalina.home}/logs/foodini.log</file>
<append>true</append>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>[%d{dd-MMM-yyyy HH:mm:ss.SSS}] [%logger] [%-5level] - %msg%n</Pattern>
</encoder>
</appender>
<appender name="HIKARI" class="ch.qos.logback.core.FileAppender">
<file>${catalina.home}/logs/hikari.log</file>
<append>true</append>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>[%d{dd-MMM-yyyy …Run Code Online (Sandbox Code Playgroud) 为什么,如果我的类有一个org字段,我不能使用@Slf4jLombok 日志注释。以下代码将在第 #3 行产生编译错误:
MyClass.java:[3,1] 无法从静态上下文引用非静态变量 org
import lombok.extern.slf4j.Slf4j;
@Slf4j
class MyClass {
String org;
void printDebug() { log.debug("Org: " + org); }
}
Run Code Online (Sandbox Code Playgroud)
Lombok 文档 ( projectlombok.org/features/log ) 声称它添加了一个log字段。为什么它与 冲突org?
我正在尝试将日志记录添加到我的界面默认方法中。例如:
@Slf4j // not allowed
interface MyIFace {
default ThickAndThin doThisAndThat() {
log.error("default doThisAndThat() called");
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我得到:
@Slf4j 仅在类和枚举上合法。
处理这个问题的正确方法是什么?
如何使用slf4j记录器记录HashMap键和值。我已经尝试了几次,但还是想出了办法。
以下代码仅记录“ test values”字符串,不包含maps参数的值。
public void test(HashMap maps) {
logger.info("test values", maps);
}
Run Code Online (Sandbox Code Playgroud) 如果您使用SLF4J和log.info("The value is: %s", "a_value")你会得到输出如下:The value is: %s。这与你可能得到的完全不同log.info(String.format("The value is: %s", "a_value")),更像是:The value is: a_value。
我并不真的需要知道什么是正确的格式是,这么多的为什么在SLF4J日志消息的格式是不一样的格式进行java.lang.String#format,以及是否这实际上仍然在Java中的正当理由,什么,10?
如何使用带有graylog的slf4j作为包装器?我们可以使用log4j和slf4j.我正在寻找一个好的graylog框架可以说任何我们可以使用graylog与slf4j?