我有一个java应用程序,它有三个“形上说”的对象。。。1类动物,1类食物,这些与任何遗传或接口无关。。班级经理的最后一个任务是列出动物和食物的清单,经理负责动物园里的动物和食物。。
说到点子上。。。
我正在使用log4j,我需要登录到一个txt文件,如果并且仅当动物列表中的某些内容发生变化。。。(动物死了,出生了,或者什么的…)我需要登录系统。当且仅当食物清单中的某些东西发生变化时。。。(需要新的食物,吃过的食物,等等…)
我如何使用log4j做到这一点?
我在这里发现:Log4j:在运行时创建/修改附加程序,重新创建日志文件,而不是附加
比如动态改变附属物
String targetLog="where ever you want your log"
FileAppender apndr = new FileAppender(new PatternLayout("%d %-5p [%c{1}] %m%n"),targetLog,true);
logger.addAppender(apndr);
logger.setLevel((Level) Level.ALL);
但我认为这是非常丑陋的,并且容易出错,因为在整个应用程序中不断添加和删除appender。。
有没有更好的方法来处理这个问题?我可以有两个记录器(一个用于动物,一个用于食物)??
有什么建议吗??
谢谢
我就是这样让它工作的:
log4j.rootLogger=TRACE, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%5F:%t:%L] - %m%n
log4j.appender.animalLogger=org.apache.log4j.FileAppender
log4j.appender.animalLogger.File=animal.log
log4j.appender.animalLogger.layout=org.apache.log4j.PatternLayout
log4j.appender.animalLogger.layout.ConversionPattern=%d [%5F:%t:%L] - %m%n
log4j.category.animalLogger=DEBUG, animalLogger
log4j.additivity.animalLogger=false
log4j.category.foodlLogger=DEBUG, stdout
log4j.additivity.foodlLogger=false
static final Logger animalLogger = Logger.getLogger("animalLogger");
static final Logger foodlLogger = Logger.getLogger("foodlLogger");
以及加载记录器和日志:
public static void main(String[] args) {
PropertyConfigurator.configure("log4j.properties");
animalLogger.debug("Hello animalLogger message");
foodlLogger.debug("Hello reportsLog message");
}
您可以严格地从log4j中的配置执行此操作。xml文件。您可以在其中定义两个appender,然后有两个记录器元素,一个将动物绑定到第一个appender,另一个将食物绑定到另一个appender。也许您也应该有一个元素来定义默认行为。
我试图用log4j的JPA Appender保存一些日志事件,我在这里遵循了教程(JPAAppender)。 但是当我测试记录器时,我得到一些关于log4j的log4j错误/警告。特性: 假设问题在log4j。属性文件,有帮助吗??谢谢
我目前正在对一个相对较大的项目的log4j配置进行微调。目前,我还没有为所有可能创建日志项的位置配置日志级别。 我想让log4j拥有某种回退appender来记录没有为其配置其他appender的所有消息。例如,如果我有一条日志消息: 登录: a. b. c. d: WARN 并且有一个附加程序,配置为用级别INFO记录包a. b. c,然后输出记录到该附加程序。 但是,如果我没有配置append
当用户从用户界面更改配置时,我想动态地重新加载log4j附加器(RollingFileAppender)。 我已经通过编程删除了追加器,并用新的配置值创建了新的追加器。在此之后,appender broked MaxBackupIndex和MaxFileSize无法正常工作。但是如果我更改了文件名(日志文件名),那么它可以正常工作。 能帮我解决这个问题吗?
我正在尝试添加选项到一个动态选择输入,依赖于在另一个选择下拉菜单中选择的值。 我已经设法在选择父级中的值时填充数据对象。所有的my触发器也会被执行,子select被禁用,它应该包含数据对象中的所有值,但是它没有填充任何选项。 JS(Coffeescript)代码段: 最后一节特别重要,因为这是JSON数据对象应转换为新选项的地方。下面是在一种情况下响应的对象(根据Firebug): 在本例中,儿童
我很难理解可加性、类别日志级别和追加器阈值之间的关系。 下面的场景(我的log4j.properties文件): null
我试图在spark executor中使用自定义的log4j appender,以便将所有日志转发到Apache Kafka。 大卫