Tag: log4j

Java日志记录:Log4j Version2.x:显示最终客户端调用方法(不是中间日志记录助手方法)

以下3篇文章提供了如何使用中间日志记录助手的答案,并且仍然让底层记录器从客户端的方法报告给该日志记录助手(而不是将日志记录助手方法报告为源): Java日志记录:显示调用者的源行号(而不是日志记录助手方法) 间接调用log4j的日志方法(来自辅助方法) 使用log4j包装器在日志语句中打印“source”类 但似乎只提供Log4j 1.2的答案,它提供了现在已经不存在的: Category.log(String callerFQCN, Priority level, Object message, Throwable t). log4J 2.5 API中的Logger似乎没有明显的等价物。 任何人都可以提供与直接使用Log4J 2.x兼容的答案吗?

如何关闭log4j警告?

我正在运行一个Java应用程序,它取决于使用log4j的几个库(Axis2)。 我不使用log4j,也没有任何配置文件。 我想完全禁用log4j并压制它吐出的任何和所有警告。 现在,当我运行我的应用程序时,当我调用其中一个库的方法时,我看到: log4j:WARN No appenders could be found for logger (org.apache.axis2.deployment.FileSystemConfigurator). log4j:WARN Please initialize the log4j system properly. 我可以调用一些静态log4j禁用方法吗? 我尝试了Logger.getRootLogger()。removeAllAppenders(); 这不起作用(我仍然看到警告)。

Log4j突然停止记录

我正在构建一个部署到在Linux上运行的WebSphere Portal Server的Portlet应用程序。 每个Portlet WAR使用Log4j进行日志记录,使用这样的配置,每个WAR都有两个日志文件: log4j.logger.im.the.package=DEBUG, InfoAppender, DebugAppender log4j.appender.InfoAppender=org.apache.log4j.RollingFileAppender log4j.appender.InfoAppender.Threshold=INFO log4j.appender.InfoAppender.File=/tmp/infoWARName.log log4j.appender.InfoAppender.layout=org.apache.log4j.PatternLayout log4j.appender.InfoAppender.layout.ConversionPattern=%d %p [%c] – %m%n log4j.appender.DebugAppender=org.apache.log4j.RollingFileAppender log4j.appender.DebugAppender.Threshold=DEBUG log4j.appender.DebugAppender.File=/tmp/debugWARName.log log4j.appender.DebugAppender.layout=org.apache.log4j.PatternLayout log4j.appender.DebugAppender.layout.ConversionPattern=%d %p [%c] – %m%n 部署之后,一切都像魅力和日志文件一样开始填充。 几个小时后,同时,Logging停止, info.log和debug.log根本没有更新。 我们需要在服务器中重新部署Portlet WAR以重新开始记录。 有任何想法吗? 更新: 我开始怀疑它与我的Logging JARS有关。 目前,这是我的WEB-INF/lib文件夹中的JAR: com.springsource.org.apache.commons.logging-1.1.1.jar com.springsource.org.apache.log4j-1.2.15.jar com.springsource.slf4j.api-1.5.6.jar slf4j-log4j12-1.5.6.jar 第二次更新: 从赏金到结束的几个小时,这就是每个Portlet应用程序中Log4j的配置方式。 这是web.xml : log4jConfigLocation classpath:miAppLog4j.properties org.springframework.web.util.Log4jConfigListener miAppLog4j.properties文件位于WAR外部的文件夹和Portal中。 我们通过WebSphere Portal中的共享库在 Portlet Classpath中创建了它。

以编程方式覆盖log4j配置:FileAppender的文件位置

是否可以覆盖已在log4j.properties配置的appender的“File”属性而无需创建新的appender? 如果是这样 – 怎么样? 情况就是这样:我有两个分配器,A1是ConsoleAppender,A2是FileAppender。 A2的“文件”指向一般错误.log: log4j.appender.A2.File=error.csv 此appender仅记录错误级别事件或更糟 log4j.appender.A2.Threshold=error 。 现在我希望将这些错误写入不同的文件,具体取决于导致错误的类,因为有几个类正在创建实例。 能够快速查看哪个类创建了错误将会有很大的帮助,因为它更有用,然后浏览error.log来查找类标记。 所以我的想法是覆盖“File”属性,例如在这些新创建的类的构造函数中,因此它们将错误记录在不同的文件中。 非常感谢提前!

