我下载了一个需要从源代码构建的大框架.该项目使用maven构建结构,并包含一个可以使用嵌入式jetty查看的演示应用程序.Maven插件处理所有这些东西.
但是,当我运行演示应用程序(使用mvn jetty:run)时,我无法真正使用它,因为由于某种原因导致登录DEBUG级别并且应用程序花费大部分时间记录大量语句.响应能力几乎为零.
框架(geomajas 1.5.0)似乎使用SLF4J,但我无法弄清楚它的配置位置或关闭位置.
任何想法欢迎...谢谢!
更新: 显然他们使用logback.我找到了配置文件(logback.xml),在其中我编辑了DEBUG级别并用ERROR替换它们
为了确保更改会传播,我清理了项目并重新构建它.但问题仍然存在!我手动查看了文件target夹中的logback.xml文件,并且已经更新了.但我仍然看到日志记录!
更新2 我用Windows 7顺便说一下.
我希望从我的应用程序中嵌入的HornetQ的所有日志记录委托给slf4j.不幸的是,任何尝 我已经尝试过了
SLF4JBridgeHandler.install();Log4jLogDelegateFactory("hornetq-configuration.xml"经过<log-delegate-factory-class-name>org.hornetq.integration.logging.Log4jLogDelegateFactory</log-delegate-factory-class-name>)LogDelegate和LogDelegateFactory但无论我做什么,下面的线路都没有抓住:
13.07.2011 17:42:11 org.hornetq.core.logging.impl.JULLogDelegate warn
WARNUNG: AIO wasn't located on this platform, it will fall back to using pure Java NIO. If your platform is Linux, install LibAIO to enable the AIO journal
13.07.2011 17:42:11 org.hornetq.core.logging.impl.JULLogDelegate info
INFO: Using NIO Journal
13.07.2011 17:42:11 org.hornetq.core.logging.impl.JULLogDelegate info
INFO: Started Netty Acceptor version 3.1.5.GA-r1772
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
我正在通过SLF4J将我的一个应用程序更新到Log4J2并且我遇到了Spring的麻烦.
此外还有"正常"(正确)日志记录输出
2013-05-24 20:02:00,490 INFO [main] application.Application (Application.java:33) - Application started with arguments []
Run Code Online (Sandbox Code Playgroud)
我得到这样的台词
Mai 24, 2013 8:02:00 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@5dfb3d5c: startup date [Fri May 24 20:02:00 CEST 2013]; root of context hierarchy
Run Code Online (Sandbox Code Playgroud)
在System.err上,所以spring没有使用我的Log4J2配置进行日志记录.
这些是我的配置文件:
的pom.xml
<slf4j.version>1.7.4</slf4j.version>
<log4j.version>2.0-beta6</log4j.version>
...
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j.version}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appenders>
<File name="file" fileName="error.log" append="true">
<PatternLayout pattern="%t %-5p %c{2} - %m%n"/>
</File> …Run Code Online (Sandbox Code Playgroud) 我目前正从log4j迁移到logback,并使用他们在logback主页中提供的转换器转换了我的log4j.properties文件.但我在我的模式上得到一些奇怪的错误,我无法弄清楚它要我做什么:
Run Code Online (Sandbox Code Playgroud)<?xml version="1.0" encoding="UTF-8"?> <!-- For assistance related to logback-translator or configuration --> <!-- files in general, please contact the logback user mailing list --> <!-- at http://www.qos.ch/mailman/listinfo/logback-user --> <!-- --> <!-- For professional support please see --> <!-- http://www.qos.ch/shop/products/professionalSupport --> <!-- --> <configuration> <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{ISO8601} [%p] [%C{1},%M(),%L] - %m%n</pattern> </encoder> </appender> <appender name="R" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--See also http://logback.qos.ch/manual/appenders.html#RollingFileAppender--> <File>/log/debug.log</File> <encoder> <pattern>%d{ISO8601} %15.15t [%p] [%C{1},%M():%L] - %m%n</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <maxIndex>1</maxIndex> <FileNamePattern>/log/debug.log.%i</FileNamePattern> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>100KB</MaxFileSize> </triggeringPolicy> </appender> …
如果我打印了大量数据,以防启用跟踪我应该使用isTraceEnabled或只是做我的log.trace("{} mymessage", "param")
意愿在这种情况下使用isTraceEnabled或没有任何好处?
Akka和Scala新手在这里,请随时编辑这个问题,以便清楚地表达我在Scala和Akka领域的意图.
在我展示代码片段之前,这是我想要解决的问题:我本质上想要为我的团队开发一个通用模块,以便在他们使用Akka actor开发应用程序时使用.我想让它们混合一个特性,它将在运行时扩展它们的接收功能,主要用于记录目的.我遇到了编译错误,我很快就会解释.
但首先,举一个简单的主要内容:
object Test extends App {
val system = ActorSystem("system")
val myActor = system.actorOf(Props(new MyActor), "myActor")
myActor ! "Hello world!"
}
Run Code Online (Sandbox Code Playgroud)
以下是团队成员可能在其应用程序中实现的actor的示例实现:
class MyActor extends Actor with ActorLogger {
override def receive: Receive = {
case msg => {
log.info("testing ...")
}
case _ => throw new RuntimeException("Runtime Ex")
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个如何为他们提供混合的共同特征的例子:
trait ActorLogger extends Actor {
val log: DiagnosticLoggingAdapter = Logging(this)
abstract override def receive: Receive = {
case msg: Any => {
if (msg.isInstanceOf[String]) { …Run Code Online (Sandbox Code Playgroud) 什么被认为是更好的做法?如果我编写SLF4J代码,是否可以获得所有Log4J2的好处?它会影响性能吗?以上所有问题对JCL也有同样的答案吗?
目前,HikariCP正在登录级别INFO,我想将其设置为SEVERE.当我尝试在父记录器上设置级别(我可以找到的唯一对日志记录的引用)时,它会抛出错误:
dataSource.getParentLogger().setLevel( Level.SEVERE );
Run Code Online (Sandbox Code Playgroud)
错误:
Caused by: java.sql.SQLFeatureNotSupportedException
at com.zaxxer.hikari.HikariDataSource.getParentLogger(HikariDataSource.java:176)
Run Code Online (Sandbox Code Playgroud)
如何正确设置日志记录级别?
SLF4J的Logger具有可以接受异常或varargs但不能同时接受两者的日志记录方法。
知道为什么吗?
缺少签名的问题在于,有时我想同时记录一个异常并为消息提供参数,但是我没有方法签名可以同时执行这两种操作。
从我在网上找到的许多示例,文档以及此处的Stack Overflow中,在slf4j中连接字符串的正确方法是使用内置的字符串格式。
例如 :
LOGGER.error("ExceptionHandler throws {}" , appException);
Run Code Online (Sandbox Code Playgroud)
我也尝试了不格式化,并且产生了相同的结果:
LOGGER.error("ExceptionHandler throws " , appException);
Run Code Online (Sandbox Code Playgroud)
由于某种原因,这对我不起作用,我也不知道自己缺少什么。如果传递对象,是否使用其他格式?
上面的示例正在打印以下日志消息:
2018-07-18 02:38:19 ERROR c.a.c.c.p.ExceptionProcessor:67 - ExceptionHandler throws {}
Run Code Online (Sandbox Code Playgroud)
而不是使用常规串联时收到的预期消息:
LOGGER.error("ExceptionHandler throws " + appException);
Run Code Online (Sandbox Code Playgroud)
或者当我手动调用.toString()时
LOGGER.error("ExceptionHandler throws {}" , appException.toString());
Run Code Online (Sandbox Code Playgroud)
根据Sonar的说法,这最后一个选项不正确,因为:
因为printf样式的格式字符串是在运行时解释的,而不是由编译器验证的,所以它们可能包含导致创建错误字符串的错误。在调用java.util.Formatter,java.lang.String,java.io.PrintStream,MessageFormat和java.io的format(...)方法时,此规则静态验证printf样式格式字符串与其参数的相关性。 .PrintWriter类和java.io.PrintStream或java.io.PrintWriter类的printf(...)方法。
AppException类如下:
import java.io.Serializable;
import javax.ws.rs.core.Response.Status;
public class AppException extends Exception implements Serializable {
private static final long serialVersionUID = 1L;
private Error error;
private Status status;
public AppException(Error error, Status status) {
this.error = error;
this.status …Run Code Online (Sandbox Code Playgroud)