Tag: log4j

将log4.properties类路径放入的问题

我在将log4j.properties文件放在classpath上时遇到了一些问题。 我可以在开发时使用它(Eclipse Indigo)但是,当我将我的应用程序导出为JAR时,我不能。 我已经为导出的JAR手工制作了一个MANIFEST.MF文件: Manifest-Version: 1.0 Main-Class: main.Program Class-Path: lib/log4j.properties lib/log4j-1.2.15.jar 然后将JAR放在此文件组织上: folder |——– app.jar |——– lib |——— log4j.properties |——— log4j-1.2.15.jar 当我尝试运行app.jar时,他们找到log4j.jar但不是log4j.properties: log4j:WARN No appenders could be found for logger (main.Program). log4j:WARN Please initialize the log4j system properly. 我的log4j.properties文件是这样的: log4j.rootLogger=INFO, stdout, file PATTERN=[%d] [%p] [%c{1}]: %m%n log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=${PATTERN} log4j.appender.file=org.apache.log4j.DailyRollingFileAppender log4j.appender.file.DatePattern=’.’yyyy-MM-dd log4j.appender.file.File=${logger_file_path} log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=${PATTERN}

如何使用相同的log4j记录器为不同的包创建不同的日志文件?

我正在尝试为不同的包设置单独的日志文件。 我正在使用Wrapper类作为log4j记录器。 我的应用程序中的每个类都调用相同的包装类。 我的包装类: public class MyLogger { private static Logger logger = Logger.getLogger(MyLogger.class.getName()); …. …. } 它被称为这样: MyLogger.write(, , ); 有没有办法配置log4j,以便它将不同包的日志记录输出到不同的文件? 谢谢! 编辑: 这是我的log4j.properties文件: log4j.rootLogger=DEBUG, infoout, aar log4j.logger.com.businessservice.datapopulation=DEBUG, aar log4j.additivity.com.businessservice.datapopulation=false log4j.appender.infoout = org.apache.log4j.RollingFileAppender log4j.appender.infoout.file=/app/aar_frontend.log log4j.appender.infoout.append=true log4j.appender.infoout.Threshold=DEBUG log4j.appender.infoout.MaxFileSize=2MB log4j.appender.infoout.MaxBackupIndex=10 log4j.appender.infoout.layout = org.apache.log4j.PatternLayout log4j.appender.infoout.layout.ConversionPattern = %m%n log4j.appender.aar = org.apache.log4j.RollingFileAppender log4j.appender.aar.file=/app/aar/aar_backend.log log4j.appender.aar.append=true log4j.appender.aar.Threshold=DEBUG log4j.appender.aar.MaxFileSize=2MB log4j.appender.aar.MaxBackupIndex=10 log4j.appender.aar.layout = […]

启用Hibernate日志记录