日志文件名以包含log4j中的当前日期

问题是这个问题的一个子集。 我希望每天使用日志文件名格式创建一个日志文件,如下所示: downloadmanageryyyy-MM-dd.log 使用DailyRollingAppender但根本不创建日志文件。 我的lo4j.xml看起来像这样:

配置log4j属性文件以存储在mysql数据库中

我开始使用log4j已经有一段时间了; 非常酷的日志框架。 我做过其他类型的日志记录,如控制台和文件记录。 因此尝试使用mysql进行数据库日志记录的数据库适配器。 因此,我创建了以下名为log4j.properties的属性文件 – # Define the root logger with appender file log4j.rootLogger = DEBUG, DB # Define the DB appender log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender # Set JDBC URL log4j.appender.DB.URL=jdbc:mysql://localhost:3306/test # Set Database Driver log4j.appender.DB.driver=com.mysql.jdbc.Driver # Set database user name and password log4j.appender.DB.user=root log4j.appender.DB.password= # Set the SQL statement to be executed. log4j.appender.DB.sql=insert into log(date,level,message) values(“%d”,”%p”,”%m”) […]

如何覆盖log4j中的日志文件?

我有一个日志文件,其中添加了以下appender: logger.addAppender(new FileAppender(new PatternLayout(),”log.txt”)); 问题是,每次我运行我的应用程序时,额外的日志记录信息都会附加到同一个日志文件中。 我每次都能覆盖文件怎么办?

配置Java FileHandler日志记录以创建不存在的目录

我正在尝试配置Java Logging API的FileHandler以将我的服务器记录到我的主目录中的文件夹中的文件,但我不想在它运行的每台机器上创建这些目录。 例如,在logging.properties文件中,我指定: java.util.logging.FileHandler java.util.logging.FileHandler.pattern=%h/app-logs/MyApplication/MyApplication_%u-%g.log 这将允许我在MyApplication的主目录(%h)中收集日志并将它们旋转(使用%u和%g变量)。 当我在log4j.properties中指定时,Log4j支持这个: log4j.appender.rolling.File=${user.home}/app-logs/MyApplication-log4j/MyApplication.log 看起来Logging FileHandler存在一个错误: 错误6244047:不可能指定driectorys来记录FileHandler,除非它们存在 听起来他们不打算修复它或暴露任何属性来解决问题(除了让你的应用程序解析logging.properties或硬代码所需的路径): 看起来java.util.logging.FileHandler看起来不希望指定的目录可能不存在。 通常,无论如何都必须检查这种情况。 此外,它还必须检查目录写入权限。 另一个问题是,如果其中一项检查未通过,该怎么办。 如果用户具有适当的权限,一种可能性是在路径中创建缺少的目录。 另一种方法是抛出一个带有明确错误信息的IOException。 后一种方法看起来更加一致。

使用自定义类加载器配置org.apache.log4j.ConsoleAppender

我有一个java类,它在启动时基于javassist类加载器创建一个自定义类加载器,然后运行真正的程序类。 我收到以下错误: log4j:ERROR A “org.apache.log4j.ConsoleAppender” object is not assignable to a “org.apache.log4j.Appender” variable. log4j:ERROR The class “org.apache.log4j.Appender” was loaded by log4j:ERROR [javassist.Loader@6f97b10a] whereas object of type log4j:ERROR “org.apache.log4j.ConsoleAppender” was loaded by [java.net.URLClassLoader@5b414a8d]. log4j:ERROR Could not instantiate appender named “stdout”. 问题与以下事实有关:一个对象由原始类加载器创建,而另一个对象由自定义类加载器创建。 有没有办法解决这个错误? 提前致谢, 阿夫纳

一个很好的Java数据库日志追加器?

在我的工作场所,我们编写了一个自定义log4j appender,它将日志消息写入数据库(异步使用专用线程,因此没有性能损失)。 我更喜欢写入日志文件 – 基于数据库的日志更容易查询和分析。 是否有一个开源解决方案来执行此操作(特别是对于log4j或任何其他java记录器)? 我们的appender有一些东西,我想在另一种方法中看到: 记录exception(呃!) 数据库写入来自单独的线程/池 我们的appender支持以下列,我希望在我们找到的任何解决方案中看到所有这些列。 LOGID 时间 信息 堆栈跟踪 进程ID 线程ID 机器名称 零件 等级(调试/信息/警告/ …) ThreadName