我目前正在开始一个新的Webapp(在tomcat 6上运行)我有使用slf4j的组件和使用commons日志记录的组件我计划使用log4j 2.0作为日志实现由于几个原因(主要用于appender:SocketAppender和SyslogAppender但也因为提升配置重新加载而不丢失日志事件)
现在我的问题是: - 我在哪个界面编程我的新课程?loag4j还是slf4j?甚至公共伐木?
部署罐子的首选方式是什么?把它们放在我的应用程序大战中还是我把它们放到tomcat库中?
我需要部署哪些罐子?log4j(包括slf4j和commons绑定),commons logging(slf4j-api-1.7.2.jar)和slf4j api(slf4j-api-1.7.2.jar)
这可能是一个纯粹主观的问题(如果没有组织试图将其标准化),但我的团队比你想象的更加努力.
我们使用Apache Commons Logging作为我们的日志记录界面,并且我们的开发团队通常使用优先级不一致.例如,一些开发人员将任何捕获的异常记录为致命的(log.fatal(message)),即使流程能够处理错误,而其他人只会在某些事情导致程序因某种原因必然停止执行时才会致命致死.
我想知道其他团队如何定义每个优先级.有没有人在明确尝试为此定义最佳实践的公司工作?雅加达对此有何看法?
我的目标是向每个团队发送一个针对每个优先级的简单建议,以便我们能够以一致的方式更有效地处理我们笨拙的应用程序日志记录.
我正在编写一个应用程序,我需要使用org.apache.commons.logging库将日志写入文件,但我不知道如何开始.
谁能帮我?
谢谢和最好的问候.
我是spring和log4j的新手.我正在尝试使用spring框架和使用log4j2库的示例Hello World项目.我的src文件夹中有log4j2.xml.当我运行应用程序时,只有我的应用程序日志写在日志文件中.弹簧日志没有写入.但是我可以在控制台中看到它们.我在我的类路径中有公共记录jar(spring dependency),log4j2和spring jar.如果我在这里缺少任何配置,任何人都可以帮助我吗?
我的log4j2 xml文件,
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="trace" monitorInterval="5">
<Appenders>
<Console name="consoleAppender" target="SYSTEM_OUT">
<PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
</Console>
<File name="fileAppender" fileName="learning.log" append="true">
<PatternLayout pattern="%t %-5p %c{2} - %m%n"/>
</File>
</Appenders>
<Loggers>
<Root level="trace">
<AppenderRef ref="consoleAppender"/>
<AppenderRef ref="fileAppender"/>
</Root>
</Loggers>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我的代码:
public class MainApp {
static Logger log = LogManager.getLogger(MainApp.class.getName());
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("Beans.xml");
log.info("Going to create HelloWord Obj");
HellowWorld obj = (HellowWorld) context.getBean("helloWorld");
obj.getMessage();
log.info("Exiting …Run Code Online (Sandbox Code Playgroud) 我试图通过commons-logging使用log4j,如果log4j属性文件没有被称为log4.properties则会遇到问题.我收到以下错误:log4j:WARN没有找到记录器(LogMePlease)的appender.log4j:WARN请正确初始化log4j系统.
我的代码非常简单:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class LogMePlease
{
static Log l = LogFactory.getLog(LogMePlease.class);
public static void main(String [] args)
{
l.warn("Hello World!");
}
}
Run Code Online (Sandbox Code Playgroud)
在我的类路径中,我有: commons-logging.properties文件,其中包含以下条目
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
log4j.configuration=log4j-test.properties
Run Code Online (Sandbox Code Playgroud)
和 log4j-test.properties文件
当我运行这个代码时,我得到了
log4j:WARN No appenders could be found for logger (LogMePlease).
log4j:WARN Please initialize the log4j system properly.
Run Code Online (Sandbox Code Playgroud)
如果我将log4j-test.properties文件重命名为log4j.properties - 那么一切正常.所以,问题是如何设置公共日志记录以使用log4j.properties文件的任意名称.
我有一个使用常春藤进行依赖管理的ant的项目构建.我没有ivysetting文件,但是ivy.xml具有以下依赖项(我想使用spring与slf4j而不是commons日志记录):
<configurations>
<conf name="compile" />
<conf name="runtime" extends="compile"/>
</configurations>
<dependencies>
<dependency org="org.springframework" name="spring-webmvc" rev="3.0.5.RELEASE" conf="compile->default">
<exclude org="commons-logging" name="commons-logging"/>
</dependency>
<dependency org="org.slf4j" name="slf4j-api" rev="1.6.1" conf="compile->default" />
<dependency org="org.slf4j" name="jcl-over-slf4j" rev="1.6.1" conf="runtime->default" />
</dependencies>
Run Code Online (Sandbox Code Playgroud)
但是在解析编译配置时,commons-logging就解决了.我还尝试在显式spring-core依赖项上使用exclude,但commons-logging总是放在编译类路径中.
我的错是什么?是不是不使用Commons Logging描述的maven?这是常春藤虫吗?需要我特别的设置吗?常春藤有什么缓存吗?任何的想法?
我使用ant 1.8.2和ivy 2.2.0,在Eclipse中使用IvyDE也有同样的问题.
我在类路径中有commons-logging.jar(v1.0.4)和log4j-1.2.8.jar,并且遇到以下运行时错误:
Caused by: org.apache.commons.logging.LogConfigurationException: User-specified log class 'org.apache.commons.logging.impl.Log4JLogger' cannot be found or is not useable.
at org.apache.commons.logging.impl.LogFactoryImpl.discoverLogImplementation(LogFactoryImpl.java:874)
at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:604)
at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:336)
at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:310)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:685)
Run Code Online (Sandbox Code Playgroud) 我认为我发现了一种情况,即混合使用log4j a)直接和b)通过commons-logging导致某种类加载死锁.我不确定这种情况是否可行(JVM是否应该检测到这种情况?)以及如何处理它.
在我们的构建系统中,我们目前正在按顺序运行单元测试 - 为了使构建更快,我们显然可以改变它以并行运行我们的单元测试.但是,如果我们这样做,一些构建会遇到执行超时.在分析这种"悬挂构建"的线程转储时,我们发现自己处于不同的模块中,大多数时间都涉及不同的测试.但它总是归结为两个线程尝试初始化一个Logger:一个用Logger.getLogger(直接使用log4j),另一个用LogFactory.getLog(使用commons-logging).
所以我们在这个地方有一个线程(直接使用log4j的线程):
"pool-1-thread-3" prio=10 tid=0x00007f6528ca6000 nid=0x6f8f in Object.wait() [0x00007f64d9ca6000]
java.lang.Thread.State: RUNNABLE
at org.apache.log4j.LogManager.<clinit>(LogManager.java:82)
at org.apache.log4j.Logger.getLogger(Logger.java:117)
at de.is24.platform.contacts.domain.PhoneNumberFormat.<clinit>(PhoneNumberFormat.java:21)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这是一个相当"拥挤"的路线:
Hierarchy h = new Hierarchy(new RootLogger((Level) Level.DEBUG));
Run Code Online (Sandbox Code Playgroud)
另一个线程(使用commons-logging)在这里等待:
"pool-1-thread-2" prio=10 tid=0x00007f6528bf9800 nid=0x6f8e in Object.wait() [0x00007f64d9da7000]
java.lang.Thread.State: RUNNABLE
at org.apache.log4j.Priority.<clinit>(Priority.java:45)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:171)
at org.apache.commons.logging.impl.Log4JLogger.class$(Log4JLogger.java:37)
at org.apache.commons.logging.impl.Log4JLogger.<clinit>(Log4JLogger.java:45)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:529)
at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:235)
at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:209)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351)
Run Code Online (Sandbox Code Playgroud)
这很简单:
final static public Priority FATAL = …Run Code Online (Sandbox Code Playgroud) 我有一个使用Spring运行json Web服务的Maven项目.该项目在NetBeans中运行良好.它被编译成一个jar文件,并且jar文件在Ubuntu VM中运行良好.但是,当我尝试在Windows中运行jar文件时,我收到以下错误.
java -jar myjar.jar --server.port = 8000
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:53)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at org.springframework.core.io.support.SpringFactoriesLoader.<clinit>(SpringFactoriesLoader.java:58)
at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:368)
at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:359)
at org.springframework.boot.SpringApplication.initialize(SpringApplication.java:230)
at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:206)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:961)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:950)
at com.baselayer.dal.core.Application.main(Application.java:20)
... 6 more
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 14 more
Run Code Online (Sandbox Code Playgroud)
我花了一整天的时间试图解决这个问题,但无济于事.
谁能摆脱任何光明?
这是我下面的pom.xml.
<project xmlns="http://maven.apache.org/POM/4.0.0" …Run Code Online (Sandbox Code Playgroud) 当我运行应用程序时它会获得异常
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at org.hibernate.dialect.Dialect.<clinit>(Dialect.java:58)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 1 more
Run Code Online (Sandbox Code Playgroud)
我已将所有jar文件放在lib文件夹中.我不知道如何解决这个问题,我的错误在哪里.