我想要一个非常简单的XML配置文件,其中包含一个控制台和一个使用log4j2的文件追加器.
(Apache网站给我留下了很多信息.)
我正在尝试为我的本地运行的tomcat服务器配置log4j2.我无法将日志传递到与tomcat安装相关的位置.
如果我指定一个绝对路径它的工作原理.如果我使用相对路径,它输出到的位置System.getProperty("user.dir").
但是,当我尝试使用它${catalina.home}或${catalina.base}它不起作用.如果我在启动时输出这两个系统属性,则会定义它们并指向正确的位置.
也,
-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector.我的感觉是Tomcat在处理log4j2.xml时可能没有完全初始化?任何想法将不胜感激!
这是我的log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="debug" name="LoggingConfig">
<appenders>
<FastFile name="ALog" fileName="${catalina.home}/logs/test.log" immediateFlush="true" append="true">
<PatternLayout>
<pattern>%d %p %c{1.} [%t] %m%n</pattern>
</PatternLayout>
</FastFile>
</appenders>
<loggers>
<logger name="a.namespace.dir" level="info" additivity="false">
<appender-ref ref="ALog"/>
</logger>
<root level="info">
<appender-ref ref="ALog"/>
</root>
</loggers>
</configuration>
Run Code Online (Sandbox Code Playgroud)
来自catalina.out
2013-07-31 11:22:00,313 DEBUG Calling createAppender on class org.apache.logging.log4j.core.appender.FastFileAppender for element FastFile with params(fileName="${catalina.home}/logs/test.log", append="true", name="ALog", immediateFlush="true", suppressExceptions="null", PatternLayout(%d …Run Code Online (Sandbox Code Playgroud) 我需要登录到一个文件,因为客户没有我可以使用log4net登录的控制台.现在我读到FileAppender不是线程安全的.无论如何有一种方法来记录一个应用程序中的文件,该应用程序退出不同的线程或什么是常见的替代方案?
我在我的项目中使用log4net,有一个问题.该程序的主要功能需要很长时间,我使用日志记录来保存有关它的信息.我使用FileAppender将日志保存到文件.
我的应用程序位于共享(本地)文件夹中,可能有多个应用程序实例从一个路径运行.在这种情况下,我只能从第一个程序记录信息,我的应用程序的其他实例无法记录信息,因为日志文件已被锁定.
当我使用"log4net.Appender.FileAppender + MinimalLock"选项时,会出现信息丢失的情况.并非所有来自两个实例的日志都保存到文件中.
如何从并行实例中解决此问题和日志信息?当我使用"MinimalLock"选项时性能下降呢?
谢谢.希望得到你的帮助.
语境:
我想使用log4j将审计相关的日志写入特定的日志文件,比方说audit.log.我不想使用syslogappender(基于udp),因为我不想容忍数据丢失.另外,当文件达到一定大小时,我使用logrotate来旋转audit.log.
问题:
我遇到的是,当logrotate将文件audit.log旋转到audit.log.1时,log4j继续写入audit.log.1而不是写入audit.log.
可能的方法:
我知道除了使用logrotate之外我可以使用rollingfileappender进行日志轮换,所以当scrollfileappender滚动文件时,它会毫无困难地切换到新文件.但我不能使用rollingfileappender的原因是我想使用logrotate的post旋转功能在旋转发生后触发一些脚本,而滚动文件无法提供.
我能想到的另一种绝望的方法是自己编写一个log4j自定义appender来关闭日志文件(audit.log.1)并在检测到文件被旋转时打开新文件(audit.log).
我从未使用ExternallyRolledFileAppender,但是如果可以使用logrotate post rotate将信号发送到ExternallyRolledFileAppender并使log4j知道文件被旋转,并开始写入新文件?
题:
只是想知道是否有一些像已经发明/写的那样的追加者?或者我还有其他选择来解决这个问题吗?
log4j logrotate rollingfileappender fileappender log-rotation
我有以下配置文件,它与Logback手册中的标准示例非常相似.唯一的区别是添加[%F:%L].虽然一切正常,但%F和%L不起作用.如果我删除异步appender并使用文件appender直接登录,一切都很好.
谁能解释一下发生了什么?以及如何打印文件名和行号应该是这两个参数?
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>myapp.log</file>
<encoder><pattern>%logger{35} - [%F:%L] - %msg%n</pattern></encoder>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="FILE" />
</appender>
<root level="DEBUG"><appender-ref ref="ASYNC" /></root>
</configuration>
Run Code Online (Sandbox Code Playgroud) 我要求我需要将审核信息存储在TEXT文件中.我计划使用编写审计信息Apache Log4j.
似乎是可靠的选择.但是,即使fileSize达到3GB,我也应该能够编写审计信息.
是否log4j支持fileSize甚至GigaBytes?
或者使用快速问题,可以支持的是什么.MaximumFileSizeLog4j
注意: 我无法使用RollingFileAppender或DailyFileAppender,我需要记录仅在一个文本文件中的信息,其中一些其他组件正在读取此文件内容并执行某些过程.
TickZoom是一款性能非常高的应用程序,它使用自己的并行化库和多个操作系统线程来平滑地利用多核计算机.
该应用程序遇到瓶颈,用户需要从单独的O/S线程向LogAppender写入信息.
FileAppender使用MinimalLock功能,以便每个线程可以锁定并写入该文件,然后释放它以供下一个要写入的线程使用.
如果MinimalLock被禁用,log4net将报告有关已被另一个进程(线程)锁定的文件的错误.
log4net执行此操作的更好方法是使用单个线程来处理写入FileAppender,而任何其他线程只是将其消息添加到队列中.
这样,可以禁用MinimalLock以大大提高日志记录的性能.
此外,该应用程序执行大量CPU密集型工作,因此它还可以提高性能,使用单独的线程写入文件,以便CPU永远不会等待I/O完成.
所以问题是,log4net是否已经提供此功能?如果是这样,你如何启用线程写入文件?是否还有另一个更高级的追加者?
如果没有,那么由于log4net已经包含在平台中,因此可以在TickZoom代码中为此目的实现单独的线程和队列.
真诚的,韦恩
编辑:
谢谢,似乎答案指向开发我们自己的解决方案,可能是某种方式的log4net的扩展.他们清楚地表明log4net不会做这类事情.
此外,我们刚刚意识到我们可能"滥用"日志系统,该系统主要用于通知重要事件或调试信息的人类可读消息.软件输出的这一特定部分仅用于验证系统准确性的自动化工具.
当然,我们也以"正常"方式使用log4net进行调试,警告等.
但这些更像是"事务日志",而不是调试或用户通知日志.更具体地说,这些日志不必直接是人类可读的.如果需要,某种"查看器"可以以ASCII格式显示内容.
因此我们计划将这些事务类型的日志写入高速二进制存储.
谢谢,以下两个答案似乎都非常适合开发我们自己的解决方案.
是否可以在log4net中配置FileAppender以在日志文件的开头添加新条目?目前,它最后添加条目,阅读最新条目需要滚动整个日志记录.从头开始阅读会更舒服.
我已经开始为我们的应用程序探索Logback选项.其中一个要求是为具有特定"标记"的日志条目创建单独的日志文件.
下面是我正在使用的logback.xml文件以及我得到的错误.logback网站上的示例显示了SMTPAppender的用法,但我想使用FileAppender.这可能吗?如果没有,我还有其他选择吗?
<property name="USER_HOME" value="c:/temp" />
<appender name="AUDIT_FILE" class="ch.qos.logback.core.FileAppender">
<evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
<marker>APPEND_SYSLOG</marker>
</evaluator>
<file>${USER_HOME}/mw_syslog.log</file>
<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="AUDIT_FILE" />
</root>
12:07:01,515 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/C:/JavaProjects/LogbackWeb/target/LogbackWeb-1.0-SNAPSHOT/WEB-INF/classes/logback.xml]
12:07:02,013 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
12:07:02,134 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.FileAppender]
12:07:02,176 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [AUDIT_FILE]
12:07:02,286 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@43:76 - no applicable action for [evaluator], current …Run Code Online (Sandbox Code Playgroud)