我正在使用logback,我试图在我的Java程序中以编程方式设置日志文件名(类似于以编程方式设置Logback Appender路径),我尝试按如下方式调整该解决方案:
在logback-test.xml中:
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>log/${log_file_name}.log</file>
...
Run Code Online (Sandbox Code Playgroud)
然后再在我的Java程序中:
String logFileName = "" + System.currentTimeMillis(); // just for example
System.setProperty("log_file_name", logFileName);
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
ContextInitializer ci = new ContextInitializer(lc);
lc.reset();
try
{
// I prefer autoConfig() over JoranConfigurator.doConfigure() so I
// wouldn't need to find the file myself.
ci.autoConfig();
}
catch (JoranException e)
{
// StatusPrinter will try to log this
e.printStackTrace();
}
StatusPrinter.printInCaseOfErrorsOrWarnings(lc);
Run Code Online (Sandbox Code Playgroud)
然而,结果是两个日志,一个完整并按我想要的名称命名,例如"1319041145343.log",另一个是空的并命名为"log_file_name_IS_UNDEFINED.log".如何阻止创建其他空日志文件?
我在Spring Boot应用程序中的Logback配置有问题.我希望我consoleAppender看起来像默认的Spring Boot控制台appender.如何从Spring Boot默认控制台appender继承模式?
以下是我的consoleAppender配置
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern class="org.">
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
</Pattern>
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud) 将日志文件自动附加到支持电子邮件会很有用.我可以以编程方式设置路径(如以编程方式设置Logback Appender路径),但我更愿意让用户以熟悉的方式配置日志记录logback.xml.那么,我可以找到logback用于记录的文件吗?
log4j有一个属性,log4j.debug它将有助于向用户提供实际用于配置日志记录系统的配置文件的指示.
我无法找到与(否则更高级)Logback日志框架等效的东西.有没有办法在运行时打印(用于诊断目的),哪个配置文件Logback用于自举?
[编辑]为了澄清,我理想地喜欢一个不需要我修改配置文件本身的解决方案(例如,由于错误组装的第三方JAR可能被错误地拾取,并且在我的回溯配置之前XML).
Log4J允许您传递应用程序中特定记录器的级别,以便从命令行进行登录,例如"-Dlog4j.logger.com.whatever.MyClass = DEBUG".我在Logback中找不到任何类似的工具.根据FAQ,所有它似乎允许你做的是通过使用变量替换设置根记录器的级别.有什么我缺少或Logback不支持这个吗?谢谢.
我正在寻找一种集中分布式软件(用Java编写)的日志问题的方法,这很容易,因为有问题的系统只有一台服务器.但请记住,特定服务器的更多实例很可能在未来运行(并且需要更多应用程序),必须有类似Logging-Server的东西,处理传入的日志,并使其可供支持团队访问.
现在的情况是,几个java应用程序使用log4j将其数据写入本地文件,因此如果客户端遇到问题,支持团队必须要求提供日志,这并不总是很容易并且需要花费大量时间.在服务器故障的情况下,诊断问题并不大,因为无论如何都存在远程访问,但即使通过Logging-Server监控所有内容仍然很有意义.
当我查看有关"集中式日志记录"的问题时,我发现了另一个问题(实际上是唯一一个带有(在这种情况下)可用答案的问题.问题是,所有应用程序都在封闭环境中运行(在一个网络内)和安全指南不允许有关内部软件的任何内容走出环境网络.
我还发现了一篇关于如何实现这样一个Logging-Server 的精彩文章.由于这篇文章写于2001年,我原本以为有人可能已经解决了这个特殊问题.但我的搜索结果没有任何结果.
我的问题:是否有一个日志框架可以通过支持团队访问的集中式服务器来处理网络登录?
规格:
没必要,但很高兴
我最糟糕的情况是他们不是那样的软件.对于这种情况,我们可能会自己实现.但是,如果有这样的客户端 - 服务器应用程序,我将非常感谢不需要做这个特别有问题的工作.
提前致谢
更新:解决方案必须在几个支持java的平台上运行.(主要是Windows,Linux,一些HP Unix)
更新:经过更多的研究,我们实际上找到了一个我们能够获得的解决方案.clusterlog.net(至少自2015年中起离线)为分布式软件提供日志服务,并兼容log4j和logback(与slf4j兼容).它允许我们通过应用程序分析每个用户的方式.因此,很容易重现报告的错误(甚至是未报告的错误).它还通过电子邮件通知我们重要事件,并且报告系统将相同来源的日志汇总为易于访问的格式.他们在几天前就在这里部署了(它完美无瑕)并且运行良好.
更新(2016):这个问题仍然有很多流量,但我提到的网站不再存在.
我logback.xml在单独的项目中有2个文件.一个使用FileAppender将JDBC SQL记录到文件中,另一个使用ConsoleAppender将错误记录到stdout.
这是我的每个logback.xml文件.
文件记录
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${user.home}/database.log</file>
<append>false</append>
<encoder>
<pattern>%-5relative %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<logger name="jdbc" level="OFF" />
<logger name="jdbc.sqlonly" level="debug" />
<root level="info">
<appender-ref ref="FILE" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
控制台记录
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%-5relative %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<logger name="jdbc" level="OFF" />
<root level="ERROR">
<appender-ref ref="STDOUT" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我正在合并这两个项目,我希望能够继续将信息级SQL记录到文件中,并将错误记录到STDOUT.
我已经添加了两个appender logback.xml但我不知道如何处理记录器和新的root标签logback.xml.
我正在使用groovy的logback并在解析xml时出现很多警告.我知道JDK1.7_u45中导致此问题的错误.
Warning: org.apache.xerces.parsers.SAXParser: Property 'http://javax.xml.XMLConstants/property/accessExternalDTD' is not recognized.
Warning: org.apache.xerces.parsers.SAXParser: Property 'http://www.oracle.com/xml/jaxp/properties/entityExpansionLimit' is not recognized.
Run Code Online (Sandbox Code Playgroud)
有没有办法关闭这个日志警告出现在DEBUG?我尝试使用Filter编写过滤器,但没有帮助.
这是我第一次涉足LogBack的世界,但是我无法在文档中的任何地方找到我可以定义编码器/模式一次并在多个appender之间共享它.知道怎么做到这一点?
我已经阅读了以下有关Java可用日志框架的文章:http: //michaelandrews.typepad.com/the_technical_times/2011/04/java-logging-reconsidered.html
作者提到使用SLF4J和Logback.这与直接使用Logback有什么不同.如果直接使用Logback而不是使用SLF4J,那会不会更好,因为Logback是在SLF4J之上构建的.