Log4j doğru şekilde nasıl başlatılır?


280

Uygulamama log4j ekledikten sonra, uygulamamı her yürüttüğümde aşağıdaki çıktıyı alıyorum:

log4j: WARN Kaydedici için hiçbir ek bulunamadı (slideselector.facedata.FaceDataParser).
log4j: UYARI Lütfen log4j sistemini doğru şekilde başlatın.

Bu bir yapılandırma dosyasının eksik olduğu anlamına geliyor. Bu yapılandırma dosyası nerede bulunmalı ve iyi bir başlangıç ​​içeriği nedir?

Bir masaüstü uygulaması geliştirmek için düz java kullanıyorum. Yani hiçbir web sunucusu vb ...


49
benim gibi tüm maven çocuklar için: koymak log4j.properties src / main / resources !!
Karussell


Log4j'in kısa el kitabını gözden geçirmek çok yararlı: logging.apache.org/log4j/1.2/manual.html
Sa'ad

Yanıtlar:


278

Log4jvarsayılan olarak sınıf yolunda log4j.propertiesveya log4j.xmlsınıfyolunda bir dosya arar .

Burada açıklandığı gibi sistem özelliklerini ayarlayarak kendini başlatmak için hangi dosyayı kullandığını kontrol edebilirsiniz ("Varsayılan Başlatma Yordamı" bölümünü ).

Örneğin:

java -Dlog4j.configuration=customName ....

log4jSınıf yolunda customName adlı bir dosya aramaya neden olur .

Sorun yaşıyorsanız log4j.debug'u açmayı yararlı buluyorum:

-Dlog4j.debug

System.out'a, kendisini başlatmak için hangi dosyayı kullandığını, hangi günlüklerin / ekleyicilerin yapılandırıldığını ve nasıl vb.

Yapılandırma dosyası bir java özellikleri dosyası veya bir xml dosyası olabilir. Aşağıda log4j intro dokümantasyon sayfasından alınan özellikler dosya formatına bir örnek verilmiştir :

log4j.rootLogger=debug, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

43
Bu nedenle, yapılandırma dosyasını bir sınıfyolunda olmayan bir dosyadan yüklemek için şunu yapmalısınız: -Dlog4j.configuration = dosya: / c: /my/folder/log4j.properties aslında bir URL.
bbcooper

15
belki birinin yararlı bulacağı küçük bir ipucu: Ayrıca , kodda ilgili özelliği etkinleştirerek log4j hata ayıklayıcısını açabilirsiniz - System.setProperty ("log4j.debug", "");
XXL

Nereye koydun java -Dlog4j.configuration=customName? Project / Preferences / Run / Debug Settings'i denedim, bazı yapılandırmalar seçtim, Edit, Arguments sekmesini, VM argümanlarını tıkladım. CustomName bir .xml uzantısı içeriyor mu?
Noumenon

2
Birçok varyasyonu denedikten sonra bu işe yaradı: -Dlog4j.configuration = dosya: /// C: /mydir/subdir/log4j.properties Yukarıdaki örnek: -Dlog4j.configuration = dosya: / c: /my/folder/log4j.properties başarısız oldu.
user1062589

1
Gerçekten kılavuzların -Dlog4j.debug, yapılandırmanızda hata ayıklamaya yardımcı olabilecek daha fazla vurgu yapmasını diliyorum .
Sridhar Sarnobat

239

Log4j'yi doğru şekilde kurmak "gerçek" projeler için mükemmel olsa da, örneğin yeni bir kütüphaneyi test ediyorsanız hızlı ve kirli bir çözüm isteyebilirsiniz.

Öyleyse statik yönteme çağrı

org.apache.log4j.BasicConfigurator.configure();

konsola temel günlük kaydını kuracak ve hata iletileri kaybolacaktır.


Merhaba a3. 14_Infinity bunu nerede kullanmalıyım? anlayamıyorum. ben bile bu sorun için daha fazla cevap sevk var. lütfen bana yardım et
Ravi Potnuru

5
Bunun varsayılan olarak Arzu edilmeyebilecek hata ayıklama düzeyi günlüğe kaydedileceğini unutmayın. Bunu şu şekilde değiştirebilirsiniz:Logger.getRootLogger().setLevel(Level.INFO);
forresthopkinsa

