我正在使用 java.util.logging 包中的 Java Logger。这就是我当前创建记录器的方式:
FileHandler fileHandler = new FileHandler(filePath, 5242880, 5, true);
fileHandler.setFormatter(new java.util.logging.Formatter() {
@Override
public String format(LogRecord logRecord) {
if(logRecord.getLevel() == Level.INFO) {
return "[INFO " + createDateTimeLog() + "] " + logRecord.getMessage() + "\r\n";
} else if(logRecord.getLevel() == Level.WARNING) {
return "[WARN " + createDateTimeLog() + "] " + logRecord.getMessage() + "\r\n";
} else if(logRecord.getLevel() == Level.SEVERE) {
return "[ERROR " + createDateTimeLog() + "] " + logRecord.getMessage() + "\r\n";
} else {
return "[OTHER " …Run Code Online (Sandbox Code Playgroud) 在用于格式化调试日志的抽象JDK类Formatter中,formatMessage方法被声明为synchronized。
但是,我无法确定为什么会出现这种情况。
显然,人们可以编写非线程安全的重写版本,但我想知道为什么默认实现不是线程安全的。
我目前已经实现了一个java swing应用程序.在该应用程序中,我使用java.util.logging将事物记录到文本文件中.但由于文件非常大,因此很难通过文本文件.
所以我想将日志信息存储到oracle数据库(我用于应用程序)并提供swing接口来访问该表.因此,我将能够在该表中搜索某些日志记录级别,如INFO和SEVERE.有没有办法使用java util包或使用Log4j.请帮忙
我将日志记录级别设置为CONFIG,但是看不到在CONFIG级别写入的消息.我错过了什么?
组态:
Logger logger = java.util.logging.Logger.getLogger("xxx");
logger.setLevel(java.util.logging.Level.CONFIG);
Run Code Online (Sandbox Code Playgroud)
测试:
logger.log(java.util.logging.Level.SEVERE, "severe");
logger.log(java.util.logging.Level.WARNING, "warning");
logger.log(java.util.logging.Level.INFO, "info");
logger.log(java.util.logging.Level.CONFIG, "config");
logger.log(java.util.logging.Level.FINE, "fine");
logger.log(java.util.logging.Level.FINER, "finer");
logger.log(java.util.logging.Level.FINEST, "finest");
Run Code Online (Sandbox Code Playgroud)
输出:
SEVERE: severe
WARNING: warning
INFO: info
Run Code Online (Sandbox Code Playgroud) package firstAOP;
import java.util.logging.Logger;
public class OrderDAO
{
private final static Logger logger = Logger.getLogger(OrderDAO.class.getName());
public boolean saveOrder(Order order)
{
boolean flag =false;
try
{
//functional code
flag = true;
}
catch(Exception e)
{
logger.error(e);
}
return flag;
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我在"logger.error(e)"行中收到错误.这是错误:方法错误()未定义类型Logger
其余的方法如logger.info正在运行.
如果问题不是太多,请告诉我是否正确地声明了记录器.如果我写下会发生什么:
private final static Logger logger = Logger.getLogger(SaveOrder.class.getName());
Run Code Online (Sandbox Code Playgroud)
SaveOrder是同一个包中的另一个类.
我有 java.util.logging 的问题。从一开始一切都很好,但过了一会儿,记录器只是停止将任何数据写入文件,我不知道为什么(没有例外,没有错误)也不知道如何找到这个问题的原因。
我试过谷歌,但没有发现任何类似的问题。
tl,博士; java.util.logging 停止工作,想知道为什么。
我希望从我的应用程序中嵌入的HornetQ的所有日志记录委托给slf4j.不幸的是,任何尝 我已经尝试过了
SLF4JBridgeHandler.install();Log4jLogDelegateFactory("hornetq-configuration.xml"经过<log-delegate-factory-class-name>org.hornetq.integration.logging.Log4jLogDelegateFactory</log-delegate-factory-class-name>)LogDelegate和LogDelegateFactory但无论我做什么,下面的线路都没有抓住:
13.07.2011 17:42:11 org.hornetq.core.logging.impl.JULLogDelegate warn
WARNUNG: AIO wasn't located on this platform, it will fall back to using pure Java NIO. If your platform is Linux, install LibAIO to enable the AIO journal
13.07.2011 17:42:11 org.hornetq.core.logging.impl.JULLogDelegate info
INFO: Using NIO Journal
13.07.2011 17:42:11 org.hornetq.core.logging.impl.JULLogDelegate info
INFO: Started Netty Acceptor version 3.1.5.GA-r1772
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
通常在应用程序中(例如,以Web应用程序为例),我们在启动期间创建了一个记录器实例.它甚至可以是单身,也无所谓.重要的是整个应用程序有1个实例.我们使用java.util.logger
现在,您有来自两个不同用户的两个请求,它们会抛出异常,我们正在记录那些写入日志文件的请求.这些对日志文件的两个不同请求中的写入是否同步?或者我们是否需要明确地同步它们因为我发现在极少数情况下我们得到的日志在tomcat日志文件中的两个请求之间都是混合的?
我并不完全关心这里的因果关系只是两个日志消息的分离.
在LogManager的文档中,以下是Handlers属性的设置:
属性"处理程序".这为处理程序类定义了一个空格或逗号分隔的类名列表,以便在根Logger(名为""的Logger)上加载和注册为处理程序.
属性".handlers".这为处理程序类定义了一个以空格或逗号分隔的类名列表,以便加载和注册为指定记录程序的处理程序.每个类名必须是具有默认构造函数的Handler类.请注意,这些处理程序可能会在首次使用时延迟创建.
由于根记录器的名称是空字符串(""),因此在我看来,下面的两个子句应该是等价的:
handlers = myHandler
.handlers = myHandler
Run Code Online (Sandbox Code Playgroud)
以下是JDK的lib/logging.properties文件中的示例:
handlers= java.util.logging.ConsoleHandler
.level= INFO
Run Code Online (Sandbox Code Playgroud)
我注意到当我尝试枚举根记录器上的处理程序时,会发生奇怪的事情.我怀疑这与LogManager的实现有关,指的是其中一个属性.但是,我想尝试理解我在假设等效性方面是否正确.
澄清一下:我对此问题的目标是了解行为是否应该相同.
我有java.util.logging将输出打印到文件.它工作正常.但是,消息包含中文字符,这些中文字符对应于日志级别和消息记录的时间.
我怎样才能打印英文而不是中文字?
这就是当前消息的样子
11? 08, 2016 8:28:03 ?? mySamples.testing.TestingFile errorFunction
??: Exception: 123
Run Code Online (Sandbox Code Playgroud)