好的,所以我试图使内存appender(简单的记录器,日志到ArrayList而不是控制台或文件),但现在我想禁用它从打印到控制台。
问题和网站,到目前为止我已经读过了(但我仍然不知道它是什么)。。
它包含了我想要实现的所有部分,但我仍然有点困惑。
我也读了这段Logback或Log4j附加解释的状态...
但是,如果logger X的aditivity标志设置为false或禁用,则调用X.debug()将只记录到该文件。
所以理论上我的log4j.properties
文件
log4j.rootLogger=ERROR, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d %5p %c (%F:%L) - %m%n
#hide the Log4jMemoryAppender from console
log4j.logger.nz.ac.massey.cs.sdc.log4jassignment.s06005586.MemoryAppender= ERROR, MEMORY_APPENDER
log4j.appender.MEMORY_APPENDER=nz.ac.massey.cs.sdc.log4jassignment.s06005586.MemoryAppender.Log4jMemoryAppender
log4j.additivity.rootLogger = false
log4j.additivity.console = false
log4j.additivity.MEMORY_APPENDER=false
应该只打印***Hello World
,并从内存\u APPENDER
、根记录器
和控制台
中排除任何其他内容。
package nz.ac.massey.cs.sdc.log4jassignment.s06005586.MemoryAppender;
import java.util.ArrayList;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.spi.LoggingEvent;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class Log4jMemoryAppender extends AppenderSkeleton {
ArrayList<LoggingEvent> eventsList = new ArrayList();
public static void main (String [] args) {
PropertyConfigurator.configure("Lib/log4j.properties");
Log4jMemoryAppender app = new Log4jMemoryAppender();
Logger logger = Logger.getLogger(Log4jMemoryAppender.class);
logger.setLevel(Level.INFO);
logger.addAppender(app);
logger.info("Hello World");
logger.debug("Level DEBUG Is SET");
for (LoggingEvent le: app.eventsList) {
System.out.println("***" + le.getMessage());
}
}
@Override
protected void append(LoggingEvent event) {
eventsList.add(event);
}
public void close() {
}
public boolean requiresLayout() {
return false;
}
}
但它不。。。
我刚刚通过将其设置为log4j解决了这个问题。xml,将value=“TRACE”替换为value=“ERROR”。希望这能帮助一些人:)
<root>
<priority value="ERROR" />
<appender-ref ref="STDOUT"/>
</root>
这条线
MEMORY_APPENDER=false
将不起作用,不能将appender的值设置为false。
在你的情况下,最好这样做:
log4j.rootLogger=ERROR, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.logger.nz.ac.massey.cs.sdc.log4jassignment.s06005586.MemoryAppender = ERROR, MEMORY_APPENDER
log4j.additivity.nz.ac.massey.cs.sdc.log4jassignment.s06005586.MemoryAppender = false
在您的一个示例中使用的记录器是nz。ac.massey。反恐精英。sdc。log4jassignment。s06005586。内存出现
,它应该映射到log4j中的记录器。属性
或仅包装部分,如nz。ac.massey。反恐精英。sdc。log4jaSignment
。
看来你在这里混了很多。是Log4jMemoryAppender
你的MEMORY_APPENDER
或不是?
为什么要调用BasicConfigurator。configure()
?您不想使用log4j吗。属性
?
通常在一个类中,你这样做是为了得到一个记录器:
package com.mycompany;
public class MyClass {
private static final Logger log = Logger.getLogger(MyClass.class);
...
}
记录器名称将是完全限定的类名com。我的公司。MyClass
。
然后你可以有一个log4j.properties
像这样:
log4j.rootLogger=ERROR, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.logger.com.mycompany=INFO, file
log4j.additivity.com.mycompany=false
logfj.appender.file = <some file appender>
好,从头开始。一个非常简单的例子。
src/main/java/Log4JTest.java
package org.stackoverflow;
import org.apache.log4j.Logger;
/**
* @author maba, 2012-08-22
*/
public class Log4JTest {
public static final Logger log = Logger.getLogger(Log4JTest.class);
public static void main(String[] args) {
log.error("Error in main");
}
}
src/main/resources/log4j。属性
log4j.rootLogger = ERROR, console
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
现在编译并确保log4j.properties
在运行时与log4j.jar
和自己的类一起在类路径中。
你会看到这个:
0 [main] ERROR org.stackoverflow.Log4JTest - Error in main
从这里,您可以尝试添加文件附件或您自己的内存附件。
我试图将命令提示符中打印出来的信息从JAVA控制台显示到C#。当在JAVA中发出System.out.println时,它可以很好地工作,但是它不能用于logger.info print out。 注意:当我通过windows命令提示符(CMD>java-jar testbed.jar)运行它时,记录器信息会在命令提示符中打印出来。 JAVA来做一个简单的增量和减量数字,当按下按钮进行增量或减量时
我正在使用下面的jQuery JSONP请求按URL检查资源的状态。当资源不可用或服务器关闭时,我的函数更新显示。 我遇到的问题是,尽管为和声明了处理程序(它们不将任何内容记录到控制台),但jQuery总是将失败的请求记录在控制台中。如果资源长时间不可用,这将建立一个巨大的控制台日志,最终导致浏览器进程崩溃(在我的例子中是Chrome)。 有什么办法可以阻止它这样做吗?
我是java新手,尝试使用logger而不是System。出来打印(); 让奶牛和公牛玩游戏,但不知道如何让记录器打印新行中的每个数字,而是将其打印为一个数字。 例子: 输出为: 我想把3647打印成一个数字。
我试图使用TDD(测试驱动开发)与。当我使用时,不会到控制台。 我正在使用来运行它。 似乎说默认情况下它应该工作:http://pytest.org/latest/capture.html 但是: 没有任何东西被打印到我的标准输出控制台(只是正常的进度和多少测试通过/失败)。 我正在测试的脚本包含打印: 在模块中,默认情况下打印所有内容,这正是我所需要的。但是,出于其他原因,我希望使用。 有人知道
我们可以dsable日志打印一些自定义创建记录器吗? 我想禁用文件记录器控制台中的打印消息
我有一个Web应用程序,使用log4j。我在 /WEB-INF/classes/log4j.properties文件中配置了一个自定义记录器,如下所示: 日志消息按预期写入server.log,但我试图找到一种方法来控制自定义记录器日志级别通过glassfish服务器。 我尝试从命令中创建glassfish中的记录器: 但是,即使asadmin命令将记录器设置为警告,所有INFO消息仍然会被记录。