Uyarılar sadece ortadan kalkmadı, aynı zamanda konsol penceresinde bazı kullanışlı hata ayıklama bilgileri çıktısı aldım
Baked Inhalf

2
ironik ... üretim durumunda kullanıyoruz
aswzen

25

Her şeyden kurtulursanız (örneğin testlerde iseniz)

org.apache.log4j.BasicConfigurator.configure(new NullAppender());

20

Gereğince Apache Log4j SSS sayfası :

Neden "Kaydedici için hiçbir ek bulunamadı" ve "Lütfen log4j'yi doğru şekilde yapılandırın" hakkında bir uyarı görüyorum?

Bu varsayılan yapılandırma oluşur dosyaları log4j.propertiesve log4j.xmlbulunamayan ve uygulama gerçekleştirdiği hiçbir açık yapılandırması. log4jkullandığı Thread.getContextClassLoader().getResource()varsayılan yapılandırma dosyaların bulunmasını ve doğrudan dosya sistemini kontrol etmez. Log4j.properties dosyasını yerleştirmek için uygun konumu bilmek veya log4j.xmlkullanılan sınıf yükleyicinin arama stratejisini anlamayı gerektirir.log4jkonsola veya dosya sistemine çıkış bazı ortamlarda yasaklanmış olabileceğinden, varsayılan bir yapılandırma sağlamaz.

Temelde uyarı yok appenders logger için bulunamadı kullandığınız olduğunu araçlarınınlog4j günlük sistemini , ancak yapılandırma dosyanıza herhangi bir Ek (örneğin FileAppender, ConsoleAppender, SocketAppender, SyslogAppender vb.) Eklemediğiniz anlamına gelir. eksik.

Log4j'yi yapılandırmanın üç yolu vardır: özellikler dosyasıyla ( log4j.properties), XML dosyasıyla ve Java kodu ( rootLogger.addAppender(new NullAppender());) ile.

log4j.properties

