Tag: log4j

自动检测错误log4j静态初始化的方法

(请注意,它更像是一个Bash问题,而不是Java问题,请参阅下面的注释) 在每个类中配置log4j时,我们执行以下操作: public class Example { private static final Logger log = Logger.getLogger( Example.class ); 问题是我们现在有一个中等大小的代码库(200K LOC),其中包含许多Java类和…相当一些错误配置的log4j记录器。 这是因为人们(包括我,我承认),愚蠢地削减了’n’paste,有时会导致: public class Another { private static final Logger log = Logger.getLogger( Example.class ); 而繁荣,而不是拥有Another.class ,它是旧的Example.class留下,因此错误地出现在日志中(因此引起了不少令人头疼)。 我发现这种错误配置可能会发生但有些奇怪,但现在我们的主要问题不是它可能发生,而是我们必须修复错误的记录器。 我们怎样才能自动检测这些? (修复可以是手动的,但我想找到一种方法来查找log4j配置错误的所有类)。 例如,Bash shell脚本非常受欢迎。 对于每个.java文件 找到每个“class级XXX” 解析下一个’x’行(比如20) 有没有Logger.getLogger(…)行? 如果是,它是否与“XXX级”匹配? 如果没有报道 假阳性不是问题所以如果解析了一些虚假的“类XXX”并不是问题。 注意 :问题实际上是我们现在有200 000行代码,我们想自动检测违规(修复可以是手动)所以问题与以下内容不同: [有没有更好的方法来获取java中的当前类变量? 1 实际上它可能更像是一个Bash问题而不是Java问题:) 对此最热烈的帮助。

调试语句的最佳实践是什么,其中包含字符串操作?

我经常发现自己在log4net和log4j的调试语句中添加了连接字符串或使用字符串格式化器,我应该用“if debug”块来包围这些调试语句,以便通过处理这些参数来阻止自己浪费资源,即使调试语句将会不打印出来? 我会假设检查if(isDebug)是否比发生字符串操作更快更有效,但是当调试级别设置高于debug时,它会导致程序以不同的方式运行(更快),这可能意味着同步问题当我写入日志时,在生产中发生的事情不会发生。

无法让Log4J SocketAppender工作

我的Java项目使用Log4J2。 目前,它已成功将日志写入文件。 现在,我正在尝试通过Socket Appender将日志推送到LogStash。 不幸的是,我对这些努力没有任何成功。 这时,我正在看两件:我的log4j2.xml文件和我的logstash配置文件。 我在这里提供了两个,希望有人可以帮助我找出问题所在。 log4j2.xml 那是我的log4j2配置。 这是我的logstash配置: logstash.conf input { log4j { mode => “server” type => “log4j” host => “0.0.0.0” port => “4560” } } output { stdout { codec => “json” } } 我使用logstash-1.4.0/bin/logstash –config /etc/logstash/logstash.conf –debug从命令行启动logstash。 我没有看到任何错误。 同时,我没有看到任何日志写入控制台窗口。 我知道应该出现日志,因为它们出现在我的滚动server.log文件中,该文件被配置为log4j中的第二个appender。 我究竟做错了什么? 我一直在修补它3天。

Log4j2在指定的持续时间后自动翻转

我正在使用RollingFile appender。 我希望每20分钟后滚动一次日志文件,而不管日志记录事件如何。 例如,在一小时内我应该有3个日志文件,即使那个小时可能没有任何记录。 这可能使用Log4j2吗? 如果是,请提供所需的配置(在log4j2.xml中)。 以下配置似乎不起作用: %m%n

Quartz调度程序不显示Log4j消息

我正在尝试配置我的Quartz调度程序以支持日志记录。 我曾尝试做以下事情: 在我的应用程序的classes文件夹中添加了log4j.xml。 相同的代码是: log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern= %d{ABSOLUTE} %5p %c{1}:%L – %m%n log4j.rootLogger=debug, stdout 在我的调度程序类中添加了以下语句: static Logger logger = Logger.getLogger(“QuartzReport.class”); logger.info(“Info”); 但是,控制台在启动时显示以下消息: log4j:WARN No appenders could be found for logger (org.quartz.simpl.SimpleThreadPool). log4j:WARN Please initialize the log4j system properly. 请告诉我,我是否遗漏了某些东西。 此致,伊布

log4j:记录包,但不包括其子包

嗨,我想排除某些子包被我的一个记录器记录,因为它们被另一个记录器记录。 例如。 com.mysite.app = logger1 com.mysite.app.news = logger2 com.mysite.app.events = logger3 我希望logger1只记录logger2和logger3未记录的com.mysite.app(包括com.mysite.app.utilities)。 我怎么能这样做? (请提供属性格式的帮助,其他参考奖励积分的XML格式)

Log4j .append = true属性失败

我正在使用log4j(2.1.16)和DailyRollingFileAppender,并将append属性设置为true。 但是,每次重新启动Web应用程序时它都不会附加,它只会覆盖该文件。 log4j.appender.eformsAccess=org.apache.log4j.DailyRollingFileAppender log4j.appender.eformsAccess.file=to be set in the code(SchemeActionBean.java) log4j.appender.eformsAccess.datePattern=’.’yyyyMMdd log4j.appender.eformsAccess.append=true log4j.appender.eformsAccess.ImmediateFlush=true log4j.appender.eformsAccess.layout=org.apache.log4j.PatternLayout log4j.appender.eformsAccess.layout.ConversionPattern=%d{ISO8601} %m %n 那么我做错了什么? 干杯

如何在项目中包含多个log4j2.xml文件?

我的项目由多个模块组成。 每个模块都可以独立运行,并具有单独的log4j2.xml 说项目X由三个模块组成: 模块A有log4j2.xml(包含Loggers和Appenders) 模块B有log4j2.xml 模块C有log4j2.xml 在集成模块时,我必须手动将Loggers和Appender从每个模块的log4j2.xml复制粘贴到项目特定的log4j2.xml文件中。 为了避免复制粘贴,我一直在寻找包含多个文件的XInclude ,但它只支持Appenders和Logger在不同的文件中。 http://logging.apache.org/log4j/2.x/manual/configuration.html#XInclude 如何XInclude多个log4j2.xml文件? 任何帮助是极大的赞赏。

无法使用log4j DailyRollingFileAppender将日期附加到文件名

您好我试图使用log4j DailyRollingFileAppender将当前日期附加到文件名,但它无法正常工作。 我使用了如下配置。 请为此建议一个解决方案 性能 log4j.rootLogger = DEBUG, rollingAppender log4j.appender.rollingAppender=org.apache.log4j.DailyRollingFileAppender log4j.appender.rollingAppender.DatePattern=’.’yyyy-MM-dd log4j.appender.rollingAppender.File=F:/temp/app.log log4j.appender.rollingAppender.layout=org.apache.log4j.PatternLayout log4j.appender.rollingAppender.layout.ConversionPattern=[%p] %d %c %M – %m%n 我期待日志文件为app2014-11-07.log,但它仍然是app.log

Log4J – 运行时变量替换

Log4J似乎有一个恼人的限制 – 在运行时,变量替换似乎不起作用。 在这个例子中 文件:Log4j.properties file_pattern =%d {ISO8601}%-5p%m%n log4j.rootLogger = DEBUG,FileAppender log4j.appender.FileAppender = org.apache.log4j.FileAppender log4j.appender.FileAppender.layout = org.apache.log4j.PatternLayout log4j.appender.FileAppender.layout.ConversionPattern = $ {file_pattern} log4j.appender.FileAppender.File = log4jtest1.log log4j.appender.FileAppender.Threshold = ERROR log4j.properties文件中配置的FileAppender生成正确的输出: 文件:log4jtest1.log 错误示例错误消息FATAL示例致命消息 如果我尝试在运行时创建FileAppender import org.apache.log4j.FileAppender; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.PatternLayout; public class Main { static final Logger logger = Logger.getLogger(Main.class); public static void main(String[] args) throws […]