我有一些测试代码,它调用Java记录器来报告其状态.在JUnit测试代码中,我想验证在此记录器中是否输入了正确的日志.以下内容:
methodUnderTest(bool x){
if(x)
logger.info("x happened")
}
@Test tester(){
// perhaps setup a logger first.
methodUnderTest(true);
assertXXXXXX(loggedLevel(),Level.INFO);
}
Run Code Online (Sandbox Code Playgroud)
我想这可以通过特殊改编的记录器(或处理程序或格式化程序)来完成,但我更愿意重用已经存在的解决方案.(而且,说实话,我不清楚如何从记录器获取logRecord,但假设这是可能的.)
我是log4j的新手.任何人都可以解释如何创建自己的Appender?即如何实现类和接口以及如何覆盖它?
我一直试图将日志输出到JTextArea几天,但仍然没有运气.基本上我尝试过的是在现有的appender(如consoleAppender)之后创建自己的自定义appender,并尝试在log4j2.xml中配置它.我觉得我正朝着正确的方向前进,但不知怎的,我无法让它发挥作用.我在log4j2用户邮件列表中询问过,似乎没有人关心帮助我.希望我能在这里得到我的帮助.如果您知道如何实现它,请给我步骤甚至代码片段.
感谢您的高级帮助.
好吧,既然有人拒绝投票我的问题,因为它没有显示任何努力,那么我最好展示一些.我没有表现出我所做的任何事情,因为我不太确定我所做的是正确的方式,人们可能有自己的方法.
我面临的问题是,
代码如下,
TextAreaAppender
public class TextAreaAppender extends AbstractOutputStreamAppender<OutputStreamManager>{
private static TextAreaManagerFactory factory = new TextAreaManagerFactory();
public enum Target {
TEXTAREA
}
protected TextAreaAppender(String name, Layout<? extends Serializable> layout, Filter filter,
OutputStreamManager manager, boolean ignoreExceptions) {
super(name, layout, filter, ignoreExceptions, true, manager);
// TODO Auto-generated constructor stub
}
@PluginFactory
public static TextAreaAppender createAppender(
@PluginElement("Layout") Layout<? extends Serializable> layout,
@PluginElement("Filters") final Filter filter,
@PluginAttribute("target") final String t,
@PluginAttribute("name") final String name,
@PluginAttribute("follow") final String follow,
@PluginAttribute("ignoreExceptions") …Run Code Online (Sandbox Code Playgroud) 我想在TestNG报告中提供所有测试用例的Log4j2日志信息.
TestNG使用一个名为Reporter.java的特殊记录器类来跟踪日志输出并将其保存在结果XML中.
在log4j中,可以简单地创建一个路由到Reporter并注册它的appender实现.
使用Log4j2中的新Logger API,很难找到有关如何实现此目的的信息.我有一些信息可以使用Log4j完成,但不能使用Log4j2.
我正在使用 .property 文件在特定路径中创建日志文件,但我正在使用它创建单个文件。以下是我的属性文件代码:
status = error
dest = err
name = PropertiesConfig
property.filepath= /ap
property.filename =${filepath}/ai.log
property.filename1 =${filepath}/file1.log
property.filename2 =${filepath}/file2.log
filter.threshold.type = ThresholdFilter
filter.threshold.level = debug
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
appender.file.type = RollingFile
appender.file.name = RootFile1
appender.file.fileName = ${filename}
appender.file.filePattern = ${filepath}/%d{yyyyMMdd}/cpl.mw.%d{yyyyMMdd}.%i.log.gz
appender.file.layout.type = PatternLayout
#appender.file.layout.pattern = %d %p %C{1.} [%t] %m%n
appender.file.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
appender.file.policies.type = Policies
appender.file.policies.time.type = TimeBasedTriggeringPolicy
appender.file.policies.time.interval …Run Code Online (Sandbox Code Playgroud) 我正在尝试为log4j 2.0创建一个自定义appender,但是在让我的log4j配置识别appender时遇到了问题.我知道log4j 2.0不支持配置属性中的包.所以我按照这里的建议尝试用普通的javac运行代码,但即使这样它也会出现这个错误:2015-03-11 18:47:35,281 ERROR Error processing element Test: CLASS_NOT_FOUND
2015-03-11 18:47:35,307 ERROR Unable to locate appender test1 for logger
这是我的自定义appender:
@Plugin(name = "Test", category = "Core", elementType = "appender", printObject = true)
public class TestAppender extends AbstractAppender{
protected TestAppender(String name, Filter filter,
Layout<? extends Serializable> layout, boolean ignoreExceptions) {
super(name, filter, layout, ignoreExceptions);
// TODO Auto-generated constructor stub
}
@PluginFactory
public static TestAppender createAppender(@PluginAttribute("name") String name,
@PluginAttribute("ignoreExceptions") boolean ignoreExceptions,
@PluginElement("Layout") Layout<? extends Serializable> layout,
@PluginElement("Filters") Filter …Run Code Online (Sandbox Code Playgroud)