我正在尝试创建一个hibernate语句的日志。 我使用JPA执行我的sql语句,其中Hibernate 2.0是持久性提供程序(我的应用程序服务器是JBoss AS 6.0)。 我使用EJB 3.0提供的EntityManager接口调用我的CRUD方法。 我读了很多关于启用hinernate日志的post,但实际上我看不到任何日志:-(我创建了一个log4j.properties文件,我将它放在我的Netbeans项目的根文件夹中。我还将log4j库放在了类的路径中我的log4j.properties是以下内容: ### direct log messages to stdout ### 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 log4j.logger.org.hibernate=info ### log just the SQL log4j.logger.org.hibernate.SQL=debug ### log JDBC bind parameters ### log4j.logger.org.hibernate.type=info ### log schema export/update ### log4j.logger.org.hibernate.tool.hbm2ddl=info ### log HQL parse trees #log4j.logger.org.hibernate.hql=debug ### log cache activity […]

使用log4j在Java中记录运行时exception

我目前正在使用Tomcat,Spring和JAVA构建应用程序。 我使用Log4J作为我的日志库。 我目前正在将所有内容记录到文本文件中。 我遇到的一个问题是RuntimeExceptions没有记录到任何文件。 我想知道是否有办法记录可能抛出到我的应用程序日志文件的所有RuntimeExceptions 。 如果不是可以让它登录到另一个日志文件? 有没有标准的方法来做到这一点? 如果是这样,在Tomcat中运行应用程序时有一种标准的方法吗? 预先感谢您的帮助!

在JBoss 7.1.1下使用应用程序的Log4J配置

我在使用我的XML log4j配置文件中定义的appender进行日志记录时遇到问题。 我在我的EAR的META-INF文件夹上创建了jboss-deployment-structure.xml ,没有成功。 jboss-deployment-structure.xml结构是: false 我甚至尝试编辑我的standalone.conf.bat文件,添加以下行: set “JAVA_OPTS=%JAVA_OPTS% -Dorg.jboss.as.logging.per-deployment=false” 我的应用程序部署如下: -> MyAppEAR.ear -> META-INF -> MANIFEST.MF -> MyAoo.war -> META-INF -> MANIFEST.MF -> jboss-deployment-structure.xml -> WEB-INF -> web.xml -> lib -> log4j-1.2.17.jar -> — -> classes -> log4j.xml -> … 我注意到以下错误: 忽略子部署中的jboss-deployment-structure.xml。 jboss-deployment-structure.xml仅针对顶级部署进行解析。 我甚至试过从JBOSS 7.1.0迁移到7.1.1 请帮忙! 谢谢 感谢詹姆斯的收获。 我做了你说的,并将jboss-deployment-structure.xml文件移动到MyAppEAR.ear / META-INF 。 我注意到这种方式的exception: jboss-deployment-structure.xml […]

如何刷新缓冲的log4j FileAppender?

在log4j中,当使用具有BufferedIO = true和BufferSize = xxx属性的FileAppender(即启用了缓冲)时,我希望能够在正常关闭过程中刷新日志。 关于如何做到这一点的任何想法?

如何使用Log4J屏蔽日志文件中的信用卡号?

我们的网络应用程序需要符合PCI标准,即不得存储任何信用卡号码。 该应用程序是一个大型机系统的前端,它在内部处理CC号码 – 正如我们刚刚发现的那样 – 偶尔会在其一个响应屏幕上吐出一个完整的CC号码。 默认情况下,这些响应的全部内容都以调试级别记录,并且从这些响应中解析的内容也可以记录在许多不同的位置。 所以我无法追捕这些数据泄漏的来源。 我必须确保在我们的日志文件中屏蔽了CC编号。 正则表达式部分不是问题,我将重用我们已在其他几个地方使用的正则表达式。 但是我找不到有关如何使用Log4J更改日志消息的一部分的任何好的来源。 filter似乎更受限制,只能决定是否记录特定事件,但不能改变消息的内容。 我还发现了Log4J的ESAPI安全包装API ,它初看起来有望实现我的目标。 但是,显然我需要用ESAPI记录器类替换代码中的所有记录器 – 这是一个痛苦的屁股。 我更喜欢更透明的解决方案。 知道如何屏蔽Log4J输出的信用卡号码吗? 更新:根据@ pgras的最初想法,这是一个有效的解决方案: public class CardNumberFilteringLayout extends PatternLayout { private static final String MASK = “$1++++++++++++”; private static final Pattern PATTERN = Pattern.compile(“([0-9]{4})([0-9]{9,15})”); @Override public String format(LoggingEvent event) { if (event.getMessage() instanceof String) { String message = […]

Log4j格式化:是否可以截断堆栈跟踪?

我想在我的程序中仅记录Exceptions的前几行。 我知道,我可以做这样的事情只打印堆栈跟踪的前5行: Throwable e = …; StackTraceElement[] stack = e.getStackTrace(); int maxLines = (stack.length > 4) ? 5 : stack.length; for (int n = 0; n < maxLines; n++) { System.err.println(stack[n].toString()); } 但我宁愿使用log4j(或更精确的log4j上的slf4j)进行日志记录。 有没有办法告诉log4j它应该只打印堆栈跟踪的前5行?

如何使用属性文件配置log4j

如何让log4j获取属性文件。 我正在编写一个Java桌面应用程序,我想使用log4j。 在我的主要方法中,如果有这个: PropertyConfigurator.configure(“log4j.properties”); 当我打开Jar时,log4j.properties文件位于同一目录中。 但我得到这个错误: log4j:ERROR无法读取配置文件[log4j.properties]。 java.io.FileNotFoundException:log4j.properties(系统找不到指定的文件) 我究竟做错了什么?

如何自定义log4j2 RollingFileAppender?

我们使用log4j 1.2.x登录我们的产品,并希望在不久的将来迁移到log4j 2.x. 我们实现的function之一是在生成的每个新的翻转日志文件上记录系统信息和其他重要参数。 我们在log4j 1.2.x中实现的方式是我们扩展了RollingFileAppender类的log4j并覆盖了rollOver()方法,下面是实现的部分片段 @Override public void rollOver() { super.rollOver(); //We are not modifying it’s default functionality but as soon as rollOver happens we apply our logic // // Logic to log required system properties and important parameters. // } 现在我们想要迁移到log4j2,我们正在寻找一种新的解决方案来实现相同的function。 但是当我看到log4j2的源代码时,它与旧的源代码非常不同。 RollingFileAppender类不包含rollover()方法,因为它已被移动到RollingManagerhelper并且它已被设置为private 。 开发一个完整的新包并从log4j2扩展/实现一些抽象/辅助类是我们可能的解决方案之一,但这需要大量编码/复制,因为我们不修改RollingFileAppender所做的事情,而只需要对它进行小的扩展。 有一个简单的解决方案吗? UPDATE 我根据答案中的建议创建了自定义查找,下面是我创建它的方式; @Plugin(name = “property”, category = […]