├── LICENSE ├── README.md ├── jul ├── README.md ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── mkyong │ │ ├── HelloWorld.java │ │ └── LoadLogPropertiesFile.java │ └── resources │ └── logging.properties ├── log4j2 ├── README.md ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── mkyong │ │ ├── HelloWorld.java │ │ └── HelloWorldError.java │ └── resources │ ├── bk │ ├── log4j2.properties │ └── log4j2.yml │ ├── log4j2-async.xml │ ├── log4j2-email.xml │ └── log4j2.xml ├── slf4j-logback ├── README.md ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── mkyong │ │ ├── HelloWorld.java │ │ └── HelloWorldError.java │ └── resources │ ├── logback-email.xml │ └── logback.xml └── tinylog ├── README.md ├── pom.xml └── src └── main ├── java └── com │ └── mkyong │ ├── HelloWorld.java │ ├── LogWithArguments.java │ ├── LogWithException.java │ ├── RollingFileExample.java │ └── TagExample.java └── resources ├── tinylog-rolling.properties ├── tinylog-tag.properties └── tinylog.properties /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Yong Mook Kim 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # java-logging 2 | About Java logging. 3 | -------------------------------------------------------------------------------- /jul/README.md: -------------------------------------------------------------------------------- 1 | # Java Logging APIs Tutorial 2 | 3 | `java.util.logging` examples. 4 | 5 | https://mkyong.com/logging/java-logging-apis-tutorial/ -------------------------------------------------------------------------------- /jul/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 4.0.0 7 | 8 | com.mkyong 9 | jul 10 | 1.0 11 | 12 | 13 | UTF-8 14 | 11 15 | 11 16 | 11 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | org.apache.maven.plugins 26 | maven-compiler-plugin 27 | 3.8.1 28 | 29 | ${java.version} 30 | ${java.version} 31 | 32 | 33 | 34 | 35 | org.apache.maven.plugins 36 | maven-shade-plugin 37 | 3.2.4 38 | 39 | 40 | 41 | package 42 | 43 | shade 44 | 45 | 46 | 47 | 49 | com.mkyong.HelloWorld 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /jul/src/main/java/com/mkyong/HelloWorld.java: -------------------------------------------------------------------------------- 1 | package com.mkyong; 2 | 3 | import java.util.logging.Level; 4 | import java.util.logging.Logger; 5 | 6 | public class HelloWorld { 7 | 8 | private static Logger logger = Logger.getLogger(HelloWorld.class.getName()); 9 | 10 | public static void main(String[] args) { 11 | 12 | // set log level to SEVERE, default level info 13 | logger.setLevel(Level.SEVERE); 14 | 15 | // Log a info level msg 16 | logger.info("This is level info logging"); 17 | 18 | logger.log(Level.WARNING, "This is level warning logging"); 19 | 20 | logger.log(Level.SEVERE, "This is level severe logging"); 21 | 22 | System.out.println("Hello Java Logging APIs."); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /jul/src/main/java/com/mkyong/LoadLogPropertiesFile.java: -------------------------------------------------------------------------------- 1 | package com.mkyong; 2 | 3 | import java.io.IOException; 4 | import java.io.InputStream; 5 | import java.util.logging.Level; 6 | import java.util.logging.LogManager; 7 | import java.util.logging.Logger; 8 | 9 | // java server.jar -Djava.util.logging.config.file=/path/logging.properties 10 | public class LoadLogPropertiesFile { 11 | 12 | static { 13 | // must set before the Logger 14 | String path = LoadLogPropertiesFile.class.getClassLoader().getResource("logging.properties").getFile(); 15 | System.setProperty("java.util.logging.config.file", path); 16 | 17 | /*try (InputStream is = LoadLogPropertiesFile.class.getClassLoader(). 18 | getResourceAsStream("logging.properties")) { 19 | LogManager.getLogManager().readConfiguration(is); 20 | } catch (IOException e) { 21 | e.printStackTrace(); 22 | }*/ 23 | 24 | } 25 | 26 | private static Logger logger = Logger.getLogger(LoadLogPropertiesFile.class.getName()); 27 | 28 | public static void main(String[] args) { 29 | 30 | // Log a info level msg 31 | logger.info("This is level info logging"); 32 | 33 | logger.log(Level.SEVERE, "This is level severe logging"); 34 | 35 | logger.log(Level.WARNING, "This is level warning logging"); 36 | 37 | System.out.println("Hello Java Logging APIs."); 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /jul/src/main/resources/logging.properties: -------------------------------------------------------------------------------- 1 | # Logs to file and console 2 | # handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler 3 | 4 | # Logs to console only 5 | handlers= java.util.logging.ConsoleHandler 6 | 7 | # Global logging levels, 7 levels 8 | .level= SEVERE 9 | 10 | # Log file output in user's home directory, %h 11 | java.util.logging.FileHandler.pattern = %h/java%u.log 12 | java.util.logging.FileHandler.limit = 50000 13 | java.util.logging.FileHandler.count = 1 14 | java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter 15 | # java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter 16 | 17 | java.util.logging.ConsoleHandler.level = INFO 18 | java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter 19 | 20 | java.util.logging.SimpleFormatter.format=[%1$tc] %4$s: %5$s %n 21 | 22 | # log level for package, this override global .level and handler level 23 | com.mkyong.level = WARNING -------------------------------------------------------------------------------- /log4j2/README.md: -------------------------------------------------------------------------------- 1 | # Apache Log4j 2 Tutorial 2 | 3 | Article link : https://www.mkyong.com/logging/apache-log4j-2-tutorials/ -------------------------------------------------------------------------------- /log4j2/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 4.0.0 7 | 8 | com.mkyong 9 | log4j2 10 | 1.0 11 | 12 | 13 | UTF-8 14 | 1.8 15 | 2.11.2 16 | 3.4.2 17 | 2.9.8 18 | 19 | 20 | 21 | 22 | 23 | org.apache.logging.log4j 24 | log4j-api 25 | ${log4j.version} 26 | 27 | 28 | 29 | org.apache.logging.log4j 30 | log4j-core 31 | ${log4j.version} 32 | 33 | 34 | 35 | 36 | com.lmax 37 | disruptor 38 | ${disruptor.version} 39 | 40 | 41 | 48 | 49 | 50 | 51 | com.sun.mail 52 | javax.mail 53 | 1.6.2 54 | 55 | 56 | 57 | 58 | 59 | com.fasterxml.jackson.dataformat 60 | jackson-dataformat-yaml 61 | ${jackson.version} 62 | 63 | 64 | 65 | com.fasterxml.jackson.core 66 | jackson-databind 67 | ${jackson.version} 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | org.apache.maven.plugins 76 | maven-compiler-plugin 77 | 3.8.0 78 | 79 | ${java.version} 80 | ${java.version} 81 | 82 | 83 | 84 | 85 | org.apache.maven.plugins 86 | maven-shade-plugin 87 | 3.2.0 88 | 89 | 90 | 91 | package 92 | 93 | shade 94 | 95 | 96 | 97 | 99 | com.mkyong.HelloWorld 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | -------------------------------------------------------------------------------- /log4j2/src/main/java/com/mkyong/HelloWorld.java: -------------------------------------------------------------------------------- 1 | package com.mkyong; 2 | 3 | import org.apache.logging.log4j.LogManager; 4 | import org.apache.logging.log4j.Logger; 5 | 6 | public class HelloWorld { 7 | 8 | private static final Logger logger = LogManager.getLogger(HelloWorld.class); 9 | 10 | public static void main(String[] args) { 11 | 12 | logger.debug("Hello from Log4j 2"); 13 | 14 | // in old days, we need to check the log level log to increase performance 15 | /*if (logger.isDebugEnabled()) { 16 | logger.debug("{}", getNumber()); 17 | }*/ 18 | 19 | // with Java 8, we can do this, no need to check the log level 20 | while (true)//test rolling file 21 | logger.debug("hello {}", () -> getNumber()); 22 | 23 | } 24 | 25 | static int getNumber() { 26 | return 5; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /log4j2/src/main/java/com/mkyong/HelloWorldError.java: -------------------------------------------------------------------------------- 1 | package com.mkyong; 2 | 3 | import org.apache.logging.log4j.LogManager; 4 | import org.apache.logging.log4j.Logger; 5 | 6 | public class HelloWorldError { 7 | 8 | private static final Logger logger = LogManager.getLogger(HelloWorldError.class); 9 | 10 | public static void main(String[] args) { 11 | 12 | try { 13 | System.out.println(getData()); 14 | } catch (IllegalArgumentException e) { 15 | logger.error("{}", e); 16 | } 17 | 18 | } 19 | 20 | static int getData() throws IllegalArgumentException { 21 | throw new IllegalArgumentException("Sorry IllegalArgumentException!"); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /log4j2/src/main/resources/bk/log4j2.properties: -------------------------------------------------------------------------------- 1 | status = warn 2 | 3 | appender.console.type = Console 4 | appender.console.name = LogToConsole 5 | appender.console.layout.type = PatternLayout 6 | appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n 7 | 8 | #appender.file.type = File 9 | #appender.file.name = LogToFile 10 | #appender.file.fileName=logs/app.log 11 | #appender.file.layout.type=PatternLayout 12 | #appender.file.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n 13 | 14 | # Rotate log file 15 | appender.rolling.type = RollingFile 16 | appender.rolling.name = LogToRollingFile 17 | appender.rolling.fileName = logs/app.log 18 | appender.rolling.filePattern = logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz 19 | appender.rolling.layout.type = PatternLayout 20 | appender.rolling.layout.pattern = %d %p %C{1.} [%t] %m%n 21 | appender.rolling.policies.type = Policies 22 | appender.rolling.policies.time.type = TimeBasedTriggeringPolicy 23 | appender.rolling.policies.size.type = SizeBasedTriggeringPolicy 24 | appender.rolling.policies.size.size=10MB 25 | appender.rolling.strategy.type = DefaultRolloverStrategy 26 | appender.rolling.strategy.max = 10 27 | 28 | # Log to console and rolling file 29 | logger.app.name = com.mkyong 30 | logger.app.level = debug 31 | logger.app.additivity = false 32 | logger.app.appenderRef.rolling.ref = LogToRollingFile 33 | logger.app.appenderRef.console.ref = LogToConsole 34 | 35 | rootLogger.level = info 36 | rootLogger.appenderRef.stdout.ref = LogToConsole -------------------------------------------------------------------------------- /log4j2/src/main/resources/bk/log4j2.yml: -------------------------------------------------------------------------------- 1 | Configuration: 2 | status: warn 3 | 4 | appenders: 5 | Console: 6 | name: LogToConsole 7 | PatternLayout: 8 | Pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" 9 | 10 | #File: 11 | # name: File 12 | # fileName: logs/app.log 13 | # PatternLayout: 14 | # Pattern: "%d %p %C{1.} [%t] %m%n" 15 | 16 | RollingFile: 17 | - name: LogToRollingFile 18 | fileName: logs/app.log 19 | filePattern: "logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz" 20 | PatternLayout: 21 | pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" 22 | Policies: 23 | SizeBasedTriggeringPolicy: 24 | size: 10MB 25 | DefaultRollOverStrategy: 26 | max: 10 27 | 28 | Loggers: 29 | logger: 30 | - name: com.mkyong 31 | level: debug 32 | additivity: false 33 | AppenderRef: 34 | - ref: LogToConsole 35 | - ref: LogToRollingFile 36 | 37 | Root: 38 | level: error 39 | AppenderRef: 40 | ref: LogToConsole -------------------------------------------------------------------------------- /log4j2/src/main/resources/log4j2-async.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 10 | 11 | %d %p %c{1.} [%t] %m%n 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /log4j2/src/main/resources/log4j2-email.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /log4j2/src/main/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 21 | 22 | 24 | 25 | %d %p %c{1.} [%t] %m%n 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /slf4j-logback/README.md: -------------------------------------------------------------------------------- 1 | # SLF4J Logback Tutorial 2 | 3 | Article link : https://www.mkyong.com/logging/slf4j-logback-tutorial/ 4 | 5 | -------------------------------------------------------------------------------- /slf4j-logback/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 4.0.0 7 | 8 | com.mkyong 9 | slf4j-logback 10 | 1.0 11 | 12 | 13 | UTF-8 14 | 1.8 15 | 1.2.3 16 | 1.6.2 17 | 18 | 19 | 20 | 21 | 22 | 23 | ch.qos.logback 24 | logback-classic 25 | ${logback.version} 26 | 27 | 28 | 29 | 30 | com.sun.mail 31 | javax.mail 32 | ${javax.mail.version} 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | org.apache.maven.plugins 41 | maven-compiler-plugin 42 | 3.8.0 43 | 44 | ${java.version} 45 | ${java.version} 46 | 47 | 48 | 49 | 50 | 51 | org.apache.maven.plugins 52 | maven-shade-plugin 53 | 3.2.0 54 | 55 | 56 | 57 | package 58 | 59 | shade 60 | 61 | 62 | 63 | 65 | com.mkyong.HelloWorld 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /slf4j-logback/src/main/java/com/mkyong/HelloWorld.java: -------------------------------------------------------------------------------- 1 | package com.mkyong; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | public class HelloWorld { 7 | 8 | private static final Logger logger = LoggerFactory.getLogger(HelloWorld.class); 9 | 10 | public static void main(String[] args) { 11 | 12 | logger.debug("Hello from Logback"); 13 | 14 | //while (true)//test rotate file 15 | logger.debug("getNumber() : {}", getNumber()); 16 | 17 | } 18 | 19 | static int getNumber() { 20 | return 5; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /slf4j-logback/src/main/java/com/mkyong/HelloWorldError.java: -------------------------------------------------------------------------------- 1 | package com.mkyong; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | public class HelloWorldError { 7 | 8 | private static final Logger logger = LoggerFactory.getLogger(HelloWorldError.class); 9 | 10 | public static void main(String[] args) { 11 | 12 | try { 13 | System.out.println(getData()); 14 | } catch (IllegalArgumentException e) { 15 | logger.error("{}", e); 16 | } 17 | 18 | } 19 | 20 | static int getData() throws IllegalArgumentException { 21 | throw new IllegalArgumentException("Sorry IllegalArgumentException!"); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /slf4j-logback/src/main/resources/logback-email.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n 8 | 9 | 10 | 11 | 12 | 13 | smtp.mailgun.org 14 | 25 15 | 123 16 | 123 17 | TO_EMAIL 18 | RO_ANOTHER_EMAIL 19 | FROM_EMAIL 20 | TESTING: %logger{20} - %m 21 | 22 | 23 | 24 | 25 | 26 | 1 27 | 28 | 29 | 30 | 31 | false 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /slf4j-logback/src/main/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n 10 | 11 | 12 | 13 | 14 | 15 | ${HOME_LOG} 16 | 17 | 18 | logs/archived/app.%d{yyyy-MM-dd}.%i.log 19 | 20 | 10MB 21 | 22 | 20GB 23 | 24 | 60 25 | 26 | 27 | 28 | %d %p %c{1.} [%t] %m%n 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 512 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /tinylog/README.md: -------------------------------------------------------------------------------- 1 | # tinylog Tutorial 2 | 3 | tinylog 2 examples 4 | 5 | https://mkyong.com/logging/tinylog-tutorial/ -------------------------------------------------------------------------------- /tinylog/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 4.0.0 7 | 8 | com.mkyong 9 | tinylog 10 | 1.0 11 | 12 | 13 | UTF-8 14 | 11 15 | 11 16 | 11 17 | 2.3.2 18 | 19 | 20 | 21 | 22 | org.tinylog 23 | tinylog-api 24 | ${tinylog.version} 25 | 26 | 27 | 28 | org.tinylog 29 | tinylog-impl 30 | ${tinylog.version} 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | org.apache.maven.plugins 39 | maven-compiler-plugin 40 | 3.8.1 41 | 42 | ${java.version} 43 | ${java.version} 44 | 45 | 46 | 47 | 48 | org.apache.maven.plugins 49 | maven-shade-plugin 50 | 3.2.4 51 | 52 | 53 | 54 | package 55 | 56 | shade 57 | 58 | 59 | 60 | 62 | com.mkyong.HelloWorld 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /tinylog/src/main/java/com/mkyong/HelloWorld.java: -------------------------------------------------------------------------------- 1 | package com.mkyong; 2 | 3 | import org.tinylog.Logger; 4 | 5 | public class HelloWorld { 6 | 7 | // no need declare Logger, tinylog provide static Logger 8 | //private static Logger logger = Logger.getLogger(HelloWorld.class.getName()); 9 | 10 | public static void main(String[] args) { 11 | 12 | Logger.info("Hello World TinyLog!"); 13 | 14 | Logger.trace("This is trace!"); 15 | 16 | Logger.debug("This is debug!"); 17 | 18 | Logger.info("This is info!"); 19 | 20 | Logger.warn("This is warn!"); 21 | 22 | Logger.error("This is error!"); 23 | 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /tinylog/src/main/java/com/mkyong/LogWithArguments.java: -------------------------------------------------------------------------------- 1 | package com.mkyong; 2 | 3 | import org.tinylog.Logger; 4 | 5 | public class LogWithArguments { 6 | 7 | public static void main(String[] args) { 8 | 9 | String msg = "info"; 10 | int number = 9; 11 | 12 | Logger.info("This is {}, {}", msg, number); 13 | 14 | Logger.error("This is {}", "error"); 15 | 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /tinylog/src/main/java/com/mkyong/LogWithException.java: -------------------------------------------------------------------------------- 1 | package com.mkyong; 2 | 3 | import org.tinylog.Logger; 4 | 5 | public class LogWithException { 6 | 7 | public static void main(String[] args) { 8 | 9 | try { 10 | int answer = 1 / 0; 11 | System.out.println(answer); 12 | } catch (Exception ex) { 13 | Logger.error(ex); 14 | } 15 | 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /tinylog/src/main/java/com/mkyong/RollingFileExample.java: -------------------------------------------------------------------------------- 1 | package com.mkyong; 2 | 3 | import org.tinylog.Logger; 4 | 5 | public class RollingFileExample { 6 | 7 | public static void main(String[] args) { 8 | 9 | // create hello x 3 per line 10 | String line = "Hello tinylog! "; 11 | line = line + line + line; 12 | 13 | System.out.println(line); 14 | 15 | int count = 0; 16 | while (count < 100_000) { 17 | Logger.info(line + count); 18 | count++; 19 | } 20 | 21 | System.out.println("Done"); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /tinylog/src/main/java/com/mkyong/TagExample.java: -------------------------------------------------------------------------------- 1 | package com.mkyong; 2 | 3 | import org.tinylog.Logger; 4 | 5 | public class TagExample { 6 | 7 | public static void main(String[] args) { 8 | 9 | Logger.info("normal"); 10 | 11 | // send to writer tagged `system` 12 | Logger.tag("system").error("this is system!"); 13 | 14 | // send to writer tagged `api` 15 | Logger.tag("api").info("This is normal api log!"); 16 | 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /tinylog/src/main/resources/tinylog-rolling.properties: -------------------------------------------------------------------------------- 1 | # rolling file 2 | writer = rolling file 3 | writer.level = info 4 | writer.format = {date: HH:mm:ss.SSS} {level}: {message} 5 | # writer.file = {date:yyyy}/{date:MM}/log-{pid}.{count}.log 6 | writer.file = logs/{date:yyyy-MM-dd}-log.{count}.log 7 | writer.latest = logs/latest.log 8 | writer.charset = UTF-8 9 | writer.buffered = true 10 | writer.policies = startup, daily: 00:00, size: 1mb 11 | writer.backups = 100 12 | writer.convert = gzip 13 | 14 | # writing thread or async logger, better performance 15 | writingthread = true -------------------------------------------------------------------------------- /tinylog/src/main/resources/tinylog-tag.properties: -------------------------------------------------------------------------------- 1 | # logs to Console 2 | writer = console 3 | writer.format = {date: HH:mm:ss.SSS} {level}: {message} 4 | writer.level = info 5 | 6 | # logs to a file, tag `api` 7 | writer2 = file 8 | writer2.tag = api 9 | writer2.file = logs/api.log 10 | writer2.format={date: yyyy-MM-dd HH:mm:ss.SSS} {level}: {message} 11 | writer2.level = info 12 | 13 | # logs to a file, tag `system` 14 | writer3 = file 15 | writer3.tag = system 16 | writer3.file = logs/system.log 17 | writer3.format={date: yyyy-MM-dd HH:mm:ss.SSS} {level}: {message} -------------------------------------------------------------------------------- /tinylog/src/main/resources/tinylog.properties: -------------------------------------------------------------------------------- 1 | # logs to Console 2 | #writer = console 3 | #writer.format = {date: HH:mm:ss.SSS} {level}: {message} 4 | #writer.level = info 5 | 6 | # logs to a file 7 | #writer2 = file 8 | #writer2.file = log.txt 9 | #writer2.level = info 10 | 11 | # logs to Console 12 | # writerConsole = console 13 | # writerConsole.format = {date: HH:mm:ss.SSS} {level}: {message} 14 | # writerConsole.level = info 15 | 16 | # logs to a file 17 | # writerFile = file 18 | # writerFile.file = log.txt 19 | # writerFile.level = info --------------------------------------------------------------------------------