Java有很多框架/ API可以帮助您登录应用程序:
我一直使用log4j库,我发现它大部分时间都足够了,并且当我需要更多控制时可扩展.
任何有过多个框架经验的人都可以分享他的经历吗?从应用程序架构的角度来看,何时更好地使用一个框架而不是另一个框架?为什么我更喜欢一个?
谢谢
Web应用程序服务器希望记录哪些信息,以及为什么?
据我所知
org.apache.commons.logging.Log
Run Code Online (Sandbox Code Playgroud)
是一个抽象其他Logging类提供的功能的接口,同样适用于接口LogFactory.
我想了解的代码有 -
Log auditLogger = LogFactory.getLog(someString);
Run Code Online (Sandbox Code Playgroud)
String someString如何用于标识要生成的LogFactory?如何查看正在使用的Log和LogFactory类的实现?
java logging interface apache-commons apache-commons-logging
使用apache commonds bidimap时,如何处理同步。例如,如果我创建如下所示的地图
BidiMap oneWay = new DualHashBidiMap();
BidiMap theOtherWay = oneWay.inverseBidiMap();
因此,如果我要向上述变量之一添加/访问/删除键/值对,我需要同步两者(线程同步)。如果我需要这样做,似乎我不会通过使用 2 张地图实现此功能而获得任何好处。
感谢您花时间查看此问题。
我正在尝试使用以下示例中显示的代码:
创建DiskFileItem时出现java.lang.NullPointerException
我的Test方法包含以下代码:
final File TEST_FILE = new File("C:/my_text.txt");
final DiskFileItem diskFileItem = new DiskFileItem("fileData", "text/plain", true, TEST_FILE.getName(), 100000000, TEST_FILE.getParentFile());
diskFileItem.getOutputStream();
System.out.println("diskFileItem.getString() = " + diskFileItem.getString());
Run Code Online (Sandbox Code Playgroud)
文本文件存在于此位置,但上述代码中的最后一行不输出文件内容.
知道为什么吗?
NB
以下是打印文件内容:
BufferedReader input = new BufferedReader(new FileReader(TEST_FILE));
String line = null;
while (( line = input.readLine()) != null){
System.out.println(line);
}
Run Code Online (Sandbox Code Playgroud) 我可能错了,但对我来说,我们可以为一个对象重写equals,以便你认为它们有意义地等于.映射中的所有条目都具有不同的键,并且集合中的所有条目都具有不同的值(不是有意义的等于)
但是在使用TreeMap或TreeSet时,您可以提供比较器.我注意到,当提供比较器时,绕过对象的equals方法,并且当比较器返回0时,两个objets被认为是等于.因此,我们有2个对象但是在map keyset或set中,只保留一个.
我想知道是否有可能使用已排序的集合来区分两个不同的实例.
这是一个简单的示例:
public static void main(String[] args) {
TreeSet<String> set = new TreeSet<String>();
String s1 = new String("toto");
String s2 = new String("toto");
System.out.println(s1 == s2);
set.add(s1);
set.add(s2);
System.out.println(set.size());
}
Run Code Online (Sandbox Code Playgroud)
请注意,使用新的String("xxx")会绕过String池的使用,因此s1!= s2.我想知道如何实现比较器,使设置大小为2而不是1.
主要问题是:对于相同String值的两个不同实例,我如何在比较器中返回一些东西!= 0?
请注意,我希望比较器遵守规则:
比较它的两个参数的顺序.返回负整数,零或正整数,因为第一个参数小于,等于或大于第二个参数.实现者必须确保所有x和y的sgn(compare(x,y))== -sgn(compare(y,x)).(这意味着当且仅当compare(y,x)抛出异常时,compare(x,y)必须抛出异常.)
实现者还必须确保关系是传递的:((compare(x,y)> 0)&&(compare(y,z)> 0))表示compare(x,z)> 0.
最后,实现者必须确保compare(x,y)== 0意味着所有z的sgn(compare(x,z))== sgn(compare(y,z)).
通常情况是这样,但并非严格要求(compare(x,y)== 0)==(x.equals(y)).一般来说,任何违反此条件的比较器都应清楚地表明这一事实.推荐的语言是"注意:这个比较器强加了与equals不一致的排序."
我可以用一个技巧:
public int compare(String s1,String s2) {
if s1.equals(s2) { return -1 }
...
}
Run Code Online (Sandbox Code Playgroud)
它似乎工作正常,但自从比较(s1,s2)后规则不受尊重!= -compare(s2,s1)
那么这个问题有什么优雅的解决方案吗?
编辑:对于那些想知道为什么我问这样的事情的人.好奇心比任何现实生活中的问题更重要.
但我已经处于这样的情况,虽然有关此问题的解决方案:
想象一下你有:
class Label {
String label;
}
Run Code Online (Sandbox Code Playgroud)
对于每个标签,您都有一个关联的String值.现在如果你想要一个map,label-> value怎么办?但是现在如果你希望能够拥有两个与地图键相同的标签呢?Ex"label"(ref1) - > …
有什么想法使用哪个Maven存储库来使用Apache公共VFS库?谢谢.
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-vfs2</artifactId>
<version>2.1-SNAPSHOT</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
**编辑**:以下存储库工作正常:
<repository>
<id>commons-vfs</id>
<name>Apache Commons VFS Repository Group</name>
<url>https://repository.apache.org/content/groups/snapshots/</url>
<layout>default</layout>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
Run Code Online (Sandbox Code Playgroud) 创建了一个简单的Apache Commons Email对象并进行编译.已导入:import org.apache.commons.mail._并且javax.mail.internet.MimeMessage还执行了以下操作:
def sendVerification(user: User) = {
val email = new SimpleEmail()
email.setHostName("smtp.sendgrid.net")
email.setSmtpPort(465)
email.setAuthenticator(new DefaultAuthenticator("user", "pass"))
email.setSSLOnConnect(true)
email.setFrom("Community Admin <admin@domain.com>")
email.setSubject("TestMail")
email.setMsg("""Welcome %s!
Thanks for signing up. This email is to confirm your email address.
Cheers,
Admin Team
""" format user.firstName)
email.addTo(user.email)
email.send()
}
Run Code Online (Sandbox Code Playgroud)
错误如下:
[error] C:\Users\path\to\AccountService\models\User.scala:43: object mail is not a member of package javax
[error] import javax.mail.internet.MimeMessage
[error] ^
[error] error while loading Email, Missing dependency 'class javax.mail.internet.MimeMessage', required by C:\Users\path\lib\commons-email-1.2.jar(org/apache/commons/mail/Email.class) …Run Code Online (Sandbox Code Playgroud) 我正在使用apache commons daemon工具Procrun将java命令行工具安装为Windows服务.
java工具在运行期间在控制台上显示大量内容.守护进程工具会自动将任何sysout记录到日志文件中.只要服务正在运行,就无法删除此文件.
问题:我的服务和应用程序几乎不应该重新启动.这导致StdOutput每月几百GB 的守护程序日志文件,我只能通过先停止应用程序来手动清除.
问题:是否可以禁用此服务日志记录?
这是一个简单的单元测试来说明我遇到的问题。
package mytest;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import org.apache.commons.lang3.time.FastDateFormat;
import org.junit.Test;
import static org.junit.Assert.*;
public class DateTests {
private static final String DATE_VALUE = "2016-03-11T15:47:02.123Z";
private static final String PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
@Test
public void utcTest() throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(PATTERN);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = sdf.parse(DATE_VALUE)
FastDateFormat fdf = FastDateFormat.getInstance(PATTERN);
assertEquals(DATE_VALUE, fdf.format(date));
}
}
Run Code Online (Sandbox Code Playgroud)
我的计算机处于中部时间,这意味着当我运行此代码时,断言失败,因为fdf将日期格式化为上午 9 点而不是下午 3 点。我怎么能告诉它在 UTC 中格式化东西呢?
所以我有一个项目,我使用Spring-Data-Redis来缓存一些数据。该Spring-Data-Redis是用bean的配置设置与Jedis。
我寻找JedisPoolConfig可以修改的参数来控制我的缓存和应用程序的行为。
我想知道属性的用途,blockWhenExhausted,它是可配置属性的一部分。据说默认值是true,这个默认值会调用什么行为?如果将该值更改为false,这将带来什么行为?