我有一些关于日志记录的问题,更具体地说是有关设置和确保它有效的问题.
我正在做的项目将使用Wicket,Spring和Hibernate.我知道Wicket和Hibernate使用Simple Logging Facade for Java(SL4J),Spring正在使用Apache Commons的日志记录组件.
他们会幸福地共存吗?我以为我会将log4j与SL4J和Apache commons的日志记录组件一起使用,你认为这是个好主意吗?
我可以将它们全部设置为将记录数据输出到公共文件中吗?或者我应该使用单独的文件?或者我应该将日志消息存储在数据库中?(我宁愿没有,因为我发现文本文件上的grepping等非常方便.)
对于Spring,我想我需要某种配置文件用于Apache Commons日志记录组件以及我指导它使用log4j?
当我设置它们时,我想看到一切正常我将日志记录级别设置为INFO,因为它相当确定所有三个框架都在该模式下输出一些信息?还是有更好的方法来确定?
我的最后一个问题.在我刚开始的项目中,您是否建议我使用SL4J进行自己的日志记录?(我以为我会直接使用log4j,但那是在我学习更多关于日志记录之前的事情,而且很多值得尊敬的库似乎选择了桥/门面的路径来满足他们的日志记录需求.如果它在没有添加的情况下获得我们的灵活性成本没有理由不这样做.)
我期待着听到更多关于你如何进行伐木的信息.这对我来说是一个新领域,我渴望提升自己.
我必须用Java实现IMAP客户端.
使用Apache Commons Net库有哪些优势?它是否使实现更健壮,更灵活?
我如何处理返回值,它总是产生字符串.
例如:
public static void main(String[] args) throws Exception {
IMAPClient client = new IMAPClient();
client.connect(SERVER);
client.login(USERNAME, PASSWORD);
client.select("INBOX");
client.fetch("1", "body[header]");
}
Run Code Online (Sandbox Code Playgroud)
我们可以将输出定向到字符串
client.addProtocolCommandListener(new PrintCommandListener(System.out, true));
Run Code Online (Sandbox Code Playgroud)
但是,如何将文件夹列表作为文件夹实例而不是纯字符串输出?
我正在使用Apache Commons CLI来处理Java中的命令行参数.
我已经声明了a和b选项,我可以使用它来访问该值CommandLine.getOptionValue().
Usage: myapp [OPTION] [DIRECTORY]
Options:
-a Option A
-b Option B
Run Code Online (Sandbox Code Playgroud)
如何声明和访问DIRECTORY变量?
我试图使用'流'Apache Commons File Upload API上传大文件.
我使用Apache Commons File Uploader而不是默认的Spring Multipart上传器的原因是当我们上传非常大的文件大小(~2GB)时它失败了.我在一个GIS应用程序上工作,这种文件上传很常见.
我的文件上传控制器的完整代码如下:
@Controller
public class FileUploadController {
@RequestMapping(value="/upload", method=RequestMethod.POST)
public void upload(HttpServletRequest request) {
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (!isMultipart) {
// Inform user about invalid request
return;
}
//String filename = request.getParameter("name");
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload();
// Parse the request
try {
FileItemIterator iter = upload.getItemIterator(request);
while (iter.hasNext()) {
FileItemStream item = iter.next();
String name = item.getFieldName();
InputStream stream = item.openStream();
if …Run Code Online (Sandbox Code Playgroud) 使用是否有任何优势
StringUtils.isBlank(str)
Run Code Online (Sandbox Code Playgroud)
来自Apache commons-lang.
VS
Strings.isNullOrEmpty(String string)
Run Code Online (Sandbox Code Playgroud)
来自Google Guava?
我想在Java项目中使用后替换数百个它们:
if(str == null || str.isEmpty())
Run Code Online (Sandbox Code Playgroud)
Guava的isNullOrEmpty似乎是我项目中上述用法的直接替代品.
但是,基于我对SO问题的阅读,更多人似乎使用了Apache的isBlank方法.
唯一的区别似乎是除了检查字符串是空还是空之外StringUtils.isBlank(str) 还检查空格.
通常,检查字符串是否为空白或者在代码中产生的结果与Guava更简单的检查相比是一个好主意?
我有一个实体:
public class Entity
{
private long id;
private String data;
public long getId() {
return id;
}
public String getData() {
return data;
}
}
Run Code Online (Sandbox Code Playgroud)
和一组实体:
Collection<Entity> entities= ...
Run Code Online (Sandbox Code Playgroud)
找到Collection<Long>所有ID 的最有效方法是什么entities?
我想在我的Android应用程序中以语音方式比较字符串.但这里的特例是,我想比较用英语写的印度语单词.例如,我想检查"Edhu""Adhu""Yethu"在语音上是否相等,它们在泰米尔语中都是相同的.但是使用英文脚本来写印度语的人使用不同的拼写来表达这个词.在这种情况下如何比较单词?
我试过了Levenshtein.但我不知道如何将它返回的数字转换为相等.
我尝试了Soundex,当这个词的第一个字母发生变化时,Soundex代码就不一样了.但它能够找出类似的声音部分.我不明白它是如何工作的.
soundex.encode("Yethu") (soundex.encode("Edhu")) (soundex.encode("adhu"))
Y300 E300 A300
Run Code Online (Sandbox Code Playgroud) 我在Tomcat 7上开发webapp.在我的本地版本的Tomcat 上一切正常,但是当我在生产服务器上部署它时,它会抛出这个异常.
java.lang.VerifyError: (class: org/apache/commons/logging/impl/Log4JLogger, method: fatal signature: (Ljava/lang/Object;Ljava/lang/Throwable;)V) Incompatible object argument for function call
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2595)
at java.lang.Class.getConstructor0(Class.java:2895)
at java.lang.Class.getConstructor(Class.java:1731)
at org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:410)
at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:529)
at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:235)
at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:209)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351)
at org.apache.fop.apps.FopFactory.<clinit>(FopFactory.java:68)
at cz.soma.tomcat.generator.DokumentaceUtils.createPdfDocument(DokumentaceUtils.java:818)
at cz.soma.tomcat.generator.FileFactory.createPdfDocument(FileFactory.java:58)
at cz.soma.tomcat.generator.Generator.doPost(Generator.java:111)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
Run Code Online (Sandbox Code Playgroud)
当我尝试FopFactory.newInstance();(来自Apache FOP 1.0)时抛出错误.之后,它试图LogFactory.getLog(FopFactory.class);.它logClass.getConstructor(logConstructorSignature);被称为,其中logConstructorSignature包含一个String.class.(至少在我的本地机器上)
try …Run Code Online (Sandbox Code Playgroud) 我正在编写一个Java应用程序,它接受使用Apache Commons CLI和GnuParser处理的命令行参数.由于没有兴趣进入的原因,我希望它默默地忽略未知的命令行选项而不是抛出ParseException,但我没有看到这样做的方法.我看到GnuParser.parse()上有一个stopAtNonOption布尔选项,但我想要的更像ignoreAtNonOption,它会在遇到未知令牌后继续处理选项.
我可以实现我自己的解析器来完成这个,但我很惊讶没有内置这个功能,所以我想我会在走这条路之前检查一下.
我正在谈论的示例代码:
try {
CommandLine commandLine = parser.parse(options, args);
// stopAtNonOption set to true (below) is also not what I want
// CommandLine commandLine = parser.parse(options, args, true);
} catch (ParseException e) {
LOG.error("error parsing arguments", e);
throw new RuntimeException(e);
}
Run Code Online (Sandbox Code Playgroud) 有没有办法实现安全的FTP org.apache.commons.net.ftp.FTPClient?
如果没有,Java的其他选项有哪些?
apache-commons ×10
java ×9
guava ×2
android ×1
apache-fop ×1
collections ×1
email ×1
ftp ×1
ftp-client ×1
imap ×1
jakarta-mail ×1
log4j ×1
logging ×1
phonetics ×1
sftp ×1
slf4j ×1
soundex ×1
spring ×1
spring-boot ×1
string ×1
tomcat7 ×1