Var olan bir özellik dosyanız varsa (örn. Solr'ı yüklerken), bu dosyayı sınıfyolu dizininize yerleştirmeniz gerekir.

sınıf yolu

Linux'ta sınıf yolu değerinizi nasıl belirleyeceğinizle ilgili bazı komut önerileri şunlardır:

$ echo $CLASSPATH
$ ps wuax | grep -i classpath
$ grep -Ri classpath /etc/tomcat? /var/lib/tomcat?/conf /usr/share/tomcat?

veya Java dan: System.getProperty("java.class.path").

Log4j XML

XML biçiminde log4j için temel bir XML yapılandırma dosyası aşağıdadır:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
    <param name="Target" value="System.out"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/> 
    </layout> 
  </appender> 

  <root> 
    <priority value ="debug" /> 
    <appender-ref ref="console" /> 
  </root>
  
</log4j:configuration>

erkek kedi

Tomcat kullanıyorsanız, log4j.propertiesiçine: /usr/share/tomcat?/lib/veya /var/lib/tomcat?/webapps/*/WEB-INF/lib/klasörünüzü yerleştirebilirsiniz.

Solr

Referans için Solr varsayılan log4j.propertiesdosyası şöyle görünür:

#  Logging level
solr.log=logs/
log4j.rootLogger=INFO, file, CONSOLE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n

#- size rotation with log cleanup.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=4MB
log4j.appender.file.MaxBackupIndex=9

#- File to log to and log format
log4j.appender.file.File=${solr.log}/solr.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n

log4j.logger.org.apache.zookeeper=WARN
log4j.logger.org.apache.hadoop=WARN

# set to INFO to enable infostream log messages
log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF

Log4j neden özelliklerimi bir J2EE veya WAR uygulamasında bulamıyor?

Kısa cevap: log4j sınıfları ve özellikler dosyası aynı sınıf yükleyicinin kapsamında değildir.

Log4j Class.forName()sınıfları yüklemek için yalnızca varsayılan mekanizmayı kullanır . Kaynaklar benzer şekilde ele alınır. Daha java.lang.ClassLoaderfazla bilgi için belgelere bakın.

Bu nedenle, sorun yaşıyorsanız, sınıfı veya kaynağı kendiniz yüklemeyi deneyin. Eğer bulamazsanız, ikisi de log4j olmaz. ;)


Ayrıca bakınız:


12

Log4j.properties dosyanızın konumunu java uygulamanızın içinden şunları kullanarak ayarlayabilirsiniz:

org.apache.log4j.PropertyConfigurator.configure(file/location/log4j.properties)

Daha fazla bilgiyi burada bulabilirsiniz: https://logging.apache.org/log4j/1.2/manual.html


1
Hmmm, sınıf bulunamadı. importKod tamamlama o kadar güvenilir olmadığı için bir ifade her zaman yararlıdır.
Martin

11

Kök ekleyicisi olan bir log4j.properties veya log4j.xml dosyasını bulun ve sınıf yolunuza koyun.

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.rootLogger=debug, stdout

konsola giriş yapacaktır. Daha sonra araştırabilmeniz için bir dosyaya giriş yapmayı tercih ederim.

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.maxFileSize=100KB
log4j.appender.file.maxBackupIndex=5
log4j.appender.file.File=test.log
log4j.appender.file.threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=debug,file

ayrıntılı kayıt uygulamaları için 100KB'nin özellikle hata ayıklama için genellikle 1MB veya 10MB'a çıkarılması gerekir.

Şahsen ben birden çok günlükleri ayarladım ve kök kaydediciyi hata ayıklama yerine uyarı veya hata seviyesine ayarladım.


9

Özellik dosyasını sınıf yoluna koymadan yapmanın başka bir yolu, özelliği doğrudan java kodundan ayarlamaktır. İşte örnek kod.

public class Log4JSample {

public static void main(String[] args) {
    Properties properties=new Properties();
    properties.setProperty("log4j.rootLogger","TRACE,stdout,MyFile");
    properties.setProperty("log4j.rootCategory","TRACE");

    properties.setProperty("log4j.appender.stdout",     "org.apache.log4j.ConsoleAppender");
    properties.setProperty("log4j.appender.stdout.layout",  "org.apache.log4j.PatternLayout");
    properties.setProperty("log4j.appender.stdout.layout.ConversionPattern","%d{yyyy/MM/dd HH:mm:ss.SSS} [%5p] %t (%F) - %m%n");

    properties.setProperty("log4j.appender.MyFile", "org.apache.log4j.RollingFileAppender");
    properties.setProperty("log4j.appender.MyFile.File", "my_example.log");
    properties.setProperty("log4j.appender.MyFile.MaxFileSize", "100KB");
    properties.setProperty("log4j.appender.MyFile.MaxBackupIndex", "1");
    properties.setProperty("log4j.appender.MyFile.layout",  "org.apache.log4j.PatternLayout");
    properties.setProperty("log4j.appender.MyFile.layout.ConversionPattern","%d{yyyy/MM/dd HH:mm:ss.SSS} [%5p] %t (%F) - %m%n");

    PropertyConfigurator.configure(properties);

    Logger logger = Logger.getLogger("MyFile");

    logger.fatal("This is a FATAL message.");
    logger.error("This is an ERROR message.");
    logger.warn("This is a WARN message.");
    logger.info("This is an INFO message.");
    logger.debug("This is a DEBUG message.");
    logger.trace("This is a TRACE message.");
}

}


6

SetLevel () öğesini kullanarak günlük düzeyini ayarlayabilirsiniz .

Seviyeler, programın görüntülemesini istediğiniz bilgi türlerini kolayca ayarlamak için kullanışlıdır.

Örneğin:

Logger.getRootLogger().setLevel(Level.WARN); //will not show debug messages

Olası seviyeler kümesi:

İZ,

DEBUG,

BİLGİ,

, WARN

HATA ve

ÖLÜMCÜL

Göre açılıyor Hizmetler kılavuzuna


6
import org.apache.log4j.BasicConfigurator;

Bu yöntemi ara

BasicConfigurator.configure();

Özellikle, bu yazıyor System.out. Args olmayan yapılandırma yöntemi için javadoc diyor ki:Add a ConsoleAppender that uses PatternLayout using the PatternLayout#TTCC_CONVERSION_PATTERN and prints to System.out to the root category.
sunil

3

Etkinleştirmek için -Dlog4j.debug, ben gidip Sistemi, Gelişmiş sistem ayarları, Çevre değişkenleri ve set sistem değişkeni _JAVA_OPTIONSiçin -Dlog4j.debug.


1

Ne geliştiriyorsun? Apache Tomcat mi kullanıyorsunuz?

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyyMMdd HH:mm:ss.SSS} [[%5p] %c{1} [%t]] %m%n

Benim bir Java uygulamasında böyle bir özellik var.


1

Log4j'm aşağıdaki özellik dosyasıyla düzeltildi:

## direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.rootLogger=debug, stdout
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.maxFileSize=100KB
log4j.appender.file.maxBackupIndex=5
log4j.appender.file.File=./logs/test.log
log4j.appender.file.threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=debug,file

Merhaba, hata ayıklamak için konsola ve hata dosyasını dosyaya nasıl ekleyebilirim?
JhonArias

1

Ben dosya oluşturduk log4j.properties içinde kaynaklara yanındaki klasör hibernate.cfg.xml dosyası ve aşağıdaki metinle doldurdum:

log4j.rootLogger=INFO, CONSOLE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{1}:%L] %m%n

şimdi uyarı ve hatalardan kurtuldum


1

Basitçe, src / main / assembly klasörü altında log4j.properties dosyasını oluşturun. Günlük iletilerinin konsolda veya dosyada gösterilmesini isteyip istemediğinize bağlı olarak. Aşağıdaki mesajlar konsolda gösterilecektir.

# Root logger option
log4j.rootLogger=INFO, stdout

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

1

Daha önce açıklandığı gibi 2 yaklaşım vardır

Birincisi, bu satırı ana yönteminize eklemektir:

BasicConfigurator.configure();

İkinci yaklaşım, bu standart log4j.properties dosyasını sınıf yolunuza eklemektir:

İkinci yaklaşımı uygularken dosyayı doğru şekilde başlattığınızdan emin olmanız gerekir.

Örneğin.

Properties props = new Properties();

props.load(new FileInputStream("log4j property file path"));

props.setProperty("log4j.appender.File.File", "Folder where you want to store log files/" + "File Name");

Günlük dosyalarını saklamak için gerekli klasörü oluşturduğunuzdan emin olun.


1

Log4j: yapılandırma düğümünde hata ayıklama niteliğini true olarak ayarlamaya çalışın.

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">

Log4j ortamını yapılandırmak için yapılandırma dosyası okunduğunda ve kullanıldıkça bilgileri yazdırır. Sorununuzu çözmek için daha fazla ayrıntıya sahip olabilirsiniz.


Kimse biliyor mu? Aynı seçenek, çalışma zamanı başlangıcında -Dlog4j.debug = true ayarına geri dönmeden özellik yapılandırmasından da kullanılabilir mi?
JFK

1

Günlük Kaydı API'si - Java Günlük Kaydı API'sı, son kullanıcılar, sistem yöneticileri, saha servis mühendisleri ve yazılım geliştirme ekipleri tarafından analiz için uygun günlük raporları üreterek müşteri sitelerinde yazılım servis ve bakımını kolaylaştırır. Günlük API'leri, uygulama veya platformdaki güvenlik hataları, yapılandırma hataları, performans darboğazları ve / veya hatalar gibi bilgileri yakalar. Çekirdek paket, belleğe, çıktı akışlarına, konsollara, dosyalara ve soketlere düz metin veya XML biçimli günlük kayıtları dağıtma desteği içerir. Ayrıca, günlüğe kaydetme API'leri, ana bilgisayar işletim sisteminde zaten var olan günlüğe kaydetme hizmetleriyle etkileşime girebilir.

Java.util.logging paketi «Java platformunun temel günlük oluşturma olanaklarının sınıflarını ve arabirimlerini sağlar.


Log4j 1.x «log4j, Java tabanlı popüler bir günlük yardımcı programıdır. Log4j, birçok yazarın çalışmalarına dayanan açık kaynaklı bir projedir. Geliştiriciye, Appenders [konsol, dosyalar, DB ve e-posta] kullanarak hangi günlük deyimlerinin çeşitli konumlara gönderileceğini denetlemesine izin verir. Harici yapılandırma dosyaları kullanılarak çalışma zamanında tamamen yapılandırılabilir.

Log4j'nin üç ana bileşeni vardır:

  • Kaydediciler - [KAPALI, FATAL, HATA, UYARI, BILGI, HATA AYIKLAMA, TRACE]
  • Appenders

  • Düzenler - [PatternLayout, EnhancedPatternLayout]

Yapılandırma dosyaları XML veya Java özellikleri (anahtar = değer) biçiminde yazılabilir.

  1. log4j_External.properties «Java özellikleri (anahtar = değer) biçimi

Bir açılış " $ { " ile kapanış " } " arasındaki dize bir anahtar olarak yorumlanır. Değiştirilen değişkenin değeri, bir sistem özelliği olarak veya yapılandırma dosyasının kendisinde tanımlanabilir. Appender'a özgü seçenekleri belirleyin. «Log4j.appender.appenderName.option = değer, Adlandırılmış her appender için Düzenini yapılandırabilirsiniz.

log4j.rootLogger=INFO, FILE, FILE_PER_SIZE, FILE_PER_DAY, CONSOLE, MySql

#log.path=./
log.path=E:/Logs

# https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html
# {%-5p - [WARN ,INFO ,ERROR], %5p 0- [ WARN, INFO,ERROR]}
log.patternLayout=org.apache.log4j.PatternLayout
log.pattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n

# System.out | System.err
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.err
log4j.appender.CONSOLE.layout=${log.patternLayout}
log4j.appender.CONSOLE.layout.ConversionPattern=${log.pattern}

# File Appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log.path}/logFile.log
#log4j:ERROR setFile(null,false) call failed. - Defaults setFile(null,true)
#log4j.appender.FILE.Append = false
log4j.appender.FILE.layout=${log.patternLayout}
log4j.appender.FILE.layout.ConversionPattern=${log.pattern}

# BackUP files for every Day.
log4j.appender.FILE_PER_DAY=org.apache.log4j.DailyRollingFileAppender
# [[ Current File ] - logRollingDayFile.log ], { [BackUPs] logRollingDayFile.log_2017-12-10, ... }
log4j.appender.FILE_PER_DAY.File=${log.path}/logRollingDayFile.log
log4j.appender.FILE_PER_DAY.DatePattern='_'yyyy-MM-dd
log4j.appender.FILE_PER_DAY.layout=${log.patternLayout}
log4j.appender.FILE_PER_DAY.layout.ConversionPattern=${log.pattern}

# BackUP files for size rotation with log cleanup.
log4j.appender.FILE_PER_SIZE=org.apache.log4j.RollingFileAppender
# [[ Current File ] - logRollingFile.log ], { [BackUPs] logRollingFile.log.1, logRollingFile.log.2}
log4j.appender.FILE_PER_SIZE.File=${log.path}/logRollingFile.log
log4j.appender.FILE_PER_SIZE.MaxFileSize=100KB
log4j.appender.FILE_PER_SIZE.MaxBackupIndex=2
log4j.appender.FILE_PER_SIZE.layout=${log.patternLayout}
log4j.appender.FILE_PER_SIZE.layout.ConversionPattern=${log.pattern}

# MySql Database - JDBCAppender
log4j.appender.MySql=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.MySql.driver=com.mysql.jdbc.Driver
log4j.appender.MySql.URL=jdbc:mysql://localhost:3306/automationlab
log4j.appender.MySql.user=root
log4j.appender.MySql.password=
log4j.appender.MySql.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.MySql.layout.ConversionPattern=INSERT INTO `logdata` VALUES ('%p', '%d{yyyy-MM-dd HH:mm:ss}', '%C', '%M', '%L', '%m');
#log4j.appender.MySql.sql=INSERT INTO `logdata` VALUES ('%p', '%d{yyyy-MM-dd HH:mm:ss}', '%C', '%M', '%L', '%m');

# Direct log events[Messages] to MongoDB Collection - MongoDbAppender
log.mongoDB.hostname=loalhost
log.mongoDB.userName=Yash777
log.mongoDB.password=Yash@123
log.mongoDB.DB=MyLogDB
log.mongoDB.Collection=Logs

log4j.appender.MongoDB=org.log4mongo.MongoDbAppender
log4j.appender.MongoDB.hostname=${log.mongoDB.hostname}
log4j.appender.MongoDB.userName=${log.mongoDB.userName}
log4j.appender.MongoDB.password=${log.mongoDB.password}
log4j.appender.MongoDB.port=27017
log4j.appender.MongoDB.databaseName=${log.mongoDB.DB}
log4j.appender.MongoDB.collectionName=${log.mongoDB.Collection}
log4j.appender.MongoDB.writeConcern=FSYNCED

Tablo için MySQL Tablosu yapısı logdata

CREATE TABLE IF NOT EXISTS `logdata` (
  `Logger_Level` varchar(5) COLLATE utf8_unicode_ci NOT NULL,
  `DataTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `ClassName` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  `MethodName` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `LineNumber` int(10) NOT NULL,
  `Message` text COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
  1. log4j_External.xml «XML log4j: genel DTD dosyasıyla yapılandırma
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE log4j:configuration PUBLIC
  "-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration debug="false">

    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <param name="target" value="System.out" />
        <param name="threshold" value="debug" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" />
        </layout>
    </appender>

    <appender name="FILE" class="org.apache.log4j.FileAppender">
        <param name="file" value="E:/Logs/logFile.log" />
        <param name="append" value="false" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" />
        </layout>
    </appender>

    <appender name="FILE_PER_SIZE" class="org.apache.log4j.RollingFileAppender">
        <param name="file" value="E:/Logs/logRollingFile.log" />
        <param name="immediateFlush" value="true"/>
        <param name="maxFileSize" value="100KB" />
        <param name="maxBackupIndex" value="2"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" />
        </layout>
    </appender>

    <appender name="FILE_PER_DAY" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="file" value="E:/Logs/logRollingDayFile.log" />
        <param name="datePattern" value="'_'yyyy-MM-dd" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n"/>
        </layout>
    </appender>

    <root>
        <priority value="info" />
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
        <appender-ref ref="FILE_PER_SIZE" />
        <appender-ref ref="FILE_PER_DAY" />
    </root>
</log4j:configuration>

  1. Java programındaki URL'den Log4j Yapılandırması:

Harici bir dosyayla özel bir yapılandırma belirtmek için, kullanılan sınıfın Yapılandırıcı arabirimini uygulaması gerekir .

varsayılan yapılandırma dosyaları "log4j.properties", "log4j.xml" mevcut olmadığında

public class LogFiles {
    // Define a static logger variable so that it references the Logger instance named "LogFiles".
    static final Logger log = Logger.getLogger( LogFiles.class );

    @SuppressWarnings("deprecation")
    public static void main(String[] args) {
        System.out.println("CONFIGURATION_FILE « "+LogManager.DEFAULT_CONFIGURATION_FILE);
        System.out.println("DEFAULT_XML_CONFIGURATION_FILE = 'log4j.xml' « Default access modifier");

        String fileName = //"";
                //"log4j_External.xml";
                "log4j_External.properties";
        String configurationFile = System.getProperty("user.dir")+"/src/" + fileName;

        if( fileName.contains(".xml") ) {
            DOMConfigurator.configure( configurationFile );
            log.info("Extension *.xml");
        } else if ( fileName.contains(".properties") ) {
            PropertyConfigurator.configure( configurationFile );
            log.info("Extension *.properties");
        } else {
            DailyRollingFileAppender dailyRollingAppender = new DailyRollingFileAppender();
            dailyRollingAppender.setFile("E:/Logs/logRollingDayFile.log");
            dailyRollingAppender.setDatePattern("'_'yyyy-MM-dd");

            PatternLayout layout = new PatternLayout();
            layout.setConversionPattern( "%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" );
            dailyRollingAppender.setLayout(layout);

            dailyRollingAppender.activateOptions();

            Logger rootLogger = Logger.getRootLogger();
            rootLogger.setLevel(Level.DEBUG);
            rootLogger.addAppender(dailyRollingAppender);

            log.info("Configuring from Java Class.");
        }

        log.info("Console.Message.");
        method2();
        methodException(0);
    }

    static void method2() {
        log.info("method2 - Console.Message.");
    }
    static void methodException(int b) {
        try {
            int a = 10/b;
            System.out.println("Result : "+ a);
            log.info("Result : "+ a);
        } catch (Exception ex) { // ArithmeticException: / by zero
            log.error(String.format("\n\tException occurred: %s", stackTraceToString(ex)));
        }
    }
    public static String stackTraceToString(Exception ex) {
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        ex.printStackTrace(pw);
        return sw.toString();
    }
}

1

Benim için düzeltme "sr4" klasörüne "log4j.properties" koymak oldu.


0

Log4j'nin üstünde apache commons logging wrapper kullanıyorsak, sınıfyolunda her iki kavanozun da mevcut olması gerekir. Ayrıca, commons-logging.propertiesvelog4j.properties/xml sınıf yolunda mevcut olmalıdır.

Uygulama sınıfını ve log4j.propertiesadını JAVA_OPTSda kullanarak geçirebiliriz -Dorg.apache.commons.logging.Log=<logging implementation class name> -Dlog4j.configuration=<file:location of log4j.properties/xml file>. Aynı şey JAVA_OPTSuygulama / web sunucusu durumunda ayarlanarak da yapılabilir .

Dağıtımda değiştirilebilecek özelliklerin dışsallaştırılmasına yardımcı olacaktır.


0

Bu, .yaml kullanmanın alternatif bir yoludur

Mantık Yapısı:

Configuration:
    Properties:
    Appenders:
    Loggers:

Örneklem:

Configutation:
    name: Default

    Properties:
        Property:
            name: log-path
            value: "logs"

    Appenders:

        Console:
        name: Console_Appender
        target: SYSTEM_OUT
        PatternLayout:
            pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"

       File:
          name: File_Appender
          fileName: ${log-path}/logfile.log
          PatternLayout:
            pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"

    Loggers:

        Root:
            level: debug
            AppenderRef:
              - ref: Console_Appender

        Logger:
            - name: <package>.<subpackage>.<subsubpackage>.<...>
              level: debug
              AppenderRef:
                 - ref: File_Appender
                 level: error             

Ref: LOG4J 2 YAPILANDIRMA: YAML KULLANIMI


0

Test için günlük seviyesini ayarlamayı içeren hızlı kirli bir yol:

org.apache.log4j.BasicConfigurator.configure();
org.apache.log4j.Logger.getRootLogger().setLevel(org.apache.log4j.Level.WARN);

// set to Level.DEBUG for full, or Level.OFF..

0

Maven çözümü:

Yukarıdaki tüm sorunlara rastladım ve bir maven çözümü için 2 bağımlılık kullandım. Bu yapılandırma, yalnızca basit bir projenin standart yapılandırmayla bir günlükçü kullanmasını istiyorsanız hızlı sınama amaçlıdır. Daha fazla bilgiye ihtiyacınız varsa ve daha sonra kendi günlük seviyelerinizi sonlandırırsanız daha sonra bir yapılandırma dosyası oluşturmak istediğinizi düşünebilirim.

    <properties>
        <slf4jVersion>1.7.28</slf4jVersion>
    </properties>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4jVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-jdk14</artifactId>
            <version>${slf4jVersion}</version>
        </dependency>

0

Ben sadece bunu yaptım ve sorun giderildi.

Aşağıdaki blogu takip ettim

https://intellij-support.jetbrains.com/hc/en-us/community/posts/206875685-How-to-fix-log4j-WARN-console-messages-when-running-an-Application-inside-IntelliJ- Fikir

Ama burada şöyle diyor

Bunu düzeltmek için aşağıdaki log4j.resources dosyasını projenizin ana / kaynaklar klasörüne girin

log4j.resources oluşturmak yerine log4j.properties oluşturun. IntelliJ'de Kaynak'a sağ tıklayın -> Yeni -> Kaynak Paketi - log4j olarak adlandırın


0

Intellij IDEA'da bu hatayı log4j.propertiesveyalog4j.xmlKaynak testi klasörünüze dosyasını dosyanın varlığından henüz haberdar olmayabilir.

Bu nedenle, dosyayı ekledikten sonra, dosyayı sağ tıklayın ve log4j.xml dosyasını yeniden derle'yi seçin .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.