我正在使用SLF4J和Log4J.我应该将记录器设置为哪些访问级别?
static final Logger logger = LoggerFactory.getLogger(ClassName.class);
Run Code Online (Sandbox Code Playgroud) 我正在尝试通过Java中的Hibernate帮助将数据保存到数据库.但当 ?运行代码,?有很多问题.任何人都可以帮助我吗?谢谢...
package org.ultimania.model;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class Test {
public static void main(String[] args) {
Session session = null;
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
session = sessionFactory.openSession();
Transaction transaction = session.getTransaction();
BusinessCard card = new BusinessCard();
card.setId(1);
card.setName("Özgür");
card.setDescription("Ac?klama");
try{
transaction.begin();
session.save(card);
transaction.commit();
} catch(Exception e){
e.printStackTrace();
}
finally{
session.close();
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题 :
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" java.lang.NoClassDefFoundError: …Run Code Online (Sandbox Code Playgroud) 我已经像这样配置了SiftingAppender:
<appender name="FILE" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<key>context</key>
<defaultValue>global</defaultValue>
</discriminator>
<!-- sift into different files -->
<sift>
<appender name="FILE-${context}" class="ch.qos.logback.core.FileAppender">
<file>${logroot}/${context}.log</file>
<encoder>
<pattern>[%d{HH:mm:ss.SSS}] %-5level %logger{36} [%thread]%n%msg%n</pattern>
</encoder>
</appender>
</sift>
</appender>
Run Code Online (Sandbox Code Playgroud)
现在,我想RollingFileAppender在其中,但仅用于不带的消息context。那些context通常不是很大,但是全球范围是。
这可能吗?
我是jUnit和Selenium的新手.目前,我们正在我们的项目中进行POC评估工具的适用性.
我们的一个关键要求是在断言失败的情况下使用友好消息并验证失败.目标是通过手动测试人员对这些用户进行直观分析.
我正在尝试使用SLF4J来记录用户友好消息的INFO消息.
我面临的挑战是 - 当断言失败时,如何传递自定义消息而不是jUnit默认消息?
例如,我想摆脱以下默认断言失败消息
预期"健康AZ"匹配glob"Health A-ZZ"(已将glob变为regexp"Health A-ZZ")
并将其框定为
菜单项的标题与预期值"Health A-ZZ"不匹配.看到的实际价值是"健康AZ"
问题1 - 有没有办法用我想要的方式覆盖默认消息?问题2 - 我可以将变量参数传递给消息并使其成为动态消息吗?
示例代码:
try {
assertEquals("Health A-ZZ", selenium.getText("//div[@id='topnav']/ul/li[2]/a"));
logger.info("SUCCESS: Menu Item {} title verification Passed. EXPECTED : A-Z and Actual: {}",mainCounter, selenium.getText("//div[@id='topnav']/ul/li[2]/a"));
}
catch (AssertionError e) {
logger.error("FAILURE: Menu Item {} title verification Failed. EXPECTED : A-ZZ and Actual: {}",mainCounter, selenium.getText("//div[@id='topnav']/ul/li[2]/a"));
}
Run Code Online (Sandbox Code Playgroud)
我得到两次打印的assertFailure消息..一个在上面的catch块中有错误消息,另一个是默认的junit assertfailre消息,就像我上面提到的那个我想要摆脱的消息.
提前致谢.
此致,普拉卡什
我们在当前项目中使用log4j + commons-logging.现在我们从log4j的到的logback mirgrating,所以我们只使用替换log4j.properties用logback.xml或我们必须转换到log4j的SLF4J?
我在grails 2.3.4中使用slf4j"DailyRollingFileAppender".
当我尝试使用变量作为"文件"参数的一部分时,grails总是在应用程序启动时打印一些错误日志.
但我的应用程序的日志消息可以按预期打印到指定的"user-event.log",尽管grails会给我这些错误消息.
下面是我的log4j配置:
log4j = {
// Example of changing the log pattern for the default console appender:
appenders {
console name: 'stdout', layout: pattern(conversionPattern: '%c{2} %m%n')
appender new DailyRollingFileAppender(
name: "userEventLog",
file: "${event.log.dir}/user-event.log",
layout: pattern(conversionPattern: '%m%n'),
datePattern: "'.'yyyy_MM_dd",
threshold: org.apache.log4j.Level.INFO
)
}
info userEventLog: "app.bean.log.UserEventLog"
}
Run Code Online (Sandbox Code Playgroud)
"event.log.dir"变量定义如下:
environments {
development {
// event log dir
event.log.dir = "${userHome}/workspace/app/logs/event"
}
production {
// event log dir
event.log.dir = "/opt/www/app/logs/event"
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序启动时在grails控制台中打印的错误消息是:
| Error log4j:ERROR Property missing when …Run Code Online (Sandbox Code Playgroud) 我正在使用SLF4j的logback来登录我的应用程序.我有一个包含新行字符的字符串.它是字符串值的一部分,但不表示新行.当我打印字符串时,logback将它打印在一个新行中.怎么预防这个?
码:
String str = "george\nmason"
logger.info(str);
Run Code Online (Sandbox Code Playgroud)
回归模式:
<pattern>[%d{dd MMM yyyy HH:mm:ss,SSS}] [%5p] [%X{sid}] [%-20C{0} %25M]:[%-4L] - %m%n</pattern>
Run Code Online (Sandbox Code Playgroud)
预期:
[19 Feb 2015 20:19:27] [ INFO] [] [myClass myMethod]:[52 ] - george\nmason
Run Code Online (Sandbox Code Playgroud)
实际产量:
[19 Feb 2015 20:19:27] [ INFO] [] [myClass myMethod]:[52 ] - george
mason
Run Code Online (Sandbox Code Playgroud) 我写了一个小的Gradle项目,这样我就可以学习如何在同一个项目中一起配置HikariCP和JDBC以及Log4j2.我已将下面的log4j2配置src/main/resources放在我项目的目录中.当我使用我执行项目时,gradle run我收到一条关于不为com.zaxxer.hikari.HikariConfig记录器配置appender的警告.
有人会告诉我我做错了什么吗?
log4j2.xml
<?xml version="1.0" encoding="utf-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="com.zaxxer.hikari.HikariConfig" level="trace">
<AppenderRef ref="Console"/>
</Logger>
<Root level="TRACE">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)
的build.gradle
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'maven'
apply plugin: 'application'
targetCompatibility = 1.8
sourceCompatibility = 1.8
version = '0.0.1.0'
group = 'com.s2d'
mainClassName = "com.s2d.jdbctest.DemoJDBC"
applicationDefaultJvmArgs = ["-Djdbc.drivers=org.apache.derby.jdbc.EmbeddedDriver"]
task wrapper(type: Wrapper) {
gradleVersion = '1.4' …Run Code Online (Sandbox Code Playgroud) 关于分辨率的摘要,我认为我正在处理一个Scala问题,但事实证明Stopwatch和Scala Logging具有私有构造函数,并且我没有调用适当的公共方法来实例化它们。以下gzm0的答案指出了这一点。
尝试使用Guava秒表和Scala日志记录,无论我是在Main中还是在实例化类中创建一个,new Stopwatch()还是new Logger()在Main类中创建此错误,我都将遇到以下错误gradle run:
constructor Logger in class Logger cannot be accessed in class RedBlackTree4150
var loggerInst = new Logger()
constructor Stopwatch in class Stopwatch cannot be accessed in class RedBlackTree4150
var stopWatchInst = new Stopwatch()
Run Code Online (Sandbox Code Playgroud)
如果这是一个重复的这个或这个问题我不知道够不够去实现它。我看了这个问题,但没有一个可接受的答案,我试图(只是为了好玩)将我的构造函数调用中的内容删除了,但没有用。
编写我的第一个Gradle / Scala项目以进行算法分配分析。我想如果我是在Java中,我会问的是静态还是非静态,不知道那是我要处理的问题类型。Scala不是作业的一部分,所以我没有使用作业标签。
这是我的调用方式,程序的第一部分,完整的.scala文件和build.gradle位于Github上
import com.google.common.base.Stopwatch
import com.typesafe.scalalogging.slf4j.Logger
import scala.collection.immutable.TreeMap
import java.util.concurrent.TimeUnit
object Main extends App {
// var rbtree = new RedBlackTree4150(logger, stopWatch)
var rbtree = …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Logback中动态添加追加程序。这是我的代码。
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
PatternLayoutEncoder ple = new PatternLayoutEncoder();
ple.setPattern("%date %level [%thread] %logger{10} [%file:%line] %msg%n");
ple.setContext(lc);
ple.start();
FileAppender<ILoggingEvent> fileAppender = new FileAppender<ILoggingEvent>();
String logFile = "new.log";
fileAppender.setFile(logFile);
fileAppender.setEncoder(ple);
fileAppender.setContext(lc);
fileAppender.start();
ch.qos.logback.classic.Logger logbackLogger =
(ch.qos.logback.classic.Logger)LoggerFactory.getLogger(ModuleMessageHandler.class);
logbackLogger.addAppender(fileAppender);
logbackLogger.setLevel(Level.DEBUG);
logbackLogger.setAdditive(false);
Run Code Online (Sandbox Code Playgroud)
它可以正常运行,但仅适用于添加了追加程序的特定记录器。有没有办法使它适用于应用程序中的所有记录器?我正在寻找一种动态添加和删除附加程序的方法。