Coloque o seguinte conteúdo no seu arquivo de configuração.
Nomeie o arquivo de configuração log4j2.xml
Coloque o log4j2.xml em uma pasta que esteja no caminho da classe (ou seja, sua pasta de origem "src")
Use Logger logger = LogManager.getLogger();para inicializar seu logger
Eu configurei o imediatoFlush = "false", pois isso é melhor para a vida útil do SSD . Se você precisar do log imediatamente no seu arquivo de log, remova o parâmetro ou configure-o como true
Para garantir a integridade, o uso de imediatoFlush = "false" é especialmente recomendado ao usar o Async Loggers ou o AsyncAppender.
Remko Popma
1
Background: imediatFlush = "false" permite que os componentes assíncronos do Log4J2 agrupem vários eventos de log em uma única gravação de disco. Como bônus, seus eventos de log mais recentes são sempre gravados em disco e nunca são deixados em um buffer de memória. (Algo que eu encontrei irritante sobre log4j-1.2.)
Remko Popma
1
Não consegui obter os exemplos no site do Log4j 2.0 para funcionar, mas este funcionou. Obrigado.
21814 djangofan
12
Inclua o fato de que uma limpeza pode ser necessária para quem usa o eclipse. Pelo bem da humanidade.
Reut Sharabani
1
@ThorstenNiehues Não consigo editar meu comentário anterior, mas o eclipse copia a configuração quando você cria e, por algum motivo, nem sempre copia o log4j.xml, mesmo que tenha sido alterado. Pelo menos foi o que resolveu isso para mim.
Reut Sharabani 5/05
19
Aqui está o meu simplista log4j2.xmlque imprime no console e grava em um arquivo diário:
// java
private static final Logger LOGGER = LogManager.getLogger(MyClass.class);
// log4j2.xml
<?xml version="1.0" encoding="UTF-8"?><Configurationstatus="WARN"><Properties><Propertyname="logPath">target/cucumber-logs</Property><Propertyname="rollingFileName">cucumber</Property></Properties><Appenders><Consolename="console"target="SYSTEM_OUT"><PatternLayoutpattern="[%highlight{%-5level}] %d{DEFAULT} %c{1}.%M() - %msg%n%throwable{short.lineNumber}"/></Console><RollingFilename="rollingFile"fileName="${logPath}/${rollingFileName}.log"filePattern="${logPath}/${rollingFileName}_%d{yyyy-MM-dd}.log"><PatternLayoutpattern="[%highlight{%-5level}] %d{DEFAULT} %c{1}.%M() - %msg%n%throwable{short.lineNumber}"/><Policies><!-- Causes a rollover if the log file is older than the current JVM's start time --><OnStartupTriggeringPolicy/><!-- Causes a rollover once the date/time pattern no longer applies to the active file --><TimeBasedTriggeringPolicyinterval="1"modulate="true"/></Policies></RollingFile></Appenders><Loggers><Rootlevel="DEBUG"additivity="false"><AppenderRefref="console"/><AppenderRefref="rollingFile"/></Root></Loggers></Configuration>
TimeBasedTriggeringPolicy
intervalo (inteiro) - com que freqüência uma substituição deve ocorrer com base na unidade de tempo mais específica no padrão de data. Por exemplo, com um padrão de data com horas como o item mais específico e um incremento de 4 rollovers ocorreria a cada 4 horas. O valor padrão é 1.
modular (booleano) - indica se o intervalo deve ser ajustado para fazer com que a próxima rolagem ocorra no limite do intervalo. Por exemplo, se o item for horas, a hora atual é 3 horas e o intervalo é 4, a primeira rolagem ocorrerá às 4 horas e as próximas ocorrerão às 8 horas, meio-dia, 16 horas, etc.
Pessoalmente, comecei recentemente a usar o log4j2, mas estou tendendo à configuração "XML estrito" (ou seja, usando atributos em vez de nomes de elementos), que podem ser validados pelo esquema.
Aqui está meu exemplo simples usando a configuração automática e o modo estrito, usando uma "Propriedade" para definir o nome do arquivo:
<?xml version="1.0" encoding="UTF-8"?><Configurationmonitorinterval="30"status="info"strict="true"><Properties><Propertyname="filename">log/CelsiusConverter.log</Property></Properties><Appenders><Appendertype="Console"name="Console"><Layouttype="PatternLayout"pattern="%d %p [%t] %m%n"/></Appender><Appendertype="Console"name="FLOW"><Layouttype="PatternLayout"pattern="%C{1}.%M %m %ex%n"/></Appender><Appendertype="File"name="File"fileName="${filename}"><Layouttype="PatternLayout"pattern="%d %p %C{1.} [%t] %m%n"/></Appender></Appenders><Loggers><Rootlevel="debug"><AppenderRefref="File"/><AppenderRefref="Console"/><!-- Use FLOW to trace down exact method sending the msg --><!-- <AppenderRef ref="FLOW" /> --></Root></Loggers></Configuration>
A configuração flexível é útil quando você está tentando separar a configuração da compilação e colocar a configuração em um repositório em outro lugar. Infelizmente, as complexidades estão tornando isso um pouco irritante, mas apenas pensei em oferecer um benefício às opções flexíveis de configuração.
adprocas 7/09/17
Qual é a Filepolítica aqui? Qual é o tamanho máximo do arquivo? E como ele grava no arquivo? (faz arquivo contém sempre o último 10mb de toras?)
Respostas:
Notas:
Logger logger = LogManager.getLogger();
para inicializar seu loggerfonte
Aqui está o meu simplista
log4j2.xml
que imprime no console e grava em um arquivo diário:Resultado:
Um novo arquivo de log será criado diariamente com o dia anterior renomeado automaticamente para:
cucumber_yyyy-MM-dd.log
Em um projeto Maven, você colocaria
log4j2.xml
insrc/main/resources
ousrc/test/resources
.fonte
O log4j2 possui um sistema de configuração muito flexível (que IMHO é mais uma distração do que uma ajuda), você pode até usar o JSON. Consulte https://logging.apache.org/log4j/2.x/manual/configuration.html para obter uma referência.
Pessoalmente, comecei recentemente a usar o log4j2, mas estou tendendo à configuração "XML estrito" (ou seja, usando atributos em vez de nomes de elementos), que podem ser validados pelo esquema.
Aqui está meu exemplo simples usando a configuração automática e o modo estrito, usando uma "Propriedade" para definir o nome do arquivo:
fonte
File
política aqui? Qual é o tamanho máximo do arquivo? E como ele grava no arquivo? (faz arquivo contém sempre o último 10mb de toras?)